bdn-pocket
Version:
pocket tools for managing redux and redux-saga
99 lines (73 loc) • 2.47 kB
JavaScript
;
exports.__esModule = true;
var _isNil = require('ramda/src/isNil');
var _isNil2 = _interopRequireDefault(_isNil);
var _propEq = require('ramda/src/propEq');
var _propEq2 = _interopRequireDefault(_propEq);
var _find = require('ramda/src/find');
var _find2 = _interopRequireDefault(_find);
var _is = require('@stamp/is');
var _is2 = _interopRequireDefault(_is);
var _def_state = require('./def_state');
var _def_state2 = _interopRequireDefault(_def_state);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
var UNALLOWED_KEYS = ['reducers', 'defaultState', 'merge'];
var Messenger = _def_state2.default.deepConf({
Messages: []
}).statics({
merge: function merge(Messenger) {
var Messages = Messenger.compose.deepConfiguration.Messages;
var M = this;
Messages.forEach(function (_ref) {
var key = _ref.key,
action = _ref.action,
reducer = _ref.reducer;
M = M.add({
key: key,
action: action,
reducer: reducer
});
});
return M;
},
add: function add(_ref2) {
var key = _ref2.key,
action = _ref2.action,
reducer = _ref2.reducer;
var Messages = this.compose.deepConfiguration.Messages;
if ((0, _isNil2.default)(key)) {
throw new Error('key must be defined');
}
if (_is2.default.isString(key) === false) {
throw new Error('key must be a string');
}
if (UNALLOWED_KEYS.indexOf(key) >= 0) {
throw new Error(UNALLOWED_KEYS.join(', ') + ' are reserved keys');
}
if ((0, _find2.default)((0, _propEq2.default)('key', key), Messages)) {
throw new Error(key + ' already present in messenger');
}
if (!action.CONST) {
throw new Error('action must have CONST prop');
}
if (_is2.default.isFunction(reducer) === false) {
throw new Error('reducer must be a function');
}
return this.deepConf({
Messages: [{ key: key, reducer: reducer, action: action }]
});
}
}).init(function (o, _ref3) {
var stamp = _ref3.stamp,
instance = _ref3.instance;
var Messages = stamp.compose.deepConfiguration.Messages;
instance.reducers = {};
Messages.forEach(function (_ref4) {
var key = _ref4.key,
action = _ref4.action,
reducer = _ref4.reducer;
instance[key] = action;
instance.reducers[action.CONST] = reducer.bind(instance);
});
});
exports.default = Messenger;