@coorpacademy/progression-engine
Version:
99 lines (98 loc) • 3.5 kB
JavaScript
"use strict";
exports.__esModule = true;
exports.default = updateState;
var _isEmpty2 = _interopRequireDefault(require("lodash/fp/isEmpty"));
var _reduce2 = _interopRequireDefault(require("lodash/fp/reduce"));
var _pipe2 = _interopRequireDefault(require("lodash/fp/pipe"));
var _map2 = _interopRequireDefault(require("lodash/fp/map"));
var _update2 = _interopRequireDefault(require("lodash/fp/update"));
var _allAnswers = _interopRequireDefault(require("./reducers/all-answers"));
var _content = _interopRequireDefault(require("./reducers/content"));
var _pendingSlides = _interopRequireDefault(require("./reducers/pending-slides"));
var _hasViewedAResourceAtThisStep = _interopRequireDefault(require("./reducers/has-viewed-a-resource-at-this-step"));
var _isCorrect = _interopRequireDefault(require("./reducers/is-correct"));
var _lives = _interopRequireDefault(require("./reducers/lives"));
var _livesDisabled = _interopRequireDefault(require("./reducers/lives-disabled"));
var _nextContent = _interopRequireDefault(require("./reducers/next-content"));
var _remainingLifeRequests = _interopRequireDefault(require("./reducers/remaining-life-requests"));
var _requestedClues = _interopRequireDefault(require("./reducers/requested-clues"));
var _slides = _interopRequireDefault(require("./reducers/slides"));
var _stars = _interopRequireDefault(require("./reducers/stars"));
var _step = _interopRequireDefault(require("./reducers/step"));
var _validate = _interopRequireDefault(require("./reducers/validate"));
var _viewedResources = _interopRequireDefault(require("./reducers/viewed-resources"));
var _variables = _interopRequireDefault(require("./reducers/variables"));
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
function combineReducers(fnMap) {
// eslint-disable-next-line flowtype/require-return-type
const fns = (0, _map2.default)(({
fn,
key
}) => {
return (config, action) => state => {
if (!key) return fn(config)(state, action);
const newState = (0, _update2.default)(key, value => fn(config)(value, action, state), state);
return newState;
};
}, fnMap);
return config => {
return (state, action) => {
(0, _validate.default)(config)(state, action);
return (0, _pipe2.default)(...(0, _map2.default)(fn => fn(config, action), fns))(state);
};
};
}
const reduceAction = combineReducers([{
key: 'livesDisabled',
fn: _livesDisabled.default
}, {
key: 'isCorrect',
fn: _isCorrect.default
}, {
key: 'slides',
fn: _slides.default
}, {
key: 'lives',
fn: _lives.default
}, {
key: 'step',
fn: _step.default
}, {
key: 'stars',
fn: _stars.default
}, {
key: 'requestedClues',
fn: _requestedClues.default
}, {
key: 'viewedResources',
fn: _viewedResources.default
}, {
key: 'remainingLifeRequests',
fn: _remainingLifeRequests.default
}, {
key: 'hasViewedAResourceAtThisStep',
fn: _hasViewedAResourceAtThisStep.default
}, {
key: 'content',
fn: _content.default
}, {
key: 'nextContent',
fn: _nextContent.default
}, {
key: 'allAnswers',
fn: _allAnswers.default
}, {
key: 'pendingSlides',
fn: _pendingSlides.default
}, {
fn: _variables.default
}]);
function updateState(config, state, actions) {
if ((0, _isEmpty2.default)(actions)) {
return (0, _reduce2.default)(reduceAction(config), state, [{
type: 'init'
}]);
}
return (0, _reduce2.default)(reduceAction(config), state, actions);
}
//# sourceMappingURL=update-state.js.map