UNPKG

@coorpacademy/progression-engine

Version:

185 lines (184 loc) 5.31 kB
"use strict"; exports.__esModule = true; exports.computeNextStepOnRefuseExtraLife = exports.computeNextStepOnAcceptExtraLife = exports.computeNextStepAfterAnswerForReview = exports.computeNextStepAfterAnswer = exports.computeInitialStepForReview = exports.computeInitialStep = void 0; var _isEmpty2 = _interopRequireDefault(require("lodash/fp/isEmpty")); var _checkAnswer = _interopRequireDefault(require("../check-answer")); var _computeNextStep = require("./compute-next-step"); function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; } const computeInitialStep = (config, availableContent = []) => { const defaultSuccess = { type: 'move', payload: { nextContent: { type: 'success', ref: 'successExitNode' }, instructions: null } }; if ((0, _isEmpty2.default)(availableContent)) return defaultSuccess; const initialStep = (0, _computeNextStep.computeNextStep)(config, null, availableContent, null); if (!initialStep) { return defaultSuccess; } const { nextContent, instructions } = initialStep; return { type: 'move', payload: { instructions, nextContent } }; }; exports.computeInitialStep = computeInitialStep; const computeInitialStepForReview = (config, availableContent = []) => { const defaultSuccess = { type: 'move', payload: { nextContent: { type: 'success', ref: 'successExitNode' }, instructions: null } }; if ((0, _isEmpty2.default)(availableContent)) return defaultSuccess; const initialStep = (0, _computeNextStep.computeNextStepForReview)(config, null, availableContent, null); if (!initialStep) throw new Error('no slide in availableContent'); const { instructions, nextContent } = initialStep; return { type: 'move', payload: { instructions, nextContent } }; }; exports.computeInitialStepForReview = computeInitialStepForReview; const computeNextStepAfterAnswer = (config, state, availableContent, currentSlide, action) => { const answerIsCorrect = action.payload.godMode || (0, _checkAnswer.default)(config, currentSlide.question, action.payload.answer); const actionWithIsCorrect = { type: 'answer', payload: { answer: action.payload.answer, content: action.payload.content, godMode: action.payload.godMode, isCorrect: answerIsCorrect } }; const stepResult = (0, _computeNextStep.computeNextStep)(config, state, availableContent, actionWithIsCorrect); if (!stepResult) { return null; } const { nextContent, instructions, isCorrect } = stepResult; return { type: 'answer', payload: { answer: action.payload.answer, content: action.payload.content, godMode: action.payload.godMode, nextContent, isCorrect, instructions } }; }; exports.computeNextStepAfterAnswer = computeNextStepAfterAnswer; const computeNextStepAfterAnswerForReview = (config, state, availableContent, currentSlide, action) => { const answerIsCorrect = action.payload.godMode || (0, _checkAnswer.default)(config, currentSlide.question, action.payload.answer); const actionWithIsCorrect = { type: 'answer', payload: { answer: action.payload.answer, content: action.payload.content, godMode: action.payload.godMode, isCorrect: answerIsCorrect } }; const stepResult = (0, _computeNextStep.computeNextStepForReview)(config, state, availableContent, actionWithIsCorrect); if (!stepResult) { return { type: 'answer', payload: { answer: action.payload.answer, content: action.payload.content, godMode: action.payload.godMode, nextContent: { type: 'success', ref: 'successExitNode' }, isCorrect: answerIsCorrect, instructions: null } }; } const { nextContent, instructions, isCorrect } = stepResult; return { type: 'answer', payload: { answer: action.payload.answer, content: action.payload.content, godMode: action.payload.godMode, nextContent, isCorrect, instructions } }; }; exports.computeNextStepAfterAnswerForReview = computeNextStepAfterAnswerForReview; const computeNextStepOnAcceptExtraLife = (config, state, availableContent) => { const partialAction = { type: 'extraLifeAccepted' }; const stepResult = (0, _computeNextStep.computeNextStep)(config, state, availableContent, partialAction); if (!stepResult) { return null; } const { nextContent, instructions } = stepResult; return { type: 'extraLifeAccepted', payload: { content: { ref: 'extraLife', type: 'node' }, nextContent, instructions } }; }; exports.computeNextStepOnAcceptExtraLife = computeNextStepOnAcceptExtraLife; const computeNextStepOnRefuseExtraLife = (config, state) => { return { type: 'extraLifeRefused', payload: { content: { ref: 'extraLife', type: 'node' }, nextContent: { ref: 'failExitNode', type: 'failure' } } }; }; exports.computeNextStepOnRefuseExtraLife = computeNextStepOnRefuseExtraLife; //# sourceMappingURL=index.js.map