11import createStore from '../../../app/store/createStore' ;
22import configureStore from '../../../app/store/configureStore' ;
33import { isAllowed } from '../options/syncOptions' ;
4+ import Monitor from '../../../app/service/Monitor' ;
45import { getLocalFilter , isFiltered , filterState } from '../utils/filters' ;
56import notifyErrors from '../utils/notifyErrors' ;
67import importState from '../utils/importState' ;
@@ -21,16 +22,15 @@ window.devToolsExtension = function(reducer, preloadedState, config) {
2122
2223 let store ;
2324 let shouldSerialize = config . serializeState || config . serializeAction ;
24- let lastAction ;
25- let lastTime ;
26- let waitingTimeout ;
2725 let errorOccurred = false ;
28- let isMonitored = false ;
2926 let isExcess ;
3027 const instanceId = generateId ( config . instanceId ) ;
3128 const localFilter = getLocalFilter ( config ) ;
3229 const { statesFilter, actionsFilter } = config ;
3330
31+ const monitor = new Monitor ( relayState ) ;
32+ if ( config . getMonitor ) config . getMonitor ( monitor ) ;
33+
3434 function relay ( type , state , action , nextActionId ) {
3535 const message = {
3636 type,
@@ -60,16 +60,6 @@ window.devToolsExtension = function(reducer, preloadedState, config) {
6060 relay ( 'STATE' , store . liftedStore . getState ( ) ) ;
6161 }
6262
63- function start ( ) {
64- isMonitored = true ;
65- relayState ( ) ;
66- }
67-
68- function stop ( ) {
69- isMonitored = false ;
70- clearTimeout ( waitingTimeout ) ;
71- }
72-
7363 function onMessage ( message ) {
7464 switch ( message . type ) {
7565 case 'DISPATCH' :
@@ -88,10 +78,10 @@ window.devToolsExtension = function(reducer, preloadedState, config) {
8878 relayState ( ) ;
8979 return ;
9080 case 'START' :
91- start ( ) ;
81+ monitor . start ( ) ;
9282 return ;
9383 case 'STOP' :
94- stop ( ) ;
84+ monitor . stop ( ) ;
9585 relay ( 'STOP' ) ;
9686 }
9787 }
@@ -111,39 +101,17 @@ window.devToolsExtension = function(reducer, preloadedState, config) {
111101 relay ( 'INIT_INSTANCE' ) ;
112102 }
113103
114- function monitorReducer ( state = { } , action ) {
115- if ( ! isMonitored ) return state ;
116- lastAction = action . type ;
117- if ( lastAction === '@@redux/INIT' && store . liftedStore ) {
118- // Send new lifted state on hot-reloading
119- setTimeout ( relayState , 0 ) ;
120- }
121- return state ;
122- }
123-
124- const monitorActions = [
125- 'TOGGLE_ACTION' , 'SWEEP' , 'SET_ACTIONS_ACTIVE' , 'IMPORT_STATE'
126- ] ;
127- function isWaiting ( ) {
128- const currentTime = Date . now ( ) ;
129- if ( lastTime && currentTime - lastTime < 200 ) { // no more frequently than once in 200ms
130- stop ( ) ;
131- waitingTimeout = setTimeout ( start , 1000 ) ;
132- return true ;
133- }
134- lastTime = currentTime ;
135- return false ;
136- }
137-
138104 function handleChange ( state , liftedState ) {
139- if ( ! isMonitored ) return ;
105+ if ( ! monitor . active ) return ;
140106 const nextActionId = liftedState . nextActionId ;
141107 const liftedAction = liftedState . actionsById [ nextActionId - 1 ] ;
142108 const action = liftedAction . action ;
143109 if ( action . type === '@@INIT' ) {
144110 relay ( 'INIT' , state , { timestamp : Date . now ( ) } ) ;
145- } else if ( ! errorOccurred && monitorActions . indexOf ( lastAction ) === - 1 ) {
146- if ( lastAction === 'JUMP_TO_STATE' || isFiltered ( action , localFilter ) || isWaiting ( ) ) return ;
111+ } else if ( ! errorOccurred && ! monitor . isMonitorAction ( ) ) {
112+ if (
113+ monitor . isTimeTraveling ( ) || isFiltered ( action , localFilter ) || monitor . isWaiting ( )
114+ ) return ;
147115 const { maxAge } = window . devToolsOptions ;
148116 relay ( 'ACTION' , state , liftedAction , nextActionId ) ;
149117 if ( ! isExcess && maxAge ) isExcess = liftedState . stagedActionIds . length >= maxAge ;
@@ -160,7 +128,7 @@ window.devToolsExtension = function(reducer, preloadedState, config) {
160128 if ( ! isAllowed ( window . devToolsOptions ) ) return next ( reducer_ , initialState_ , enhancer_ ) ;
161129
162130 store = stores [ instanceId ] =
163- configureStore ( next , monitorReducer , config ) ( reducer_ , initialState_ , enhancer_ ) ;
131+ configureStore ( next , monitor . reducer , config ) ( reducer_ , initialState_ , enhancer_ ) ;
164132
165133 init ( ) ;
166134 store . subscribe ( ( ) => {
0 commit comments