action-store
Version:
Action store a la redux
98 lines (71 loc) • 2.61 kB
JavaScript
;
/**
* Module dependencies.
*/
Object.defineProperty(exports, "__esModule", {
value: true
});
var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };
var _constants = require('./constants');
var _context = require('./context');
var _context2 = _interopRequireDefault(_context);
var _lodash = require('lodash');
var _freeze = require('./freeze');
var _freeze2 = _interopRequireDefault(_freeze);
var _vo = require('vo');
var _vo2 = _interopRequireDefault(_vo);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
/**
* Module constants.
*/
var isArray = Array.isArray;
/**
* Resolve promises, arrays, objects, etc.
*/
exports.default = function (options) {
return function (store) {
var getContext = (0, _context2.default)(_extends({}, options, { store: store }));
var getState = function getState() {
return store.getState();
};
return function (next) {
return function (args) {
args = isArray(args) ? args : [args];
function apply(action, fn) {
var version = action.version;
var payload = action.payload;
var id = action.id = action.id || payload.id;
var context = getContext(id);
var save = function save() {
return context.save(action).then(function (action) {
var oldState = context.state;
next(action);
fn(null, context.state);
var newState = context.state;
return (0, _lodash.isEqual)(oldState, newState) ? action : context.publish(action);
});
};
if (_constants.EMPTY === context.status) {
return context.load(save);
}
if (_constants.LOADING === context.status) {
return context.enqueue(save);
}
if ('undefined' !== typeof version) {
next(action);
return fn(null, context.state);
}
return save();
}
var actions = args.map(function (action) {
return isArray(action) ? action.map(function (a) {
return (0, _vo2.default)(a, apply);
}) : (0, _vo2.default)(action, apply);
});
return _vo2.default.stack.apply(actions)((0, _freeze2.default)(getState())).then(function () {
return getState();
});
};
};
};
};