UNPKG

respond-framework

Version:
50 lines (46 loc) 1.64 kB
"use strict"; 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;