UNPKG

react-entities

Version:

React Entities - the simplest app state management for React

72 lines (56 loc) 2.57 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); exports.__esModule = true; exports["default"] = exports.createEntity = exports.bindActions = exports.createSetState = void 0; var _objectWithoutPropertiesLoose2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutPropertiesLoose")); var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends")); var createSetState = function createSetState(entity, beforeSetState) { return function (updates) { for (var _len = arguments.length, updaterArgs = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) { updaterArgs[_key - 1] = arguments[_key]; } if (typeof updates === 'function') updates = updates.apply(void 0, [entity.state].concat(updaterArgs)); if (typeof beforeSetState === 'function') beforeSetState(entity.state, updates); entity.state = (0, _extends2["default"])({}, entity.state, {}, updates); for (var i = 0; i < entity.subscribers.length; i++) { if (typeof entity.subscribers[i] === 'function') entity.subscribers[i](entity.state); } // Cleanup any nullified subscribers due to possible // component unmounts caused by this app state change entity.subscribers = entity.subscribers.filter(function (item) { return typeof item === 'function'; }); }; }; exports.createSetState = createSetState; var bindActions = function bindActions(actions, entity, deps) { var entityActions = {}; for (var key in actions) { if (typeof actions[key] === 'function') { var action = actions[key](entity, deps); if (typeof action !== 'function') throw new Error('Action must be defined using higher-order function.'); entityActions[key] = action; } } return entityActions; }; exports.bindActions = bindActions; var createEntity = function createEntity(_ref, deps) { var initialState = _ref.initialState, _ref$options = _ref.options, options = _ref$options === void 0 ? {} : _ref$options, actions = (0, _objectWithoutPropertiesLoose2["default"])(_ref, ["initialState", "options"]); var entity = { state: initialState || {}, initialState: initialState, subscribers: [], reset: function reset() { entity.state = initialState; } }; entity.setState = createSetState(entity, options.beforeSetState); entity.actions = bindActions(actions, entity, deps); return entity; }; exports.createEntity = createEntity; var _default = createEntity; exports["default"] = _default;