Skip to content

Commit dcc567c

Browse files
committed
allow whitelist to be a function
1 parent d51fcfb commit dcc567c

File tree

2 files changed

+24
-4
lines changed

2 files changed

+24
-4
lines changed

src/__tests__/createMiddleware-test.js

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -96,6 +96,20 @@ describe('createMiddleware', () => {
9696
engine.save.should.have.been.called;
9797
});
9898

99+
it('should allow whitelist function', () => {
100+
const engine = { save: sinon.stub().resolves() };
101+
const store = { getState: sinon.spy() };
102+
const next = sinon.spy();
103+
const action = { type: 'ALLOWED' };
104+
const whitelistFn = (type) => {
105+
return type === 'ALLOWED';
106+
};
107+
108+
createMiddleware(engine, [], whitelistFn)(store)(next)(action);
109+
110+
engine.save.should.have.been.called;
111+
});
112+
99113
describeConsoleWarnInNonProduction(
100114
'should not process functions',
101115
() => {

src/createMiddleware.js

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -51,12 +51,20 @@ function isValidAction(action) {
5151
return false;
5252
}
5353

54+
function handleWhitelist(action, actionWhitelist) {
55+
if (Array.isArray(actionWhitelist)) {
56+
// Don't filter if the whitelist is empty
57+
return actionWhitelist.length === 0 ? true : actionWhitelist.indexOf(action.type) !== -1;
58+
}
59+
// actionWhitelist is a function that returns true or false
60+
return actionWhitelist(action.type);
61+
}
5462

5563
export default (engine, actionBlacklist = [], actionWhitelist = []) => {
5664
// Also don't save if we process our own actions
5765
const blacklistedActions = [...actionBlacklist, LOAD, SAVE];
5866

59-
if (process.env.NODE_ENV !== 'production') {
67+
if (process.env.NODE_ENV !== 'production' && Array.isArray(actionWhitelist)) {
6068
warnAboutConfusingFiltering(actionBlacklist, actionWhitelist);
6169
}
6270

@@ -69,9 +77,7 @@ export default (engine, actionBlacklist = [], actionWhitelist = []) => {
6977
}
7078

7179
const isOnBlacklist = blacklistedActions.indexOf(action.type) !== -1;
72-
const isOnWhitelist = actionWhitelist.length === 0
73-
? true // Don't filter if the whitelist is empty
74-
: actionWhitelist.indexOf(action.type) !== -1;
80+
const isOnWhitelist = handleWhitelist(action, actionWhitelist);
7581

7682
// Skip blacklisted actions
7783
if (!isOnBlacklist && isOnWhitelist) {

0 commit comments

Comments
 (0)