UNPKG

ducks

Version:

🦆🦆🦆 Ducks is a Reducer Bundles Manager that Implementing the Redux Ducks Modular Proposal with Great Convenience.

57 lines 2.36 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.insertReducers = void 0; /** * Ducks - https://github.com/huan/ducks * * @copyright 2020 Huan LI (李卓桓) <https://github.com/huan> * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * */ const redux_1 = require("redux"); /** * We have to do some tricky with insertReducer. * because the Redux reduce system will check matching for the the keys of the state and reducers. */ function insertReducers(originReducer, insertReducers) { const insertReducer = (0, redux_1.combineReducers)(insertReducers); const newReducer = (state, action) => { const prevOriginalState = {}; // ReturnType<typeof reducer> const prevInsertedState = {}; // StateFromReducersMapObject<typeof insertReducers> if (state) { Object.keys(state).forEach(key => { if (key in insertReducers) { prevInsertedState[key] = state[key]; } else { prevOriginalState[key] = state[key]; } }); } const nextOriginalState = originReducer(prevOriginalState, action); // console.info('nextOriginalState === prevOriginalState', nextOriginalState === prevOriginalState) const nextInsertedState = insertReducer(prevInsertedState, action); // console.info('nextInsertedState === prevInsertedState', nextInsertedState === prevInsertedState) if (nextOriginalState === prevOriginalState && nextInsertedState === prevInsertedState) { return state; } return { ...nextOriginalState, ...nextInsertedState, }; }; return newReducer; } exports.insertReducers = insertReducers; //# sourceMappingURL=insert-reducers.js.map