@instructure/quiz-taking
Version:
58 lines (57 loc) • 3.27 kB
JavaScript
import { Map, List } from 'immutable';
import { connect, fileUploading, modalActions, nextQuestion, submitQuiz, screenreaderNotification, QuizSession } from '@instructure/quiz-core';
import { OQAAT_NO_BACKTRACKING_NEXT_ITEM_FETCH_CALL } from '@instructure/quiz-common';
import { TakeButton as TakeButtonPresenter } from './presenter';
export function mapStateToProps(state) {
var currentSessionItemPosition = state.getIn(['taking', 'currentSessionItemPosition'], 1);
var quizSessionId = state.getIn(['quizSessions', 'activeQuizSessionId']);
var quizSession = QuizSession.create(state.getIn(['quizSessions', quizSessionId]));
var submitFlag = state.getIn(['taking', 'submitFlag']);
var response = state.getIn(['taking', 'responses'], 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', Map()).filter(function (record) {
return record.get('quizSessionId') === quizSessionId;
}).find(function (record) {
return record.get('position') === currentSessionItemPosition;
}) || 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', 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 || fileUploading(state);
return {
allowBacktracking: allowBacktracking,
currentQuestionIsLast: currentQuestionIsLast,
currentSessionItemPosition: currentSessionItemPosition,
disabled: disabled,
isOneQuestionAtATime: isOneQuestionAtATime,
itemId: itemId,
largeFormatResponse: largeFormatResponse,
quizSessionId: quizSessionId,
userResponse: userResponse,
isPassage: isPassage
};
}
export var mapDispatchToProps = {
nextQuestion: nextQuestion,
screenreaderNotification: screenreaderNotification,
submitQuiz: submitQuiz,
withConfirm: modalActions.withConfirm
};
export var TakeButton = connect(mapStateToProps, mapDispatchToProps)(TakeButtonPresenter);
export default TakeButton;