@coorpacademy/progression-engine
Version:
185 lines (184 loc) • 5.31 kB
JavaScript
;
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