@coorpacademy/progression-engine
Version:
116 lines (69 loc) • 4.02 kB
JavaScript
'use strict';
exports.__esModule = true;
exports.default = updateState;
var _update = require('lodash/fp/update');
var _update2 = _interopRequireDefault(_update);
var _map = require('lodash/fp/map');
var _map2 = _interopRequireDefault(_map);
var _pipe = require('lodash/fp/pipe');
var _pipe2 = _interopRequireDefault(_pipe);
var _reduce = require('lodash/fp/reduce');
var _reduce2 = _interopRequireDefault(_reduce);
var _isEmpty = require('lodash/fp/isEmpty');
var _isEmpty2 = _interopRequireDefault(_isEmpty);
var _allAnswers = require('./reducers/all-answers');
var _allAnswers2 = _interopRequireDefault(_allAnswers);
var _content = require('./reducers/content');
var _content2 = _interopRequireDefault(_content);
var _hasViewedAResourceAtThisStep = require('./reducers/has-viewed-a-resource-at-this-step');
var _hasViewedAResourceAtThisStep2 = _interopRequireDefault(_hasViewedAResourceAtThisStep);
var _isCorrect = require('./reducers/is-correct');
var _isCorrect2 = _interopRequireDefault(_isCorrect);
var _lives = require('./reducers/lives');
var _lives2 = _interopRequireDefault(_lives);
var _livesDisabled = require('./reducers/lives-disabled');
var _livesDisabled2 = _interopRequireDefault(_livesDisabled);
var _nextContent = require('./reducers/next-content');
var _nextContent2 = _interopRequireDefault(_nextContent);
var _remainingLifeRequests = require('./reducers/remaining-life-requests');
var _remainingLifeRequests2 = _interopRequireDefault(_remainingLifeRequests);
var _requestedClues = require('./reducers/requested-clues');
var _requestedClues2 = _interopRequireDefault(_requestedClues);
var _slides = require('./reducers/slides');
var _slides2 = _interopRequireDefault(_slides);
var _stars = require('./reducers/stars');
var _stars2 = _interopRequireDefault(_stars);
var _step = require('./reducers/step');
var _step2 = _interopRequireDefault(_step);
var _validate = require('./reducers/validate');
var _validate2 = _interopRequireDefault(_validate);
var _viewedResources = require('./reducers/viewed-resources');
var _viewedResources2 = _interopRequireDefault(_viewedResources);
var _variables = require('./reducers/variables');
var _variables2 = _interopRequireDefault(_variables);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function combineReducers(fnMap // eslint-disable-line flowtype/no-weak-types
) {
// 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, _validate2.default)(config)(state, action);
return (0, _pipe2.default)(...(0, _map2.default)(fn => fn(config, action), fns))(state);
};
};
}
const reduceAction = combineReducers([{ key: 'livesDisabled', fn: _livesDisabled2.default }, { key: 'isCorrect', fn: _isCorrect2.default }, { key: 'slides', fn: _slides2.default }, { key: 'lives', fn: _lives2.default }, { key: 'step', fn: _step2.default }, { key: 'stars', fn: _stars2.default }, { key: 'requestedClues', fn: _requestedClues2.default }, { key: 'viewedResources', fn: _viewedResources2.default }, { key: 'remainingLifeRequests', fn: _remainingLifeRequests2.default }, { key: 'hasViewedAResourceAtThisStep', fn: _hasViewedAResourceAtThisStep2.default }, { key: 'content', fn: _content2.default }, { key: 'nextContent', fn: _nextContent2.default }, { key: 'allAnswers', fn: _allAnswers2.default }, { fn: _variables2.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