@instructure/quiz-taking
Version:
56 lines (55 loc) • 2.82 kB
JavaScript
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 var getPinnedItems = function(state, quizSession) {
var _state_sessionItems;
if (((_state_sessionItems = state.sessionItems) !== null && _state_sessionItems !== void 0 ? _state_sessionItems : Map()).size === 0) {
return List();
}
return quizSession.getIn([
'takingData',
'pins'
], List()).map(function(pinPosition) {
var si = state.sessionItems.find(function(sessionItem) {
return sessionItem.get('position') === pinPosition;
});
return {
position: pinPosition,
sessionItemId: si.get('id')
};
});
};
export var mapStateToProps = function(state, props) {
var quizSession = getActiveQuizSession(state);
var pinnedItems = getPinnedItems(state, quizSession);
return {
allowBacktracking: getBacktrackingIsAllowed(state),
isOneQuestionAtATime: isOneQuestionAtATime(state),
pinnedItems: pinnedItems,
quizTitle: quizSession.getQuiz().title,
sessionItems: quizSession.getSessionItems(),
sessionNotLoaded: quizSession.id === '0',
sidebarOpen: props.sidebarOpen || state.sidebar.get('isOpen')
};
};
export var mapDispatchToProps = function(dispatch, props) {
return {
scrollToItem: props.scrollToItem || bindActionCreators(scrollToItemAction, dispatch),
toggleSidebar: props.toggleSidebar || bindActionCreators(toggleSidebarAction, dispatch),
screenreaderNotification: bindActionCreators(screenreaderNotificationAction, dispatch),
goToItem: function(sessionItemPosition) {
return bindActionCreators(setCurrentSessionItemPosition, dispatch)(sessionItemPosition);
},
setFocusTitleAndInstructions: function(bool) {
return bindActionCreators(setFocusTitleAndInstructionsAction, dispatch)(bool);
}
};
};
export var TakingSidebar = connect(mapStateToProps, mapDispatchToProps)(Sidebar);
export default TakingSidebar;