respond-framework
Version:
create as fast you think
50 lines (46 loc) • 1.64 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = void 0;
var _reserved = require("./reserved.js");
var _token = require("./reducers/token.js");
var _userId = require("./reducers/userId.js");
var _stack = require("./reducers/stack.js");
const createReducers = ({
respond,
proto,
state,
parent,
moduleName
}, reducers, propReducers) => {
if (respond.isTop) reducers = {
token: _token.default,
userId: _userId.default,
stack: _stack.default,
...reducers
};else reducers = {
stack: _stack.default,
...reducers
};
proto.reducers = reducers;
const parentReducers = parent.reducers ?? {};
const parentKeys = Object.keys(parentReducers);
Object.keys(propReducers).forEach(k => {
const reducer = propReducers[k];
const parentK = parentKeys.find(k => parentReducers[k] === reducer);
const k2 = parentK ?? moduleName + '_' + k; // optimization: reuse existing reducer state if available
parentReducers[k2] = reducer; // if parent reducer doesn't exist, assign new reducer to parent
const get = function () {
return this[_reserved._parent][k2];
}; // the magic: simply select parent state (using reactive _parent symbol)
Object.defineProperty(proto, k, {
get,
configurable: true
});
if (reducers[k]) respond.overriden.set(reducers[k], true); // disable possible child reducer mock, so reduce prop's selector takes precedence
if (state.hasOwnProperty(k)) delete state[k]; // delete possible initialState
respond.dependsOnParent = true;
});
};
var _default = exports.default = createReducers;