All files reactivateState.js

100% Statements 14/14
100% Branches 13/13
100% Functions 5/5
100% Lines 13/13
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24        5x 5x 9x 10x 10x 10x 10x 1x   9x 8x 7x     9x     5x    
import isEmpty from 'lodash/fp/isEmpty';
import isEqual from 'lodash/fp/isEqual';
 
export default (store, ...mappers) => {
  const selectorMappers = Array.isArray(mappers[0]) ? mappers[0] : mappers;
  const onReducerInvoke = sMappers => () => {
    sMappers.forEach((sMapper) => {
      const preResult = sMapper.getPreResult();
      const nonPreResult = !preResult || isEmpty(preResult);
      const curResult = sMapper.selector(store.getState());
      if (nonPreResult && (!curResult || isEmpty(curResult))) {
        return;
      }
      if (nonPreResult || !isEqual(preResult, curResult)) {
        sMapper.handlers.forEach((handler) => {
          handler.call(null, preResult, curResult);
        });
      }
      sMapper.updateResult(curResult);
    });
  };
  store.subscribe(onReducerInvoke(selectorMappers));
};