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

64 lines (63 loc) 2.52 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.getMetaByAction = exports.generateReducers = exports.getHandlerNames = exports.getCapitalizeFields = exports.getDeepKeys = exports.decapitalize = exports.capitalize = void 0; const set_1 = __importDefault(require("lodash/set")); const capitalize = (str) => str.charAt(0).toUpperCase() + str.substring(1); exports.capitalize = capitalize; const decapitalize = (str) => (str.charAt(0).toLowerCase() + str.substring(1)); exports.decapitalize = decapitalize; function getDeepKeys(obj) { let keys = []; for (const key in obj) { keys.push(key); if (typeof obj[key] === "object") { const subkeys = getDeepKeys(obj[key]); keys = keys.concat(subkeys.map(function (subkey) { return `${key}.${subkey}`; })); } } return keys; } exports.getDeepKeys = getDeepKeys; function getKeysByArr(keys, callback) { return keys.map(e => callback(e.split('.'))); } function capitalizeAllKeys(keys, includeFirst = true) { return keys .map((key, i) => { const firstKeyCheck = includeFirst ? (0, exports.capitalize)(key) : key; return i > 0 ? (0, exports.capitalize)(key) : firstKeyCheck; }) .join(''); } const getCapitalizeFields = (fields) => getKeysByArr(fields, (keyByArr) => capitalizeAllKeys(keyByArr, false)); exports.getCapitalizeFields = getCapitalizeFields; function getHandlerNames(keys) { return getKeysByArr(keys, (keyByArr) => ({ handlerName: `change${capitalizeAllKeys(keyByArr)}`, key: keyByArr, })); } exports.getHandlerNames = getHandlerNames; function generateReducers(initialState) { const keys = getDeepKeys(initialState); const handlerNames = getHandlerNames(keys); return handlerNames.reduce((acc, { handlerName, key }) => { acc[handlerName] = (state, action) => { (0, set_1.default)(state, key, action.payload); }; return acc; }, {}); } exports.generateReducers = generateReducers; function getMetaByAction(action) { const actionByArr = action.type.split(`/`); const field = (actionByArr[1] || '').split("change")[1] || ''; const fieldName = (0, exports.decapitalize)(field); return { fieldName, managerName: actionByArr[0] }; } exports.getMetaByAction = getMetaByAction;