UNPKG

bdn-pocket

Version:

pocket tools for managing redux and redux-saga

47 lines (35 loc) 1.37 kB
'use strict'; exports.__esModule = true; var _it = require('@stamp/it'); var _it2 = _interopRequireDefault(_it); var _selector_def = require('./selector_def'); var _selector_def2 = _interopRequireDefault(_selector_def); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } var SliceSelector = (0, _it2.default)(_selector_def2.default).init(function (_ref, _ref2) { var reducer = _ref.reducer; var stamp = _ref2.stamp, instance = _ref2.instance; var PropTypes = stamp.compose.staticProperties.PropTypes; var getSubState = instance.getSubState; var isSubStateCacheValid = (0, _selector_def.makeIsCacheValid)(function (r, l) { return r === l; }); var lastPartialReducer = void 0; /** * propsReducer generate a partial reducer function * that is memoized (lastPartialReducer) * if props is sent, propsReducer execute the partial reducer * else it return the partial reducer */ return function propsReducer(state, props) { var subStates = getSubState(state); if (!isSubStateCacheValid(subStates)) { lastPartialReducer = function lastPartialReducer(props) { PropTypes(props); return reducer(subStates, props); }; } return arguments.length > 1 ? lastPartialReducer(props) : lastPartialReducer; }; }); exports.default = SliceSelector;