UNPKG

@instructure/quiz-interactions

Version:

A React UI component Library for quiz interaction types.

196 lines (193 loc) • 7.33 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"; var _dec, _class, _TrueFalseResult; 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)); } /** @jsx jsx */ import { Component } from 'react'; import PropTypes from 'prop-types'; import { RadioInput } from '@instructure/ui-radio-input'; import { jsx } from '@instructure/emotion'; import t from '@instructure/quiz-i18n/es/format-message'; import { ItemBodyWrapper } from '@instructure/quiz-rce'; import { FeedbackWrapper, NoResponse } from '@instructure/quiz-results-feedback'; import generateStyle from './styles'; import generateComponentTheme from './theme'; import { withStyleOverrides } from '@instructure/quiz-common'; var TRUE_CHOICE = 'trueChoice'; var FALSE_CHOICE = 'falseChoice'; /** --- category: TrueFalse --- True False Result component ```jsx_example <SettingsSwitcher locales={LOCALES}> <TrueFalseResult itemBody="The sun is a star" itemId="12" interactionData={{ trueChoice: 'True', falseChoice: 'False' }} scoredData={{ value: { true: { resultScore: 1, userResponded: true }, false: { resultScore: 0, userResponded: false } }} } /> </SettingsSwitcher> ``` **/ var TrueFalseResult = (_dec = withStyleOverrides(generateStyle, generateComponentTheme), _dec(_class = (_TrueFalseResult = /*#__PURE__*/function (_Component) { function TrueFalseResult() { _classCallCheck(this, TrueFalseResult); return _callSuper(this, TrueFalseResult, arguments); } _inherits(TrueFalseResult, _Component); return _createClass(TrueFalseResult, [{ key: "getUserResponse", value: function getUserResponse() { var value = this.props.scoredData.value; if (!value) return void 0; if (value["true"] && value["true"].userResponded) return true; if (value["false"] && value["false"].userResponded) return false; return null; } }, { key: "getCorrectAnswer", value: function getCorrectAnswer() { var value = this.props.scoredData.value; if (!value) return void 0; var trueScore = value["true"] && value["true"].resultScore; var falseScore = value["false"] && value["false"].resultScore; if (typeof trueScore !== 'undefined') { return trueScore > 0; } else if (typeof falseScore !== 'undefined') { return falseScore <= 0; // if we're > 0 we want this to return false } // unknown answer! return void 0; } }, { key: "getCorrectAnswerLabel", value: function getCorrectAnswerLabel() { var _this$props = this.props, interactionData = _this$props.interactionData, scoredData = _this$props.scoredData; var value = scoredData.value; if (!value) return null; if (value["true"] && value["true"].resultScore > 0) { return interactionData[TRUE_CHOICE]; } else if (value["false"] && value["false"].resultScore > 0) { return interactionData[FALSE_CHOICE]; } return null; } }, { key: "renderUngradedChoice", value: function renderUngradedChoice(name, label, checked) { return jsx(RadioInput, { checked: checked, value: checked.toString(), readOnly: true, name: name, label: label }); } }, { key: "renderChoice", value: function renderChoice(choiceType, correctAnswer, userResponse) { var interactionData = this.props.interactionData; var isChecked = choiceType === userResponse; var label = interactionData[choiceType ? TRUE_CHOICE : FALSE_CHOICE]; if (typeof correctAnswer === 'undefined' || !isChecked) { return this.renderUngradedChoice(name, label, !!isChecked); } var status; if (choiceType === correctAnswer) { status = 'correct'; } else { status = 'incorrect'; } var correctAnswerLabel = this.getCorrectAnswerLabel(); var name = "interaction_".concat(this.props.itemId, "_").concat(choiceType); return jsx(FeedbackWrapper, { correctAnswer: correctAnswerLabel, hiddenCorrectAnswerText: t('Correct answer: '), hiddenIncorrectAnswerText: t('Incorrect answer: '), status: status, userResponse: label }, jsx(RadioInput, { checked: true, value: "true", readOnly: true, name: name, label: label })); } }, { key: "render", value: function render() { var userResponse = this.getUserResponse(); var correctAnswer = this.getCorrectAnswer(); var correctnessKnown = typeof this.props.scoredData.correct !== 'undefined'; var responseHidden = typeof userResponse === 'undefined'; return jsx(ItemBodyWrapper, { itemBody: this.props.itemBody }, jsx("div", { className: "fs-mask" }, jsx("div", { css: this.props.styles.choiceWrapper }, this.renderChoice(true, correctAnswer, userResponse)), jsx("div", { css: this.props.styles.choiceWrapper }, this.renderChoice(false, correctAnswer, userResponse)), userResponse == null && jsx(NoResponse, { css: this.props.styles.noResponseWrapper, correctAnswerLabel: this.getCorrectAnswerLabel(correctAnswer), responseHidden: responseHidden, status: userResponse === null && correctnessKnown ? 'incorrect' : 'unknown' }))); } }]); }(Component), _defineProperty(_TrueFalseResult, "displayName", 'TrueFalseResult'), _defineProperty(_TrueFalseResult, "componentId", "Quizzes".concat(_TrueFalseResult.displayName)), _defineProperty(_TrueFalseResult, "propTypes", { interactionData: PropTypes.shape({ trueChoice: PropTypes.string, falseChoice: PropTypes.string }).isRequired, itemBody: PropTypes.string.isRequired, itemId: PropTypes.string, scoredData: PropTypes.shape({ correct: PropTypes.bool, value: PropTypes.shape({ "true": PropTypes.shape({ resultScore: PropTypes.number, userResponded: PropTypes.bool }), "false": PropTypes.shape({ resultScore: PropTypes.number, userResponded: PropTypes.bool }) }) }).isRequired, styles: PropTypes.object }), _defineProperty(_TrueFalseResult, "defaultProps", { itemId: void 0 }), _TrueFalseResult)) || _class); export { TrueFalseResult as default };