@@ -6,14 +6,42 @@ import { isAllowed } from '../options/syncOptions';
66window . devToolsExtension = function ( next ) {
77 function devToolsInit ( store ) {
88 if ( ! window . devToolsOptions ) window . devToolsOptions = { } ;
9- let timeout = { id : null , last : 0 } ;
9+ let timeout = { id : null , last : 0 } ;
10+ let filtered = { last : null , post : false , skip : false } ;
1011
11- function doChange ( init ) {
12+ function checkState ( ) {
13+ filtered . post = true ;
1214 const state = store . liftedStore . getState ( ) ;
15+ if ( window . devToolsOptions . filter ) {
16+ if ( filtered . skip ) filtered . skip = false ;
17+ else {
18+ const actionType = state . actionsById [ state . nextActionId - 1 ] . action . type ;
19+ const { whitelist, blacklist } = window . devToolsOptions ;
20+ if (
21+ whitelist && whitelist . indexOf ( actionType ) === - 1 ||
22+ blacklist && blacklist . indexOf ( actionType ) !== - 1
23+ ) filtered . post = false ;
24+ }
25+ }
26+ return state ;
27+ }
28+
29+ function doChange ( init ) {
30+ const state = filtered . last || checkState ( ) ;
31+
32+ if ( ! filtered . post ) return ;
33+ filtered . last = null ; filtered . post = false ;
34+
1335 if ( window . devToolsOptions . limit && state . currentStateIndex > window . devToolsOptions . limit ) {
1436 store . liftedStore . dispatch ( { type : COMMIT , timestamp : Date . now ( ) } ) ;
1537 return ;
1638 }
39+
40+ if ( window . devToolsOptions . filter ) {
41+ const { whitelist, blacklist } = window . devToolsOptions ;
42+ state . filter = { whitelist, blacklist } ;
43+ }
44+
1745 window . postMessage ( {
1846 payload : typeof window . devToolsOptions . serialize === 'undefined' || window . devToolsOptions . serialize ? stringify ( state ) : state ,
1947 source : 'redux-page' ,
@@ -22,6 +50,8 @@ window.devToolsExtension = function(next) {
2250 }
2351
2452 function onChange ( init ) {
53+ if ( window . devToolsOptions . filter ) filtered . last = checkState ( ) ;
54+
2555 if ( init || ! window . devToolsOptions . timeout ) doChange ( init ) ;
2656 else if ( ! timeout . last ) {
2757 doChange ( ) ;
@@ -49,7 +79,7 @@ window.devToolsExtension = function(next) {
4979 }
5080
5181 if ( message . type === ACTION ) {
52- timeout . last = 0 ;
82+ timeout . last = 0 ; filtered . skip = true ;
5383 store . liftedStore . dispatch ( message . payload ) ;
5484 } else if ( message . type === UPDATE ) {
5585 onChange ( ) ;
0 commit comments