@instructure/quiz-taking
Version:
176 lines • 7.31 kB
JavaScript
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;