UNPKG

ducks

Version:

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

54 lines 2.23 kB
/** * 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. * */ import { combineReducers, } from '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 = 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; } export { insertReducers, }; //# sourceMappingURL=insert-reducers.js.map