@instructure/quiz-taking
Version:
65 lines (63 loc) • 3.51 kB
JavaScript
"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;