Source code

Revision control

Copy as Markdown

Other Tools

/* 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]) {
// Throw to stop execution from the callsite and prevent any further code from running
throw new Error(
"[REDUX_MIDDLEWARE_IGNORED_REDUX_ACTION] Dispatching '" +
(action.type || action) +
"' action after panel's closing"
);
}
return next(action);
};
}
module.exports = {
ignore,
isIgnoringActions(state) {
return state[IGNORING];
},
START_IGNORE_ACTION: { type: START_IGNORE_ACTION },
};