UNPKG

redux-tiles

Version:

Library to create and easily compose redux pieces together in less verbose manner

135 lines 4.91 kB
"use strict"; var __assign = (this && this.__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; }; Object.defineProperty(exports, "__esModule", { value: true }); var helpers_1 = require("../helpers"); var actions_1 = require("./actions"); var reducer_1 = require("./reducer"); var selectors_1 = require("./selectors"); var prefix = "Redux_Tiles_"; function createTile(params) { var type = params.type, fn = params.fn, caching = params.caching, nesting = params.nesting, _a = params.selectorFallback, selectorFallback = _a === void 0 ? null : _a; // initial state is equal to empty object, because of possible nesting // basically every object should contain default properties, so we handle // this situation using selectors var initialState = nesting ? {} : null; var identificator = helpers_1.createType({ type: type }); var types = { START: "" + prefix + identificator + "_START", SUCCESS: "" + prefix + identificator + "_SUCCESS", FAILURE: "" + prefix + identificator + "_FAILURE", RESET: "" + prefix + identificator + "_RESET" }; var selectorParams = { selectorFallback: { isPending: false, error: null, data: selectorFallback, fetched: false }, tileName: type, nesting: nesting }; var selectors = selectors_1.createSelectors(selectorParams); var actionParams = { START: types.START, SUCCESS: types.SUCCESS, FAILURE: types.FAILURE, fn: fn, type: type, caching: caching, nesting: nesting, selectors: selectors }; var action = actions_1.asyncAction(actionParams); action.reset = actions_1.createResetAction({ type: types.RESET }); var reducerObject = (_b = {}, _b[types.START] = { data: null, isPending: true, error: null, fetched: false }, _b[types.FAILURE] = function (_storeState, storeAction) { return ({ data: null, isPending: false, error: storeAction.error, fetched: true }); }, _b[types.SUCCESS] = function (_storeState, storeAction) { return ({ error: null, isPending: false, data: storeAction.payload && storeAction.payload.data, fetched: true }); }, _b[types.RESET] = initialState, _b); var reducer = reducer_1.createReducer(initialState, reducerObject); return { action: action, reducer: reducer, selectors: selectors, tileName: type, constants: types, reflect: params }; var _b; } exports.createTile = createTile; function createSyncTile(params) { var type = params.type, nesting = params.nesting, _a = params.fn, fn = _a === void 0 ? function (fnParams) { return fnParams.params; } : _a, fns = params.fns, // we have default state as an object because of the possible nesting _b = params.initialState, // we have default state as an object because of the possible nesting initialState = _b === void 0 ? nesting ? {} : null : _b, selectorFallback = params.selectorFallback; var identificator = helpers_1.createType({ type: type }); var types = { SET: "" + prefix + identificator + "_SET", RESET: "" + prefix + identificator + "_RESET" }; var selectorParams = { selectorFallback: selectorFallback, tileName: type, nesting: nesting }; var selectors = selectors_1.createSelectors(selectorParams); var actionParams = { SET: types.SET, nesting: nesting, fn: fn, selector: selectors.get }; var action = actions_1.syncAction(actionParams); action.reset = actions_1.createResetAction({ type: types.RESET }); if (fns) { Object.keys(fns).forEach(function (methodName) { var method = fns[methodName]; var customActionParams = __assign({}, actionParams, { fn: method }); action[methodName] = actions_1.syncAction(customActionParams); }); } var reducerObject = (_c = {}, _c[types.SET] = function (_storeState, storeAction) { return storeAction.payload && storeAction.payload.data; }, _c[types.RESET] = initialState, _c); var reducer = reducer_1.createReducer(initialState, reducerObject); return { action: action, selectors: selectors, reducer: reducer, tileName: type, constants: types, reflect: params }; var _c; } exports.createSyncTile = createSyncTile; //# sourceMappingURL=index.js.map