UNPKG

@instructure/quiz-interactions

Version:

A React UI component Library for quiz interaction types.

173 lines (171 loc) • 7.26 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); 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 _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf")); var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits")); var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty")); var _react = require("react"); var _propTypes = _interopRequireDefault(require("prop-types")); var _find = _interopRequireDefault(require("lodash/fp/find")); var _uiText = require("@instructure/ui-text"); var _emotion = require("@instructure/emotion"); var _formatMessage = _interopRequireDefault(require("@instructure/quiz-i18n/es/format-message")); var _quizRce = require("@instructure/quiz-rce"); var _quizResultsFeedback = require("@instructure/quiz-results-feedback"); var _styles = _interopRequireDefault(require("./styles")); var _theme = _interopRequireDefault(require("./theme")); var _quizCommon = require("@instructure/quiz-common"); var _dec, _class, _MatchingResult; /** @jsx jsx */ 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 = (0, _getPrototypeOf2["default"])(derived); return (0, _possibleConstructorReturn2["default"])(_this, isNativeReflectConstruct() ? Reflect.construct(derived, args || [], (0, _getPrototypeOf2["default"])(_this).constructor) : derived.apply(_this, args)); } /** --- category: Matching --- Matching Result component ```jsx_example <SettingsSwitcher locales={LOCALES}> <MatchingResult itemBody="Match the name of the celestial body on the left with its correct classification." interactionData={{ questions: [ { id: 'quuid1', itemBody: 'Mars' }, { id: 'quuid2', itemBody: 'Phobos' }, { id: 'quuid3', itemBody: 'Andromeda' }, { id: 'quuid4', itemBody: 'Alpha Centauri' } ], answers: [ 'Planet', 'Moon', 'Nebula', 'Star', 'Galaxy - this is a very long answer - this is a very long answer - this is a very long answer' ] }} scoredData={{ value: [{ id: 'quuid1', userResponded: 'Planet', value: 'Planet' }, { id: 'quuid2', userResponded: 'Moon', value: 'Moon' }, { id: 'quuid3', userResponded: 'Nebula', value: 'Nebula' }, { id: 'quuid4', userResponded: 'Star', value: 'GalaxyGalaxy - this is a very long answer - this is a very long answer - this is a very long answer' }] }} /> </SettingsSwitcher> ``` **/ var MatchingResult = (_dec = (0, _quizCommon.withStyleOverrides)(_styles["default"], _theme["default"]), _dec(_class = (_MatchingResult = /*#__PURE__*/function (_Component) { function MatchingResult() { (0, _classCallCheck2["default"])(this, MatchingResult); return _callSuper(this, MatchingResult, arguments); } (0, _inherits2["default"])(MatchingResult, _Component); return (0, _createClass2["default"])(MatchingResult, [{ key: "getAnswerBodyForQuestion", value: function getAnswerBodyForQuestion(questionId) { var answer = (0, _find["default"])({ id: String(questionId) }, this.props.scoredData.value || {}); return answer && answer.value; } }, { key: "renderAnswer", value: function renderAnswer(response, answerBody) { var correctnessKnown = typeof this.props.scoredData.correct !== 'undefined'; var status = 'incorrect'; if (response && response.resultScore) { status = 'correct'; } else if ((!response || !response.resultScore) && correctnessKnown) { status = 'incorrect'; } else { status = 'unknown'; } return (0, _emotion.jsx)("div", { css: this.props.styles.answer }, response && response.userResponded ? (0, _emotion.jsx)(_quizResultsFeedback.FeedbackWrapper, { userResponse: response.userResponded, correctAnswer: answerBody, status: status, hiddenCorrectAnswerText: (0, _formatMessage["default"])('Correct match: '), hiddenIncorrectAnswerText: (0, _formatMessage["default"])('Incorrect match: ') }) : (0, _emotion.jsx)(_quizResultsFeedback.NoResponse, { correctAnswerLabel: answerBody, responseHidden: !this.props.scoredData.value, status: status })); } }, { key: "render", value: function render() { var _this2 = this; return (0, _emotion.jsx)(_quizRce.ItemBodyWrapper, { itemBody: this.props.itemBody }, (0, _emotion.jsx)("div", null, this.props.interactionData.questions.map(function (question) { var response = (0, _find["default"])({ id: String(question.id) }, _this2.props.scoredData.value || {}); var answerBody = _this2.getAnswerBodyForQuestion(question.id); return (0, _emotion.jsx)("div", { css: _this2.props.styles.item, key: question.id }, (0, _emotion.jsx)("div", { css: _this2.props.styles.question, "data-testid": "question" }, (0, _emotion.jsx)(_uiText.Text, { color: "primary" }, question.itemBody)), (0, _emotion.jsx)("div", { css: _this2.props.styles.divider }), _this2.renderAnswer(response, answerBody)); }))); } }]); }(_react.Component), (0, _defineProperty2["default"])(_MatchingResult, "displayName", 'MatchingResult'), (0, _defineProperty2["default"])(_MatchingResult, "componentId", "Quizzes".concat(_MatchingResult.displayName)), (0, _defineProperty2["default"])(_MatchingResult, "propTypes", { interactionData: _propTypes["default"].shape({ questions: _propTypes["default"].arrayOf(_propTypes["default"].shape({ id: _propTypes["default"].string, itemBody: _propTypes["default"].string })) }).isRequired, itemBody: _propTypes["default"].string.isRequired, scoredData: _propTypes["default"].shape({ correct: _propTypes["default"].bool, value: _propTypes["default"].arrayOf(_propTypes["default"].shape({ id: _propTypes["default"].string.isRequired, resultScore: _propTypes["default"].number, userResponded: _propTypes["default"].string, value: _propTypes["default"].string })) }).isRequired, styles: _propTypes["default"].object }), _MatchingResult)) || _class); var _default = exports["default"] = MatchingResult;