UNPKG

redux-tiles

Version:

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

73 lines 3.31 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var lodash_1 = require("lodash"); var helpers_1 = require("../helpers"); exports.DEFAULT_REDUCER = ''; function changeDefaultReducer(newReducer) { exports.DEFAULT_REDUCER = newReducer; } exports.changeDefaultReducer = changeDefaultReducer; function checkValue(result, defaultValue) { return result === undefined || result === null ? defaultValue : result; } /** * @overview Deep lookup inside state * @param {Object} state – current redux state object * @param {Any} params – argument with which action was dispatched * @param {Function} nesting – function to create nested data inside store * @param {String} tileName – string to access module data * @return {Object} – stored data */ function lookup(_a) { var state = _a.state, params = _a.params, nesting = _a.nesting, tileName = _a.tileName, selectorFallback = _a.selectorFallback; var path = []; var topReducer = exports.DEFAULT_REDUCER; if (nesting) { path = nesting(params); } var nestedNames = helpers_1.ensureArray(tileName); var topReducerArray = Boolean(topReducer) ? [topReducer] : []; return checkValue(lodash_1.get(state, topReducerArray.concat(nestedNames, path)), selectorFallback); } /** * @overview check passed arguments to the Selector function. * The single purpose is for readability, to throw sane error * @param {Object} state – redux state * @param {Any} params – argument with which action was dispatched * @param {String} tileName – string to access module data * @param {Function} fn – function to invoke if check was passed * @return {Any} – result of function invokation */ function checkArguments(_a) { var state = _a.state, params = _a.params, tileName = _a.tileName, fn = _a.fn; if (!state) { throw new Error("\n Error in Redux-Tiles Selector \u2013 you have to provide\n state as a first argument!. Error in \"" + helpers_1.createType({ type: tileName }) + "\" tile."); } return fn(state, params); } /** * @overview function to create selectors for modules * @param {String} tileName – string to access module data * @param {Function} nesting – function to create nested data inside store * @return {Object} – object with selectors for all and specific data */ function createSelectors(_a) { var tileName = _a.tileName, nesting = _a.nesting, selectorFallback = _a.selectorFallback; var getAll = function (state) { var topReducerArray = Boolean(exports.DEFAULT_REDUCER) ? [exports.DEFAULT_REDUCER] : []; return checkValue(lodash_1.get(state, topReducerArray.concat(helpers_1.ensureArray(tileName)))); }; var getSpecific = function (state, params) { return lookup({ state: state, params: params, nesting: nesting, tileName: tileName, selectorFallback: selectorFallback }); }; return { getAll: function (state) { return checkArguments({ state: state, tileName: tileName, fn: getAll }); }, get: function (state, params) { return checkArguments({ state: state, params: params, tileName: tileName, fn: getSpecific }); } }; } exports.createSelectors = createSelectors; //# sourceMappingURL=selectors.js.map