UNPKG

@instructure/quiz-taking

Version:

65 lines (63 loc) 3.51 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.mapDispatchToProps = exports["default"] = exports.TakeButton = void 0; exports.mapStateToProps = mapStateToProps; var _immutable = require("immutable"); var _quizCore = require("@instructure/quiz-core"); var _quizCommon = require("@instructure/quiz-common"); var _presenter = require("./presenter"); function mapStateToProps(state) { var currentSessionItemPosition = state.getIn(['taking', 'currentSessionItemPosition'], 1); var quizSessionId = state.getIn(['quizSessions', 'activeQuizSessionId']); var quizSession = _quizCore.QuizSession.create(state.getIn(['quizSessions', quizSessionId])); var submitFlag = state.getIn(['taking', 'submitFlag']); var response = state.getIn(['taking', 'responses'], (0, _immutable.List)()).find(function (resp) { return resp.get('position') === currentSessionItemPosition; }); var _ref = response && response.toJS() || {}, userResponse = _ref.userResponse; // Note: this returns a Map() so things don't 'splode on initial render and sessionItems aren't loaded yet // but it should never really be needed otherwise var sessionItem = state.get('sessionItems', (0, _immutable.Map)()).filter(function (record) { return record.get('quizSessionId') === quizSessionId; }).find(function (record) { return record.get('position') === currentSessionItemPosition; }) || (0, _immutable.Map)(); var isPassage = sessionItem.getIn(['stimulus', 'passage'], false); var itemId = sessionItem.getIn(['item', 'id']); var bolaPosition = sessionItem.get('bolaPosition'); var sessionItemsCount = quizSession.get('sessionItemsCount'); var allowBacktracking = quizSession.get('allowBacktracking'); var isOneQuestionAtATime = quizSession.isOneQuestionAtATime(); var failedToStart = quizSession.failedToStart(); // I don't think this exists in the store yet var largeFormatResponse = null; var isNextItemFetching = state.getIn(['calls', _quizCommon.OQAAT_NO_BACKTRACKING_NEXT_ITEM_FETCH_CALL, 'requestStatus']) === 'calling'; var bolaSessionItemsCount = quizSession.get('bolaSessionItemsCount'); var buildOnLastAttempt = quizSession.get('buildOnLastAttempt'); var isLastBolaQuestion = !allowBacktracking && bolaPosition === bolaSessionItemsCount || allowBacktracking && currentSessionItemPosition === bolaSessionItemsCount; var currentQuestionIsLast = buildOnLastAttempt && isLastBolaQuestion || !buildOnLastAttempt && currentSessionItemPosition === sessionItemsCount || sessionItemsCount === 0; var disabled = submitFlag || failedToStart || isNextItemFetching && isOneQuestionAtATime || (0, _quizCore.fileUploading)(state); return { allowBacktracking: allowBacktracking, currentQuestionIsLast: currentQuestionIsLast, currentSessionItemPosition: currentSessionItemPosition, disabled: disabled, isOneQuestionAtATime: isOneQuestionAtATime, itemId: itemId, largeFormatResponse: largeFormatResponse, quizSessionId: quizSessionId, userResponse: userResponse, isPassage: isPassage }; } var mapDispatchToProps = exports.mapDispatchToProps = { nextQuestion: _quizCore.nextQuestion, screenreaderNotification: _quizCore.screenreaderNotification, submitQuiz: _quizCore.submitQuiz, withConfirm: _quizCore.modalActions.withConfirm }; var TakeButton = exports.TakeButton = (0, _quizCore.connect)(mapStateToProps, mapDispatchToProps)(_presenter.TakeButton); var _default = exports["default"] = TakeButton;