UNPKG

redux-code

Version:

Redux helpers for actions and reducers

46 lines (45 loc) 1.75 kB
"use strict"; /* eslint-disable @typescript-eslint/ban-ts-comment */ // @ts-nocheck Object.defineProperty(exports, "__esModule", { value: true }); exports.buildStructuredReducer = exports.createBaseReducer = exports.createReducer = void 0; const immer_1 = require("immer"); const redux_1 = require("redux"); /** * * A helper to create reducer (uses immer) * @param initial The initial state */ const createReducer = function (initial, ...mixins) { const reducer = (0, exports.createBaseReducer)(initial, ...mixins); return function (state = initial, action) { if ((0, immer_1.isDraft)(state) || !(0, immer_1.isDraftable)(state)) return reducer(state, action); return (0, immer_1.default)(state, (draft) => reducer(draft, action)); }; }; exports.createReducer = createReducer; /** * * A helper to create reducer (without immer) * @param initial The initial state */ const createBaseReducer = function (initial, ...mixins) { const reducers = Object.assign({}, ...mixins); return function (state = initial, action) { const producer = reducers[action.type]; if (producer) state = producer(state, action); return state; }; }; exports.createBaseReducer = createBaseReducer; const isPlainObject = (v) => !!v && typeof v === 'object' && (v.__proto__ === null || v.__proto__ === Object.prototype); const buildStructuredReducer = function (reducer) { if (isPlainObject(reducer)) { const combined = Object.fromEntries(Object.entries(reducer).map(([key, value]) => [key, (0, exports.buildStructuredReducer)(value)])); return (0, redux_1.combineReducers)(combined); } return reducer; }; exports.buildStructuredReducer = buildStructuredReducer;