UNPKG

quiz-interactions

Version:

A React UI component Library for quiz interaction types.

145 lines (112 loc) 5.8 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 _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 _uiThemeable = require("@instructure/ui-themeable"); var _uiOverlays = require("@instructure/ui-overlays"); var _uiElements = require("@instructure/ui-elements"); var _uiIcons = require("@instructure/ui-icons"); var _theme = _interopRequireDefault(require("./theme")); var _formatMessage = _interopRequireDefault(require("@instructure/quiz-i18n/lib/format-message")); var _dec, _class, _class2, _temp; var styles = { componentId: 'cRIOg', template: function template(theme) { return "\n\n.cRIOg_cuyR{align-items:center;color:".concat(theme.feedbackTextColor || 'inherit', ";display:flex;padding:").concat(theme.feedbackTopBottomPadding || 'inherit', " ").concat(theme.feedbackLeftRightPadding || 'inherit', "}\n\n.cRIOg_pIdH{background-color:").concat(theme.feedbackCorrectColor || 'inherit', "}\n\n.cRIOg_fPDL{background-color:").concat(theme.feedbackIncorrectColor || 'inherit', "}\n\n.cRIOg_fVek{background-color:").concat(theme.feedbackUnknownColor || 'inherit', "}\n\n.cRIOg_efuB{margin-left:").concat(theme.feedbackTextMargin || 'inherit', "}"); }, 'feedback': 'cRIOg_cuyR', 'feedbackCorrect': 'cRIOg_pIdH', 'feedbackIncorrect': 'cRIOg_fPDL', 'feedbackUnknown': 'cRIOg_fVek', 'feedbackText': 'cRIOg_efuB' }; var FeedbackPopover = (_dec = (0, _uiThemeable.themeable)(_theme.default, styles), _dec(_class = (_temp = _class2 = /*#__PURE__*/ function (_Component) { (0, _inherits2.default)(FeedbackPopover, _Component); function FeedbackPopover() { var _getPrototypeOf2; var _this; (0, _classCallCheck2.default)(this, FeedbackPopover); 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)(FeedbackPopover)).call.apply(_getPrototypeOf2, [this].concat(args))); _this.positionWrapperRef = function (node) { _this.positionWrapper = node; }; return _this; } (0, _createClass2.default)(FeedbackPopover, [{ key: "render", value: function render() { var _classNames; var _this$props = this.props, coordinates = _this$props.coordinates, flipVertically = _this$props.flipVertically, text = _this$props.text, status = _this$props.status, targetContent = _this$props.targetContent; // top and bottom are dynamic based on current window resolution var positionStyles = { left: coordinates.x, top: coordinates.y, position: 'absolute' }; var classes = (0, _classnames.default)(styles.feedback, (_classNames = {}, (0, _defineProperty2.default)(_classNames, styles.feedbackCorrect, status === 'correct'), (0, _defineProperty2.default)(_classNames, styles.feedbackIncorrect, status === 'incorrect'), (0, _defineProperty2.default)(_classNames, styles.feedbackUnknown, status === 'unknown'), _classNames)); var Icon = _uiIcons.IconNotGradedLine; // default to the unknown state switch (status) { case 'correct': Icon = _uiIcons.IconCheckLine; break; case 'incorrect': Icon = _uiIcons.IconXLine; break; } var placement = flipVertically ? 'bottom' : 'top'; return _react.default.createElement("div", { ref: this.positionWrapperRef }, _react.default.createElement(_uiOverlays.Popover, { show: true, alignArrow: true, placement: placement, mountNode: this.positionWrapper }, _react.default.createElement(_uiOverlays.Popover.Trigger, null, _react.default.createElement("div", { style: positionStyles }, targetContent)), _react.default.createElement(_uiOverlays.Popover.Content, null, _react.default.createElement("div", { className: classes }, _react.default.createElement(Icon, { size: "x-small" }), _react.default.createElement("div", { className: styles.feedbackText }, _react.default.createElement(_uiElements.Text, null, text || (0, _formatMessage.default)('Correct Answer'))))))); } }]); FeedbackPopover.displayName = "FeedbackPopover"; return FeedbackPopover; }(_react.Component), _class2.propTypes = { coordinates: _propTypes.default.shape({ x: _propTypes.default.number.isRequired, y: _propTypes.default.number.isRequired }).isRequired, flipVertically: _propTypes.default.bool.isRequired, text: _propTypes.default.string, status: _propTypes.default.string, targetContent: _propTypes.default.node }, _class2.defaultProps = { targetContent: null, status: 'correct', text: null }, _temp)) || _class); exports.default = FeedbackPopover;