redux-tiles
Version:
Library to create and easily compose redux pieces together in less verbose manner
135 lines • 4.91 kB
JavaScript
;
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