UNPKG

redux-modular

Version:
111 lines (84 loc) 3.29 kB
(function (global, factory) { typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('lodash.get')) : typeof define === 'function' && define.amd ? define(['exports', 'lodash.get'], factory) : (factory((global.reduxModular = {}),global.get)); }(this, (function (exports,get) { 'use strict'; get = get && get.hasOwnProperty('default') ? get['default'] : get; function createAction(type, payloadCreator) { if (!payloadCreator) { payloadCreator = function payloadCreator() { return null; }; } var actionCreator = function actionCreator() { var payload = payloadCreator.apply(undefined, arguments); var action = { type: type, payload: payload }; if (payload instanceof Error) { action.error = true; } return action; }; actionCreator.toString = function () { return type; }; return actionCreator; } var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } var isArray = function isArray(value) { return (typeof value === 'undefined' ? 'undefined' : _typeof(value)) === 'object' && value !== null && value.constructor === Array; }; var isString = function isString(value) { return typeof value === 'string'; }; function globalizeActions(pathToState, actions) { if (isArray(pathToState)) { pathToState = pathToState.join('.'); } else if (pathToState !== null && !isString(pathToState)) { throw new Error('path must be a string or array'); } return Object.keys(actions).reduce(function (prev, key) { var type = pathToState ? key + ' (' + pathToState + ')' : key; return Object.assign({}, prev, _defineProperty({}, key, createAction(type, actions[key]))); }, {}); } var mount = function (pathToState, logic) { if (!logic) { throw new Error('logic must be passed to mount'); } var actions = logic.actions, reducer = logic.reducer, selectors = logic.selectors; if (actions) { actions = globalizeActions(pathToState, actions); } if (actions && reducer) { reducer = reducer(actions); } if (selectors) { var localStateSelector = pathToState ? function (state) { return get(state, pathToState); } : function (state) { return state; }; selectors = selectors(localStateSelector); } return { actions: actions, reducer: reducer, selectors: selectors }; }; function createReducer(initialState, reducersByAction) { return function () { var state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : initialState; var action = arguments[1]; var reducer = reducersByAction[action.type]; return reducer ? reducer(state, action.payload) : state; }; } exports.mount = mount; exports.createReducer = createReducer; exports.createAction = createAction; Object.defineProperty(exports, '__esModule', { value: true }); })));