UNPKG

quiz-interactions

Version:

A React UI component Library for quiz interaction types.

178 lines (146 loc) 7.07 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 _map = _interopRequireDefault(require("lodash/fp/map")); var _striptags = _interopRequireDefault(require("striptags")); var _uiThemeable = require("@instructure/ui-themeable"); var _uiForms = require("@instructure/ui-forms"); var _uiA11y = require("@instructure/ui-a11y"); var _quizRce = require("@instructure/quiz-rce"); var _theme = _interopRequireDefault(require("./theme")); var _formatMessage = _interopRequireDefault(require("@instructure/quiz-i18n/lib/format-message")); var _dec, _class, _class2, _temp; var styles = { componentId: 'bHFXA', template: function template(theme) { return "\n\n.bHFXA_cSuF{border:".concat(theme.questionBorderWidth || 'inherit', " solid ").concat(theme.questionBorderColor || 'inherit', ";border-radius:").concat(theme.questionBorderRadius || 'inherit', ";box-sizing:border-box;cursor:pointer;padding:5px 20px 10px 20px;width:100%}\n\n.bHFXA_fsuY{display:flex;flex-direction:column}\n\n.bHFXA_VpyP{align-items:center;display:flex;flex-direction:row;margin-bottom:10px}\n\n.bHFXA_eKfw{display:flex;flex:2 2 auto;justify-content:flex-end}\n\n.bHFXA_nvdO{color:").concat(theme.titleColor || 'inherit', ";flex:20 20 auto;font-size:").concat(theme.titleFontSize || 'inherit', ";margin:0;margin-left:33px}\n\n.bHFXA_eEHL{flex:1 1 auto}\n\n.bHFXA_esVF{margin-left:15px}\n\n.bHFXA_tuUw{align-items:center;color:").concat(theme.questionPositionColor || 'inherit', ";flex:1 1 0;font-size:1.4rem}\n\n.bHFXA_cwte{display:flex;flex:2 2 auto;justify-content:flex-end;padding-right:5px}\n\n.bHFXA_cwte,.bHFXA_cloC{align-items:center}\n\n.bHFXA_cloC{flex:20 20 auto;font-size:1.1rem;margin:0}\n\n.bHFXA_fVUh{border:none}\n\n.bHFXA_dKma{margin:0}\n\n.bHFXA_dKma,.bHFXA_bcGJ{background-color:transparent;border:default;border-radius:default;border-width:default;padding:0}\n\n.bHFXA_bcGJ{margin-right:10px}"); }, 'question': 'bHFXA_cSuF', 'header': 'bHFXA_fsuY', 'headerSection': 'bHFXA_VpyP', 'editButtons': 'bHFXA_eKfw', 'title': 'bHFXA_nvdO', 'dragAndDrop': 'bHFXA_eEHL', 'itemBody': 'bHFXA_esVF', 'questionPosition': 'bHFXA_tuUw', 'points': 'bHFXA_cwte', 'stem': 'bHFXA_cloC', 'legend': 'bHFXA_fVUh', 'deleteButton': 'bHFXA_dKma', 'editButton': 'bHFXA_bcGJ' }; var MultipleAnswerTake = ( /** --- category: MultipleAnswer --- Multiple Answer Take component ```jsx_example function Example (props) { const exampleProps = { itemBody: 'Who was in the first cabinet of the USA?', interactionData: { choices: [ { id: 'uuid1', itemBody: 'Thomas Jefferson', position: 1 }, { id: 'uuid2', itemBody: 'John Marshall', position: 2 }, { id: 'uuid3', itemBody: 'John Knox', position: 3 }, { id: 'uuid4', itemBody: 'Alexander Hamilton', position: 4 }, { id: 'uuid5', itemBody: 'Aaron Burr', position: 5 }, { id: 'uuid6', itemBody: 'Ben Franklin', position: 6 } ] }, scoringData: { value: ['uuid1', 'uuid3', 'uuid4'] }, userResponse: { value: ['uuid1', 'uuid6'] } } return ( <MultipleAnswerTake {...exampleProps} {...props} /> ) } <SettingsSwitcher locales={LOCALES}> <TakeStateProvider> <Example /> </TakeStateProvider> </SettingsSwitcher> ``` **/ _dec = (0, _uiThemeable.themeable)(_theme.default, styles), _dec(_class = (_temp = _class2 = /*#__PURE__*/ function (_Component) { (0, _inherits2.default)(MultipleAnswerTake, _Component); function MultipleAnswerTake() { var _getPrototypeOf2; var _this; (0, _classCallCheck2.default)(this, MultipleAnswerTake); 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)(MultipleAnswerTake)).call.apply(_getPrototypeOf2, [this].concat(args))); _this.handleCheckboxGroupChange = function (value) { if (!_this.props.readOnly) { _this.props.handleResponseUpdate(value); } }; _this.renderChoice = function (choice) { return _react.default.createElement(_uiForms.Checkbox, { key: choice.id, value: choice.id, "aria-label": (0, _formatMessage.default)('Answer: {choice}', { choice: (0, _striptags.default)(choice.itemBody) }), label: _react.default.createElement(_quizRce.RichContentRenderer, { customStyles: styles.itemBody, content: choice.itemBody }) }); }; return _this; } (0, _createClass2.default)(MultipleAnswerTake, [{ key: "render", value: function render() { return _react.default.createElement(_quizRce.ItemBodyWrapper, { itemBody: this.props.itemBody }, _react.default.createElement(_uiForms.CheckboxGroup, { value: this.props.userResponse.value || [], name: "interaction_".concat(this.props.itemId) // eslint-disable-line react/jsx-no-literals , onChange: this.handleCheckboxGroupChange, readOnly: this.props.readOnly, description: _react.default.createElement(_uiA11y.ScreenReaderContent, null, (0, _formatMessage.default)('Group of answer choices')) }, (0, _map.default)(this.renderChoice, this.props.interactionData.choices))); } }]); MultipleAnswerTake.displayName = "MultipleAnswerTake"; return MultipleAnswerTake; }(_react.Component), _class2.propTypes = { handleResponseUpdate: _propTypes.default.func.isRequired, itemId: _propTypes.default.string, itemBody: _propTypes.default.string.isRequired, interactionData: _propTypes.default.shape({ choices: _propTypes.default.arrayOf(_propTypes.default.shape({ id: _propTypes.default.string, itemBody: _propTypes.default.string })) }).isRequired, userResponse: _propTypes.default.shape({ value: _propTypes.default.arrayOf(_propTypes.default.string) }), readOnly: _propTypes.default.bool }, _class2.defaultProps = { itemId: void 0, readOnly: false, userResponse: {}, handleResponseUpdate: Function.prototype }, _temp)) || _class); exports.default = MultipleAnswerTake;