redux-modular
Version:
Modular Redux helpers
111 lines (84 loc) • 3.29 kB
JavaScript
(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 });
})));