@@ -172,40 +172,26 @@ exports.addObserver = function(observerState, getter, handler) {
172172 handler : handler ,
173173 } )
174174
175- let updatedObserverState
176-
177- let existingGetters = observerState . get ( 'getters' ) ;
178-
179- let getterId = existingGetters . indexOf ( getter ) ;
180-
181- if ( getterId < 0 ) {
182- existingGetters . push ( getter ) ;
183- getterId = existingGetters . length - 1 ;
184- }
185- //update getterMap
186-
187- let observerIdsForGetter = observerState . getIn ( [ 'gettersMap' , getterId ] )
188-
189- if ( ! observerIdsForGetter ) {
190- observerIdsForGetter = Immutable . Set ( [ ] )
191- }
192-
193- observerIdsForGetter = observerIdsForGetter . add ( currId ) ;
194-
195- updatedObserverState = observerState . setIn ( [ 'gettersMap' , getterId ] , observerIdsForGetter ) ;
175+ let updatedObserverState = observerState . updateIn ( [ 'gettersMap' , getter ]
176+ , observerIds =>
177+ observerIds
178+ ? observerIds . add ( currId )
179+ : Immutable . Set ( [ ] ) . add ( currId )
180+ )
196181
197182 if ( storeDeps . size === 0 ) {
198183 // no storeDeps means the observer is dependent on any of the state changing
199184
200- updatedObserverState = updatedObserverState . updateIn ( [ 'any' ] , getters => getters . add ( getterId ) )
185+ updatedObserverState = updatedObserverState . updateIn ( [ 'any' ] , getters => getters . add ( getter ) )
201186 } else {
202187 updatedObserverState = updatedObserverState . withMutations ( map => {
203188 storeDeps . forEach ( storeId => {
204- let path = [ 'stores' , storeId ]
205- if ( ! map . hasIn ( path ) ) {
206- map . setIn ( path , Immutable . Set ( [ ] ) )
207- }
208- map . updateIn ( [ 'stores' , storeId ] , getters => getters . add ( getterId ) )
189+ map . updateIn ( [ 'stores' , storeId ]
190+ , getters =>
191+ getters
192+ ? getters . add ( getter )
193+ : Immutable . Set ( [ ] ) . add ( getter )
194+ )
209195 } )
210196 } )
211197 }
@@ -267,31 +253,28 @@ exports.removeObserver = function(observerState, getter, handler) {
267253 */
268254exports . removeObserverByEntry = function ( observerState , entry ) {
269255 return observerState . withMutations ( map => {
270- try {
271- const id = entry . get ( 'id' )
272- const getter = entry . get ( 'getter' )
273- const storeDeps = entry . get ( 'storeDeps' )
274-
275- const existingGetters = observerState . get ( 'getters' ) ;
256+ const id = entry . get ( 'id' )
257+ const getter = entry . get ( 'getter' )
258+ const storeDeps = entry . get ( 'storeDeps' )
276259
277- const getterId = existingGetters . indexOf ( getter ) ;
260+ map . updateIn ( [ 'gettersMap' , getter ] , observerIds => observerIds . remove ( id ) ) ;
278261
279- //cleaning the gettersMap
280- map . updateIn ( [ 'gettersMap' , getterId ] , observerIds => observerIds . remove ( id ) ) ;
262+ if ( map . getIn ( [ 'gettersMap' , getter ] ) . size <= 0 ) {
281263
282- if ( storeDeps . size === 0 && map . getIn ( [ 'gettersMap' , getterId ] ) . size === 0 ) {
283- map . update ( 'any' , anyGetters => anyGetters . remove ( getterId ) )
264+ if ( storeDeps . size === 0 ) {
265+ // no storeDeps means the observer is dependent on any of the state changing
266+ map . update ( 'any' , getters => getters . remove ( getter ) ) ;
284267 } else {
285268 storeDeps . forEach ( storeId => {
286- map . updateIn ( [ 'stores' , storeId ] , getters => getters . remove ( getterId ) )
269+ map . updateIn ( [ 'stores' , storeId ]
270+ , getters => getters . remove ( getter ) )
287271 } )
288272 }
289273
290- map . removeIn ( [ 'observersMap' , id ] )
291- } catch ( e ) {
292- debugger ;
293274 }
294275
276+ map . removeIn ( [ 'observersMap' , id ] )
277+
295278 } )
296279}
297280
0 commit comments