UNPKG

quiz-interactions

Version:

A React UI component Library for quiz interaction types.

246 lines (209 loc) 8.86 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard"); Object.defineProperty(exports, "__esModule", { value: true }); exports.default = void 0; var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck")); var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass")); var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn")); var _getPrototypeOf3 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf")); var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits")); var _react = _interopRequireWildcard(require("react")); var _propTypes = _interopRequireDefault(require("prop-types")); var _uiA11y = require("@instructure/ui-a11y"); var _uiForms = require("@instructure/ui-forms"); var _uiThemeable = require("@instructure/ui-themeable"); var _formatMessage = _interopRequireDefault(require("@instructure/quiz-i18n/lib/format-message")); var _quizRce = require("@instructure/quiz-rce"); var _FeedbackWrapper = _interopRequireDefault(require("@instructure/quiz-results-feedback/lib/components/FeedbackWrapper")); var _NoResponse = _interopRequireDefault(require("@instructure/quiz-results-feedback/lib/components/NoResponse")); var _theme = _interopRequireDefault(require("./theme")); var _dec, _class, _class2, _temp; var styles = { componentId: 'eewuY', template: function template(theme) { return "\n\n.eewuY_bUsl{padding-top:".concat(theme.radioWrapperPadding || 'inherit', "}\n\n.eewuY_cfgF{margin-top:").concat(theme.noResponseWrapperMargin || 'inherit', "}\n\n.eewuY_fLrt{margin-top:").concat(theme.responseMarginTop || 'inherit', ";width:100%}"); }, 'radioWrapper': 'eewuY_bUsl', 'noResponseWrapper': 'eewuY_cfgF', 'responseWrapper': 'eewuY_fLrt' }; var MultipleAnswerResult = ( /** --- category: MultipleAnswer --- Multiple Answer Result component ```jsx_example <SettingsSwitcher locales={LOCALES}> <MultipleAnswerResult itemBody="Who was in the first cabinet of the USA?" interactionData={{ choices: [ { id: 'uuid1', position: 1, itemBody: '<p>Thomas Jefferson</p>' }, { id: 'uuid2', position: 2, itemBody: '<p>John Marshall</p>' }, { id: 'uuid3', position: 3, itemBody: '<p>John Knox</p>' }, { id: 'uuid4', position: 4, itemBody: '<p>Alexander Hamilton</p>' }, { id: 'uuid5', position: 5, itemBody: '<p>Aaron Burr</p>' }, { id: 'uuid6', position: 6, itemBody: '<p>Ben Franklin</p>' } ] }} scoredData={{ correct: false, value: { uuid1: { resultScore: 1, userResponded: true }, uuid2: { resultScore: 1, userResponded: false }, uuid3: { resultScore: 0, userResponded: true } } }} /> </SettingsSwitcher> ``` **/ _dec = (0, _uiThemeable.themeable)(_theme.default, styles), _dec(_class = (_temp = _class2 = /*#__PURE__*/ function (_Component) { (0, _inherits2.default)(MultipleAnswerResult, _Component); function MultipleAnswerResult() { var _getPrototypeOf2; var _this; (0, _classCallCheck2.default)(this, MultipleAnswerResult); for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) { args[_key] = arguments[_key]; } _this = (0, _possibleConstructorReturn2.default)(this, (_getPrototypeOf2 = (0, _getPrototypeOf3.default)(MultipleAnswerResult)).call.apply(_getPrototypeOf2, [this].concat(args))); _this.renderPlainChoice = function (_ref, checked) { var id = _ref.id, itemBody = _ref.itemBody; var srtext = (0, _formatMessage.default)('Answer, '); if (typeof checked !== 'undefined') { srtext = checked ? (0, _formatMessage.default)('Selected Answer, ') : (0, _formatMessage.default)('Unselected Answer, '); } return _react.default.createElement("div", { key: id, className: styles.responseWrapper }, _react.default.createElement(_uiForms.Checkbox, { value: id, label: _react.default.createElement("div", null, _react.default.createElement(_uiA11y.ScreenReaderContent, null, srtext), _react.default.createElement(_quizRce.RichContentRenderer, { content: itemBody })), checked: checked, onChange: function onChange() {}, readOnly: true })); }; _this.renderFeedbackChoice = function (_ref2, checked, status) { var id = _ref2.id, itemBody = _ref2.itemBody; var feedbackText, wrapperStatus = 'unknown'; if (checked) { if (status === 'correct') { feedbackText = (0, _formatMessage.default)('Selected Answer - Correct'); wrapperStatus = 'correct'; } else if (status === 'incorrect') { feedbackText = (0, _formatMessage.default)('Selected Answer - Incorrect'); wrapperStatus = 'incorrect'; } } else if (status === 'correct') { feedbackText = (0, _formatMessage.default)('Missed Option - Incorrect'); wrapperStatus = 'incorrect'; } return _react.default.createElement("div", { key: id, className: styles.responseWrapper }, _react.default.createElement(_FeedbackWrapper.default, { correctAnswer: feedbackText, hiddenCorrectAnswerText: (0, _formatMessage.default)('Correct answer: '), hiddenIncorrectAnswerText: (0, _formatMessage.default)('Incorrect answer: '), status: wrapperStatus, subTitleDescription: "", richContent: true }, _react.default.createElement(_uiForms.Checkbox, { value: id, label: _react.default.createElement(_quizRce.RichContentRenderer, { content: itemBody }), checked: checked, onChange: function onChange() {}, readOnly: true }))); }; return _this; } (0, _createClass2.default)(MultipleAnswerResult, [{ key: "noResponseStatus", value: function noResponseStatus() { var correct = this.props.scoredData.correct; if (typeof correct === 'undefined') return 'unknown'; return correct ? 'correct' : 'incorrect'; } }, { key: "render", value: function render() { var _this2 = this; var scoredData = this.props.scoredData; var choices = this.props.interactionData.choices.map(function (choice) { var choiceData = scoredData.value && scoredData.value[choice.id] || {}; var correct = choiceData.hasOwnProperty('correct') ? choiceData.correct : choiceData.resultScore; var checked = choiceData.userResponded; return { choice: choice, correct: correct, checked: checked }; }); var nothingSelected = choices.every(function (_ref3) { var checked = _ref3.checked; return !checked; }); return _react.default.createElement(_quizRce.ItemBodyWrapper, { itemBody: this.props.itemBody }, choices.map(function (_ref4) { var choice = _ref4.choice, correct = _ref4.correct, checked = _ref4.checked; var status; if (typeof checked !== 'undefined') { if (correct === true || correct > 0) { status = 'correct'; } else if (correct === false || correct === 0) { status = 'incorrect'; } } if (!status) { // Choice has no feedback return _this2.renderPlainChoice(choice, checked); } else { return _this2.renderFeedbackChoice(choice, checked, status); } }), nothingSelected && _react.default.createElement(_NoResponse.default, { className: styles.noResponseWrapper, responseHidden: !scoredData.value, status: this.noResponseStatus() })); } }]); MultipleAnswerResult.displayName = "MultipleAnswerResult"; return MultipleAnswerResult; }(_react.Component), _class2.propTypes = { interactionData: _propTypes.default.shape({ choices: _propTypes.default.arrayOf(_propTypes.default.shape({ id: _propTypes.default.string, itemBody: _propTypes.default.string, position: _propTypes.default.number })) }).isRequired, itemBody: _propTypes.default.string.isRequired, scoredData: _propTypes.default.shape({ correct: _propTypes.default.bool, value: _propTypes.default.objectOf(_propTypes.default.shape({ correct: _propTypes.default.bool, resultScore: _propTypes.default.number, userResponded: _propTypes.default.bool })) }).isRequired }, _temp)) || _class); exports.default = MultipleAnswerResult;