UNPKG

@rtbjs/use-state

Version:

`@rtbjs/use-state` is a state management tool that can act as a local state and be easily turned into a global redux state. It is an innovative approach to state management that combines the advantages of both React's useState and Redux's state management

62 lines 2.78 kB
"use strict"; exports.__esModule = true; exports.monitorReducerEnhancer = exports.Provider = exports.useStateTB = void 0; var tslib_1 = require("tslib"); var react_1 = require("react"); var react_redux_1 = require("react-redux"); exports.Provider = react_redux_1.Provider; var uuid_1 = require("uuid"); function useStateTB(props) { var name = props.name, logs = props.logs, forceInitialValue = props.forceInitialValue; var initialValue = Object.keys(props).includes('initialValue') ? props.initialValue : null; var showInLogs = logs || !!name; var _a = (0, react_1.useState)(initialValue), rValue = _a[0], setRValue = _a[1]; var key = (0, react_1.useRef)(name || 'n_' + (0, uuid_1.v4)().replaceAll('-', '')); var dispatch = (0, react_redux_1.useDispatch)(); var valueInState = (0, react_redux_1.useSelector)(function (state) { return state === null || state === void 0 ? void 0 : state[key.current]; }); var value = showInLogs ? valueInState : rValue; var setValue = function (v) { showInLogs ? dispatch({ type: 'TOOL_BOX_USE_STATE', payload: { value: v, key: key.current } }) : setRValue(v); }; var setInitialValue = function (v) { showInLogs ? dispatch({ type: 'TOOL_BOX_USE_STATE_INITIAL_VALUE', payload: { value: v, key: key.current, force: forceInitialValue } }) : setRValue(v); }; (0, react_1.useEffect)(function () { if (Object.keys(props).includes('initialValue')) setInitialValue(initialValue); }, []); return [value, setValue]; } exports.useStateTB = useStateTB; var monitorReducerEnhancer = function (createStore) { return function (_reducer, initialState, enhancer) { var monitoredReducer = function (state, action) { var _a, _b; switch (action.type) { case 'TOOL_BOX_USE_STATE': return tslib_1.__assign(tslib_1.__assign({}, state), (_a = {}, _a[action.payload.key] = action.payload.value, _a)); case 'TOOL_BOX_USE_STATE_INITIAL_VALUE': console.log({ action: action }); console.log({ state: state }); return tslib_1.__assign(tslib_1.__assign({}, state), (_b = {}, _b[action.payload.key] = action.payload.force || !(state === null || state === void 0 ? void 0 : state[action.payload.key]) ? action.payload.value : state[action.payload.key], _b)); default: return state; } }; return createStore(monitoredReducer, initialState, enhancer); }; }; exports.monitorReducerEnhancer = monitorReducerEnhancer; //# sourceMappingURL=test.js.map