bdn-pocket
Version:
pocket tools for managing redux and redux-saga
47 lines (35 loc) • 1.37 kB
JavaScript
;
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;