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
JavaScript
;
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;