summaryrefslogtreecommitdiffstats
path: root/devtools/client/shared/redux/middleware/ignore.js
diff options
context:
space:
mode:
Diffstat (limited to 'devtools/client/shared/redux/middleware/ignore.js')
-rw-r--r--devtools/client/shared/redux/middleware/ignore.js38
1 files changed, 38 insertions, 0 deletions
diff --git a/devtools/client/shared/redux/middleware/ignore.js b/devtools/client/shared/redux/middleware/ignore.js
new file mode 100644
index 0000000000..d2e8cd9e24
--- /dev/null
+++ b/devtools/client/shared/redux/middleware/ignore.js
@@ -0,0 +1,38 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+"use strict";
+
+const IGNORING = Symbol("IGNORING");
+const START_IGNORE_ACTION = "START_IGNORE_ACTION";
+
+/**
+ * A middleware that prevents any action of being called once it is activated.
+ * This is useful to apply while destroying a given panel, as it will ignore all calls
+ * to actions, where we usually make our client -> server communications.
+ * This middleware should be declared before any other middleware to to effectively
+ * ignore every actions.
+ */
+function ignore({ getState }) {
+ return next => action => {
+ if (action.type === START_IGNORE_ACTION) {
+ getState()[IGNORING] = true;
+ return null;
+ }
+
+ if (getState()[IGNORING]) {
+ // We only print the action type, and not the whole action object, as it can holds
+ // very complex data that would clutter stdout logs and make them impossible
+ // to parse for treeherder.
+ console.warn("IGNORED REDUX ACTION:", action.type);
+ return null;
+ }
+
+ return next(action);
+ };
+}
+
+module.exports = {
+ ignore,
+ START_IGNORE_ACTION: { type: START_IGNORE_ACTION },
+};