UNPKG

@instructure/quiz-taking

Version:
62 lines (53 loc) 2.46 kB
import {bindActionCreators} from 'redux' import {List, Map} from 'immutable' import {connect} from '@instructure/quiz-core/common/react-redux' import { getBacktrackingIsAllowed, isOneQuestionAtATime, getActiveQuizSession, } from '@instructure/quiz-core/common/selectors/quizSessions' import {toggleSidebar as toggleSidebarAction} from '@instructure/quiz-core/common/actions/sidebar' import {scrollToItem as scrollToItemAction} from '@instructure/quiz-core/common/actions/scrolling' import {screenreaderNotification as screenreaderNotificationAction} from '@instructure/quiz-core/common/actions/alerts' import { setCurrentSessionItemPosition, setFocusTitleAndInstructions as setFocusTitleAndInstructionsAction, } from '@instructure/quiz-core/common/actions/taking' import {TakingSidebar as Sidebar} from './presenter' export const getPinnedItems = (state, quizSession) => { if ((state.sessionItems ?? Map()).size === 0) { return List() } return quizSession.getIn(['takingData', 'pins'], List()).map(pinPosition => { const si = state.sessionItems.find(sessionItem => sessionItem.get('position') === pinPosition) return {position: pinPosition, sessionItemId: si.get('id')} }) } export const mapStateToProps = (state, props) => { const quizSession = getActiveQuizSession(state) const pinnedItems = getPinnedItems(state, quizSession) return { allowBacktracking: getBacktrackingIsAllowed(state), isOneQuestionAtATime: isOneQuestionAtATime(state), pinnedItems, quizTitle: quizSession.getQuiz().title, sessionItems: quizSession.getSessionItems(), sessionNotLoaded: quizSession.id === '0', sidebarOpen: props.sidebarOpen || state.sidebar.get('isOpen'), } } export const mapDispatchToProps = (dispatch, props) => { return { scrollToItem: props.scrollToItem || bindActionCreators(scrollToItemAction, dispatch), toggleSidebar: props.toggleSidebar || bindActionCreators(toggleSidebarAction, dispatch), screenreaderNotification: bindActionCreators(screenreaderNotificationAction, dispatch), goToItem: sessionItemPosition => { return bindActionCreators(setCurrentSessionItemPosition, dispatch)(sessionItemPosition) }, setFocusTitleAndInstructions: bool => { return bindActionCreators(setFocusTitleAndInstructionsAction, dispatch)(bool) }, } } export const TakingSidebar = connect(mapStateToProps, mapDispatchToProps)(Sidebar) export default TakingSidebar