Skip to content
Prev Previous commit
Next Next commit
remove the testing bit.
  • Loading branch information
lyonlai committed Nov 1, 2015
commit fe88c19d36268132c6cf3fe2c3744d461db8a970
85 changes: 40 additions & 45 deletions src/reactor/fns.js
Original file line number Diff line number Diff line change
Expand Up @@ -156,59 +156,54 @@ exports.loadState = function(reactorState, state) {
*/
exports.addObserver = function(observerState, getter, handler) {
// use the passed in getter as the key so we can rely on a byreference call for unobserve
try {
const getterKey = getter
if (isKeyPath(getter)) {
getter = fromKeyPath(getter)
}

const currId = observerState.get('nextId')
const storeDeps = getStoreDeps(getter)
const entry = Immutable.Map({
id: currId,
storeDeps: storeDeps,
getterKey: getterKey,
getter: getter,
handler: handler,
})
const getterKey = getter
if (isKeyPath(getter)) {
getter = fromKeyPath(getter)
}

let updatedObserverState = observerState.updateIn(['gettersMap', getter]
, observerIds =>
observerIds
? observerIds.add(currId)
: Immutable.Set([]).add(currId)
)
const currId = observerState.get('nextId')
const storeDeps = getStoreDeps(getter)
const entry = Immutable.Map({
id: currId,
storeDeps: storeDeps,
getterKey: getterKey,
getter: getter,
handler: handler,
})

if (storeDeps.size === 0) {
// no storeDeps means the observer is dependent on any of the state changing
let updatedObserverState = observerState.updateIn(['gettersMap', getter]
, observerIds =>
observerIds
? observerIds.add(currId)
: Immutable.Set([]).add(currId)
)

updatedObserverState = updatedObserverState.updateIn(['any'], getters => getters.add(getter))
} else {
updatedObserverState = updatedObserverState.withMutations(map => {
storeDeps.forEach(storeId => {
map.updateIn(['stores', storeId]
, getters =>
getters
? getters.add(getter)
: Immutable.Set([]).add(getter)
)
})
if (storeDeps.size === 0) {
// no storeDeps means the observer is dependent on any of the state changing

updatedObserverState = updatedObserverState.updateIn(['any'], getters => getters.add(getter))
} else {
updatedObserverState = updatedObserverState.withMutations(map => {
storeDeps.forEach(storeId => {
map.updateIn(['stores', storeId]
, getters =>
getters
? getters.add(getter)
: Immutable.Set([]).add(getter)
)
})
}
})
}

updatedObserverState = updatedObserverState
.set('nextId', currId + 1)
.setIn(['observersMap', currId], entry)
updatedObserverState = updatedObserverState
.set('nextId', currId + 1)
.setIn(['observersMap', currId], entry)

return {
observerState: updatedObserverState,
entry: entry,
}
} catch (e) {
debugger;
return {
observerState: updatedObserverState,
entry: entry,
}


}

/**
Expand Down