UNPKG

redux-store-helper

Version:

Provides the ability to create typed redux domain-based stores in a simple manner.

68 lines (67 loc) 2.56 kB
"use strict"; var __assign = (this && this.__assign) || function () { __assign = Object.assign || function(t) { for (var s, i = 1, n = arguments.length; i < n; i++) { s = arguments[i]; for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p]; } return t; }; return __assign.apply(this, arguments); }; Object.defineProperty(exports, "__esModule", { value: true }); exports.getStoreHelper = exports.setGlobalStore = void 0; var globalStore; function setGlobalStore(store) { globalStore = store; } exports.setGlobalStore = setGlobalStore; var createReducer = function (actionPrefix) { return function (state, action) { var resultState = __assign({}, (state || {})); if (action && action.type.indexOf(actionPrefix) === 0) { var _a = action.payload, moduleName = _a.moduleName, moduleState = _a.moduleState; resultState[moduleName] = __assign({}, moduleState); } return resultState; }; }; var Store = /** @class */ (function () { function Store(_a) { var name = _a.name, initialState = _a.initialState, reducerName = _a.reducerName, actionPrefix = _a.actionPrefix; this._moduleName = name; this._initialState = initialState; this._reducerName = reducerName; this._actionPrefix = actionPrefix; } Store.prototype.setState = function (state) { globalStore.dispatch({ type: this._actionPrefix + "_" + this._moduleName, payload: { moduleName: this._moduleName, moduleState: __assign(__assign({}, this.state), state), }, }); }; Object.defineProperty(Store.prototype, "state", { get: function () { var _a; var currentState = ((_a = globalStore.getState()[this._reducerName]) === null || _a === void 0 ? void 0 : _a[this._moduleName]) || {}; return __assign(__assign({}, this._initialState), currentState); }, enumerable: false, configurable: true }); return Store; }()); var getStoreHelper = function (_a) { var actionPrefix = _a.actionPrefix, reducerName = _a.reducerName; return ({ createStore: function (name, initialState) { return new Store({ name: name, initialState: initialState, reducerName: reducerName, actionPrefix: actionPrefix }); }, storeHelperReducer: createReducer(actionPrefix), }); }; exports.getStoreHelper = getStoreHelper;