UNPKG

@instructure/quiz-taking

Version:

58 lines (57 loc) 3.27 kB
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;