UNPKG

@instructure/quiz-taking

Version:

176 lines • 7.31 kB
import _classCallCheck from "@babel/runtime/helpers/esm/classCallCheck"; import _createClass from "@babel/runtime/helpers/esm/createClass"; import _possibleConstructorReturn from "@babel/runtime/helpers/esm/possibleConstructorReturn"; import _getPrototypeOf from "@babel/runtime/helpers/esm/getPrototypeOf"; import _inherits from "@babel/runtime/helpers/esm/inherits"; import _defineProperty from "@babel/runtime/helpers/esm/defineProperty"; function _callSuper(_this, derived, args) { function isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { return !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (e) { return false; } } derived = _getPrototypeOf(derived); return _possibleConstructorReturn(_this, isNativeReflectConstruct() ? Reflect.construct(derived, args || [], _getPrototypeOf(_this).constructor) : derived.apply(_this, args)); } import React, { Component } from 'react'; import PropTypes from 'prop-types'; import ImmutablePropTypes from 'react-immutable-proptypes'; import { extractTextFromHtml, substituteVars } from '@instructure/quiz-interactions'; import t from '@instructure/quiz-i18n/es/format-message'; import { generateDisplayPositions, StimulusView as Stimulus, Sidebar, onPhone } from '@instructure/quiz-core'; import SidebarItem from './SidebarItem'; import { SIDEBAR_ITEM_REF, FORMULA_SLUG, withI18nSupport } from '@instructure/quiz-common'; export var TakingSidebar = /*#__PURE__*/function (_withI18nSupport) { function TakingSidebar() { var _this2; _classCallCheck(this, TakingSidebar); for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) { args[_key] = arguments[_key]; } _this2 = _callSuper(this, TakingSidebar, [].concat(args)); _defineProperty(_this2, "scrollToItem", function (position) { return function (itemId) { if (_this2.props.isOneQuestionAtATime) _this2.scrollToItemOqaat(position, itemId);else _this2.props.scrollToItem(itemId); if (onPhone() && _this2.props.sidebarOpen) _this2.props.toggleSidebar(); }; }); _defineProperty(_this2, "scrollToItemOqaat", function (position, itemId) { var itemMessage = t('Current question changed to question {position, number}', { position: position || 1 }); var message = position ? itemMessage : "".concat(t('Navigated to quiz title and instructions.'), " ").concat(itemMessage); _this2.props.setFocusTitleAndInstructions(!position); _this2.props.goToItem(position || 1); if (!position) { setTimeout(function () { _this2.props.scrollToItem(itemId); _this2.props.screenreaderNotification(message); }, 100); } else { _this2.props.screenreaderNotification(message); } }); _defineProperty(_this2, "renderSidebarItem", function (sessionItem, _displayPosition) { var item = sessionItem.getItem(); var key = _this2.generateItemKey(item.id); var sidebarOpen = _this2.props.sidebarOpen; return /*#__PURE__*/React.createElement(SidebarItem, { inStimulus: sessionItem.isStimulus, itemBody: _this2.getItemBody(item, _this2.locale), itemId: item.id, itemName: item.getInteractionType().name, key: key, pointsPossible: sessionItem.pointsPossible, position: sessionItem.questionNumber, quizEntryId: sessionItem.id, ref: _this2.generateItemKey(item.id), scrollToItem: _this2.scrollToItem(sessionItem.bolaPosition || sessionItem.position), sessionItem: sessionItem, sidebarOpen: sidebarOpen }); }); return _this2; } _inherits(TakingSidebar, _withI18nSupport); return _createClass(TakingSidebar, [{ key: "generateItemKey", value: function generateItemKey(id) { return "".concat(SIDEBAR_ITEM_REF, "_").concat(id); } }, { key: "setRef", value: function setRef(key) { var _this3 = this; return function (node) { _this3[key] = node; }; } }, { key: "getItemBody", value: function getItemBody(item, locale) { var itemBody = item.getItemBody(); if (item.getInteractionType().slug === FORMULA_SLUG) { var variables = item.toJS().interactionData.variables; itemBody = substituteVars(itemBody, variables, locale); } return extractTextFromHtml(itemBody || ''); } }, { key: "renderSidebarItems", value: function renderSidebarItems() { var _this4 = this; var sessionItems = this.props.sessionItems; return generateDisplayPositions(sessionItems).map(function (si) { var sessionItem = si.record; var sidebarOpen = _this4.props.sidebarOpen; if (sessionItem.isStimulus) { var key = _this4.generateItemKey(si.record.id); return /*#__PURE__*/React.createElement(Stimulus, { displayPosition: si.displayPosition, itemId: sessionItem.id, key: key, ref: _this4.setRef(key), renderSidebarItem: _this4.renderSidebarItem, scrollToItem: _this4.scrollToItem(sessionItem.bolaPosition || sessionItem.position), sidebarOpen: sidebarOpen, stimulusParent: sessionItem }); } return /*#__PURE__*/React.createElement("div", { key: sessionItem.id }, _this4.renderSidebarItem(sessionItem)); }); } }, { key: "render", value: function render() { if (this.props.sessionNotLoaded || this.props.isOneQuestionAtATime && !this.props.allowBacktracking) { return null; } return /*#__PURE__*/React.createElement(Sidebar, { taking: true, role: this.props.role, title: this.props.quizTitle, pinnedItems: this.props.pinnedItems, scrollToItem: this.scrollToItem, sidebarOpen: this.props.sidebarOpen, toggleSidebar: this.props.toggleSidebar, screenreaderNotification: this.props.screenreaderNotification }, this.renderSidebarItems()); } }]); }(withI18nSupport(Component)); _defineProperty(TakingSidebar, "propTypes", { allowBacktracking: PropTypes.bool.isRequired, quizTitle: PropTypes.string.isRequired, setFocusTitleAndInstructions: PropTypes.func.isRequired, goToItem: PropTypes.func.isRequired, isOneQuestionAtATime: PropTypes.bool.isRequired, pinnedItems: ImmutablePropTypes.listOf(PropTypes.shape({ sessionItemId: PropTypes.string.isRequired, position: PropTypes.number.isRequired })).isRequired, role: PropTypes.string, screenreaderNotification: PropTypes.func.isRequired, scrollToItem: PropTypes.func.isRequired, sessionItems: ImmutablePropTypes.list.isRequired, sessionNotLoaded: PropTypes.bool.isRequired, sidebarOpen: PropTypes.bool, toggleSidebar: PropTypes.func.isRequired, locale: PropTypes.string }); _defineProperty(TakingSidebar, "defaultProps", { role: 'navigation', sidebarOpen: false, locale: null }); _defineProperty(TakingSidebar, "contextTypes", { locale: PropTypes.string }); export default TakingSidebar;