quiz-interactions
Version:
A React UI component Library for quiz interaction types.
196 lines (159 loc) • 9.21 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 _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
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 _classnames = _interopRequireDefault(require("classnames"));
var _uiButtons = require("@instructure/ui-buttons");
var _uiIcons = require("@instructure/ui-icons");
var _uiA11y = require("@instructure/ui-a11y");
var _uiElements = require("@instructure/ui-elements");
var _uiThemeable = require("@instructure/ui-themeable");
var _quizRce = require("@instructure/quiz-rce");
var _Card = _interopRequireDefault(require("../../../common/components/Card"));
var _theme = _interopRequireDefault(require("./theme"));
var _formatMessage = _interopRequireDefault(require("@instructure/quiz-i18n/lib/format-message"));
var _dec, _class, _class2, _temp;
var styles = {
componentId: 'GieSs',
template: function template(theme) {
return "\n\n.GieSs_eiZV,.GieSs_YIqF{padding-top:".concat(theme.bottomLabelPadding || 'inherit', "}\n\n.GieSs_iRsP{background-color:").concat(theme.paragraphContainerColor || 'inherit', ";display:flex;flex-wrap:wrap;margin-top:").concat(theme.paragraphContainerMargin || 'inherit', ";padding-bottom:").concat(theme.paragraphContainerPadding || 'inherit', ";padding-left:").concat(theme.paragraphContainerPadding || 'inherit', "}\n\n.GieSs_coRA{align-items:center;display:flex;margin-top:").concat(theme.choiceContainerMargin || 'inherit', "}\n\n.GieSs_eDCf{background-color:").concat(theme.choiceContainerContentColor || 'inherit', ";padding:").concat(theme.choiceContainerContentPadding || 'inherit', ";width:100%}\n\n.GieSs_eZDw .GieSs_eDCf{align-items:center;display:flex;flex:1}\n\n.GieSs_bLTv{text-align:center;width:").concat(theme.choicePositionWidth || 'inherit', "}\n\n[dir=ltr] .GieSs_bLTv,[dir=rtl] .GieSs_bLTv{text-align:center}\n\n.GieSs_eXaD{align-items:center;background-color:").concat(theme.choiceColor || 'inherit', ";border:").concat(theme.choiceBorder || 'inherit', " solid ").concat(theme.choiceBorderColor || 'inherit', ";border-radius:").concat(theme.choiceBorderRadius || 'inherit', ";display:flex;flex:1;padding:").concat(theme.choicePadding || 'inherit', "}\n\n.GieSs_bAPG{padding-left:").concat(theme.choiceBodyPadding || 'inherit', ";padding-right:").concat(theme.choiceBodyPadding || 'inherit', "}");
},
'bottomLabel': 'GieSs_eiZV',
'topLabel': 'GieSs_YIqF',
'paragraphContainer': 'GieSs_iRsP',
'choiceContainer': 'GieSs_coRA',
'choiceContainerContent': 'GieSs_eDCf',
'nonParagraphContainer': 'GieSs_eZDw',
'choicePosition': 'GieSs_bLTv',
'choice': 'GieSs_eXaD',
'choiceBody': 'GieSs_bAPG'
};
var OrderGroup = (_dec = (0, _uiThemeable.themeable)(_theme.default, styles), _dec(_class = (_temp = _class2 =
/*#__PURE__*/
function (_Component) {
(0, _inherits2.default)(OrderGroup, _Component);
function OrderGroup() {
var _getPrototypeOf2;
var _this;
(0, _classCallCheck2.default)(this, OrderGroup);
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)(OrderGroup)).call.apply(_getPrototypeOf2, [this].concat(args)));
_this.renderActions = function (choiceId, isFinalChoice, isFirstChoice) {
if (_this.props.actionsContent) {
return _this.props.actionsContent(choiceId, isFinalChoice, isFirstChoice);
}
return (// We need to wrap the button in a div for drag-and-drop to work in IE11 and Firefox
_react.default.createElement("div", null, _react.default.createElement(_uiButtons.Button, {
variant: "icon",
size: "small",
readOnly: _this.props.readOnly,
icon: _uiIcons.IconDragHandleLine
}, _react.default.createElement(_uiA11y.ScreenReaderContent, null, (0, _formatMessage.default)('Reorder Choice'))))
);
};
_this.renderChoice = function (choiceId, index) {
var choicePosition = index + 1;
var isFirstChoice = index === 0;
var isFinalChoice = choicePosition === _this.props.choiceOrder.length;
return _react.default.createElement("div", {
key: choiceId,
className: styles.choiceContainer
}, _react.default.createElement("div", {
className: styles.choiceContainerContent
}, !_this.props.displayAnswersParagraph && _react.default.createElement("div", {
className: styles.choicePosition
}, _react.default.createElement(_uiA11y.ScreenReaderContent, null, (0, _formatMessage.default)('position {position, number}', {
position: choicePosition
})), _react.default.createElement(_uiA11y.PresentationContent, null, _react.default.createElement(_uiElements.Text, {
color: "primary"
}, _formatMessage.default.number(choicePosition)))), _react.default.createElement("div", {
className: styles.choice
}, _this.renderActions(choiceId, isFinalChoice, isFirstChoice), _react.default.createElement(_quizRce.RichContentRenderer, {
customStyles: styles.choiceBody,
content: _this.props.choices[choiceId].itemBody
}))));
};
return _this;
}
(0, _createClass2.default)(OrderGroup, [{
key: "renderChoicesContainer",
value: function renderChoicesContainer() {
var _classNames,
_this2 = this;
var mainClasses = (0, _classnames.default)((_classNames = {}, (0, _defineProperty2.default)(_classNames, styles.paragraphContainer, this.props.displayAnswersParagraph), (0, _defineProperty2.default)(_classNames, styles.nonParagraphContainer, !this.props.displayAnswersParagraph), _classNames));
if (this.props.readOnly) {
return _react.default.createElement("div", {
className: mainClasses
}, this.props.choiceOrder.map(this.renderChoice));
}
return _react.default.createElement("div", {
className: mainClasses
}, this.props.choiceOrder.map(function (choiceId, i) {
return _react.default.createElement(_Card.default, {
key: choiceId,
index: i,
id: choiceId,
choices: _this2.props.choices,
moveCard: _this2.props.onMoveChoice
}, _this2.renderChoice(choiceId, i));
}));
}
}, {
key: "render",
value: function render() {
return _react.default.createElement("div", null, this.props.includeLabels && _react.default.createElement("div", {
className: styles.topLabel,
"data-automation": "sdk-ordering-toplabel"
}, _react.default.createElement(_uiA11y.ScreenReaderContent, null, (0, _formatMessage.default)('Top label: {label}', {
label: this.props.topLabel
})), _react.default.createElement(_uiA11y.PresentationContent, null, _react.default.createElement(_uiElements.Text, {
color: "primary"
}, this.props.topLabel))), this.renderChoicesContainer(), this.props.includeLabels && _react.default.createElement("div", {
className: styles.bottomLabel,
"data-automation": "sdk-ordering-bottomlabel"
}, _react.default.createElement(_uiA11y.ScreenReaderContent, null, (0, _formatMessage.default)('Bottom label: {label}', {
label: this.props.bottomLabel
})), _react.default.createElement(_uiA11y.PresentationContent, null, _react.default.createElement(_uiElements.Text, {
color: "primary"
}, this.props.bottomLabel))));
}
}]);
OrderGroup.displayName = "OrderGroup";
return OrderGroup;
}(_react.Component), _class2.propTypes = {
bottomLabel: _propTypes.default.string,
topLabel: _propTypes.default.string,
choiceOrder: _propTypes.default.arrayOf(_propTypes.default.string).isRequired,
choices: _propTypes.default.shape({
itemBody: _quizRce.RichContentRenderer.propTypes.content
}).isRequired,
actionsContent: _propTypes.default.func,
displayAnswersParagraph: _propTypes.default.bool,
includeLabels: _propTypes.default.bool,
onMoveChoice: _propTypes.default.func,
readOnly: _propTypes.default.bool
}, _class2.defaultProps = {
bottomLabel: void 0,
topLabel: void 0,
actionsContent: void 0,
displayAnswersParagraph: void 0,
includeLabels: void 0,
onMoveChoice: void 0,
readOnly: false // ===========
// RENDER
// ===========
}, _temp)) || _class);
exports.default = OrderGroup;