quiz-interactions
Version:
A React UI component Library for quiz interaction types.
195 lines (161 loc) • 7.43 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 _sortBy = _interopRequireDefault(require("lodash/fp/sortBy"));
var _flow = _interopRequireDefault(require("lodash/fp/flow"));
var _striptags = _interopRequireDefault(require("striptags"));
var _uiForms = require("@instructure/ui-forms");
var _uiA11y = require("@instructure/ui-a11y");
var _uiThemeable = require("@instructure/ui-themeable");
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: 'fbvqG',
template: function template(theme) {
return "\n\n.fbvqG_cSuF{border:".concat(theme.questionBorder || '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.fbvqG_fsuY{display:flex;flex-direction:column}\n\n.fbvqG_VpyP{align-items:center;display:flex;flex-direction:row;margin-bottom:10px}\n\n.fbvqG_nvdO{color:").concat(theme.titleColor || 'inherit', ";flex:20 20 auto;font-size:").concat(theme.titleFontSize || 'inherit', ";margin:0;margin-left:33px}\n\n.fbvqG_eEHL{flex:1 1 auto}\n\n.fbvqG_esVF{margin-left:15px}\n\n.fbvqG_tuUw{align-items:center;color:").concat(theme.questionPositionColor || 'inherit', ";flex:1 1 0;font-size:1.4rem}\n\n.fbvqG_cwte{display:flex;flex:2 2 auto;justify-content:flex-end;padding-right:5px}\n\n.fbvqG_cwte,.fbvqG_cloC{align-items:center}\n\n.fbvqG_cloC{flex:20 20 auto;font-size:1.1rem;margin:0}\n\n.fbvqG_fVUh{border:none}\n\n.fbvqG_dKma{margin:0}\n\n.fbvqG_dKma,.fbvqG_bcGJ{background-color:transparent;border:default;border-radius:default;border-width:default;padding:0}\n\n.fbvqG_bcGJ{margin-right:10px}");
},
'question': 'fbvqG_cSuF',
'header': 'fbvqG_fsuY',
'headerSection': 'fbvqG_VpyP',
'title': 'fbvqG_nvdO',
'dragAndDrop': 'fbvqG_eEHL',
'itemBody': 'fbvqG_esVF',
'questionPosition': 'fbvqG_tuUw',
'points': 'fbvqG_cwte',
'stem': 'fbvqG_cloC',
'legend': 'fbvqG_fVUh',
'deleteButton': 'fbvqG_dKma',
'editButton': 'fbvqG_bcGJ'
};
var MultipleChoiceTake = (
/**
---
category: MultipleChoice
---
Multiple Choice Take component
```jsx_example
function Example (props) {
const exampleProps = {
itemId: 'mc_type',
itemBody: 'Who was the first President of the United States?',
interactionData: {
choices: [
{ id: 'uuid1', itemBody: 'George Washington', position: 1 },
{ id: 'uuid2', itemBody: 'Alexander Hamilton.', position: 2 },
{
id: 'uuid3',
itemBody: `
<p>
John Adams
<iframe
src="//www.youtube.com/embed/nrvpZxMfKaU"
width="560"
height="314"
allowfullscreen="allowfullscreen"
></iframe>
</p>
`,
position: 3
},
{ id: 'uuid4', itemBody: 'Thomas Jefferson', position: 4 }
]
},
userResponse: { value: 'uuid1' }
}
return (
<MultipleChoiceTake {...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)(MultipleChoiceTake, _Component);
function MultipleChoiceTake() {
var _getPrototypeOf2;
var _this;
(0, _classCallCheck2.default)(this, MultipleChoiceTake);
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)(MultipleChoiceTake)).call.apply(_getPrototypeOf2, [this].concat(args)));
_this.handleChosenValChange = function (event, choiceId) {
_this.props.handleResponseUpdate(choiceId);
};
_this.renderChoice = function (choice) {
return _react.default.createElement(_uiForms.RadioInput, {
className: styles.radioInput,
key: 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
}),
value: choice.id
});
};
return _this;
}
(0, _createClass2.default)(MultipleChoiceTake, [{
key: "render",
value: function render() {
var chosenVal = this.props.userResponse.value;
return _react.default.createElement(_quizRce.ItemBodyWrapper, {
itemBody: this.props.itemBody
}, _react.default.createElement(_uiForms.RadioInputGroup, {
defaultValue: chosenVal,
value: chosenVal,
onChange: this.handleChosenValChange,
className: styles.radioGroup,
name: "interaction_".concat(this.props.itemId) // eslint-disable-line react/jsx-no-literals
,
readOnly: this.props.readOnly,
description: _react.default.createElement(_uiA11y.ScreenReaderContent, null, (0, _formatMessage.default)('Group of answer choices'))
}, (0, _flow.default)((0, _sortBy.default)('position'), (0, _map.default)(this.renderChoice))(this.props.interactionData.choices)));
}
}]);
MultipleChoiceTake.displayName = "MultipleChoiceTake";
return MultipleChoiceTake;
}(_react.Component), _class2.propTypes = {
handleResponseUpdate: _propTypes.default.func,
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,
itemId: _propTypes.default.string,
userResponse: _propTypes.default.shape({
value: _propTypes.default.string
}).isRequired,
readOnly: _propTypes.default.bool
}, _class2.defaultProps = {
handleResponseUpdate: Function.prototype,
itemId: void 0,
readOnly: false
}, _temp)) || _class);
exports.default = MultipleChoiceTake;