react-entities
Version:
React Entities - the simplest app state management for React
72 lines (56 loc) • 2.57 kB
JavaScript
;
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;