UNPKG

rtk-slice-manager

Version:

Wrap over slice from @reduxjs/toolkit for automatic generation of actions and isolation of effect logic after changing the state of the fields

43 lines (42 loc) 1.56 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.createSliceManager = void 0; const toolkit_1 = require("@reduxjs/toolkit"); const utils_1 = require("./utils"); function createSliceManager({ initialState, name, watchers = [], reducers, extraReducers }) { const baseReducers = (0, utils_1.generateReducers)(initialState); const reducersResult = Object.assign(Object.assign({}, baseReducers), reducers); const slice = (0, toolkit_1.createSlice)({ name, initialState: initialState, reducers: reducersResult, extraReducers, }); const actions = slice.actions; const updateSubscriptions = () => (dispatch, getState) => { const state = getState()[name]; watchers.forEach(e => e.isSubscriber ? dispatch(e.handler(state)) : void 0); }; const middleware = ({ dispatch, getState }) => (next) => (action) => { next(action); const { fieldName, managerName } = (0, utils_1.getMetaByAction)(action); if (managerName !== name) { return; } const params = getState()[name]; for (const watcher of watchers) { const fields = (0, utils_1.getCapitalizeFields)(watcher.fields); if (fields.includes(fieldName)) { return watcher.handler(params)(dispatch, getState, undefined); } } }; return { actions, name, middleware, updateSubscriptions, slice, }; } exports.createSliceManager = createSliceManager;