quiz-interactions
Version:
A React UI component Library for quiz interaction types.
178 lines (146 loc) • 7.07 kB
JavaScript
"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;