bdn-pocket
Version:
pocket tools for managing redux and redux-saga
146 lines (118 loc) • 3.71 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
var _merge = require('ramda/src/merge');
var _merge2 = _interopRequireDefault(_merge);
var _union = require('ramda/src/union');
var _union2 = _interopRequireDefault(_union);
var _omit = require('ramda/src/omit');
var _omit2 = _interopRequireDefault(_omit);
var _propOr = require('ramda/src/propOr');
var _propOr2 = _interopRequireDefault(_propOr);
var _action = require('../action');
var _action2 = _interopRequireDefault(_action);
var _def_state = require('./def_state');
var _def_state2 = _interopRequireDefault(_def_state);
var _messenger = require('./messenger');
var _messenger2 = _interopRequireDefault(_messenger);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
var REQ_MSG_REDUCERS = {
request: function request(state) {
return (0, _merge2.default)(state, {
isFetching: true,
ready: false
});
},
success: function success(state, _ref) {
var payload = _ref.payload;
var result = payload.result,
replace = payload.replace;
var xtra = (0, _omit2.default)(['result', 'entities', 'replace'], payload);
var isArray = Array.isArray(state.result) && Array.isArray(result);
var mergeResult = !replace && isArray ? (0, _union2.default)(state.result, result) : result;
return (0, _merge2.default)(state, {
isFetching: false,
ready: true,
error: false,
result: mergeResult,
pageCount: (state.pageCount || 0) + 1,
xtra: xtra
});
},
error: function error(state) {
return (0, _merge2.default)(state, {
isFetching: false,
ready: false,
error: true
});
},
reset: function reset() {
return this.defaultState;
},
ready: function ready(state) {
return (0, _merge2.default)(state, {
isFetching: false,
ready: true,
error: false
});
}
};
var MakeReqMessenger = _def_state2.default.defaultState({
isFetching: false,
ready: false,
error: false,
pageCount: 0,
result: []
}).props({
Action: _action2.default
}).deepProps({
reqReducers: REQ_MSG_REDUCERS,
reqActions: {}
}).statics({
Messenger: _messenger2.default,
mergeReducers: function mergeReducers(reqReducers) {
return this.deepProps({
reqReducers: reqReducers
});
},
mergeActions: function mergeActions(reqActions) {
return this.deepProps({
reqActions: reqActions
});
},
add: function add(_ref2) {
var key = _ref2.key,
action = _ref2.action,
reducer = _ref2.reducer;
return this.statics({
Messenger: this.Messenger.add({ key: key, action: action, reducer: reducer })
});
},
setup: function setup(name) {
var Messenger = this.compose.staticProperties.Messenger;
var _compose$deepProperti = this.compose.deepProperties,
reqReducers = _compose$deepProperti.reqReducers,
reqActions = _compose$deepProperti.reqActions,
defaultState = _compose$deepProperti.defaultState;
var Action = this.compose.properties.Action;
var ReqMessenger = Messenger.defaultState(defaultState);
Object.keys(reqReducers).forEach(function (key) {
var ActionKey = (0, _propOr2.default)(Action, key, reqActions);
ReqMessenger = ReqMessenger.add({
key: key,
action: ActionKey.def(name + '/' + key),
reducer: reqReducers[key]
});
});
return ReqMessenger;
}
}).init(function (_ref3, _ref4) {
var name = _ref3.name,
schema = _ref3.schema;
var stamp = _ref4.stamp;
var msgr = stamp.setup(name).create();
msgr.schema = schema;
return msgr;
});
exports.default = MakeReqMessenger;