UNPKG

@instructure/quiz-interactions

Version:

A React UI component Library for quiz interaction types.

117 lines 4.62 kB
import _classCallCheck from "@babel/runtime/helpers/esm/classCallCheck"; import _createClass from "@babel/runtime/helpers/esm/createClass"; import _possibleConstructorReturn from "@babel/runtime/helpers/esm/possibleConstructorReturn"; import _getPrototypeOf from "@babel/runtime/helpers/esm/getPrototypeOf"; import _inherits from "@babel/runtime/helpers/esm/inherits"; import _defineProperty from "@babel/runtime/helpers/esm/defineProperty"; var _dec, _class, _FeedbackPopover; function _callSuper(_this, derived, args) { function isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { return !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (e) { return false; } } derived = _getPrototypeOf(derived); return _possibleConstructorReturn(_this, isNativeReflectConstruct() ? Reflect.construct(derived, args || [], _getPrototypeOf(_this).constructor) : derived.apply(_this, args)); } /** @jsx jsx */ import { Component } from 'react'; import PropTypes from 'prop-types'; import { jsx } from '@instructure/emotion'; import { Popover } from '@instructure/ui-popover'; import { Text } from '@instructure/ui-text'; import { IconCheckLine, IconXLine, IconNotGradedLine } from '@instructure/ui-icons'; import generateStyle from './styles'; import generateComponentTheme from './theme'; import t from '@instructure/quiz-i18n/es/format-message'; import { withStyleOverrides } from '@instructure/quiz-common'; var FeedbackPopover = (_dec = withStyleOverrides(generateStyle, generateComponentTheme), _dec(_class = (_FeedbackPopover = /*#__PURE__*/function (_Component) { function FeedbackPopover() { var _this2; _classCallCheck(this, FeedbackPopover); for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) { args[_key] = arguments[_key]; } _this2 = _callSuper(this, FeedbackPopover, [].concat(args)); _defineProperty(_this2, "positionWrapperRef", function (node) { _this2.positionWrapper = node; }); return _this2; } _inherits(FeedbackPopover, _Component); return _createClass(FeedbackPopover, [{ key: "componentDidMount", value: function componentDidMount() { this.props.makeStyles(); } }, { key: "componentDidUpdate", value: function componentDidUpdate() { this.props.makeStyles(); } }, { key: "render", value: function render() { 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 Icon = IconNotGradedLine; // default to the unknown state switch (status) { case 'correct': Icon = IconCheckLine; break; case 'incorrect': Icon = IconXLine; break; } var placement = flipVertically ? 'bottom' : 'top'; return jsx("div", { ref: this.positionWrapperRef }, jsx(Popover, { isShowingContent: true, shouldAlignArrow: true, placement: placement, mountNode: this.positionWrapper, renderTrigger: jsx("div", { style: positionStyles }, targetContent) }, jsx("div", { css: this.props.styles.feedback }, jsx(Icon, { size: "x-small" }), jsx("div", { css: this.props.styles.feedbackText }, jsx(Text, null, text || t('Correct Answer')))))); } }]); }(Component), _defineProperty(_FeedbackPopover, "displayName", 'FeedbackPopover'), _defineProperty(_FeedbackPopover, "componentId", "Quizzes".concat(_FeedbackPopover.displayName)), _defineProperty(_FeedbackPopover, "propTypes", { coordinates: PropTypes.shape({ x: PropTypes.number.isRequired, y: PropTypes.number.isRequired }).isRequired, flipVertically: PropTypes.bool.isRequired, text: PropTypes.string, status: PropTypes.string, targetContent: PropTypes.node, makeStyles: PropTypes.func, styles: PropTypes.object }), _defineProperty(_FeedbackPopover, "defaultProps", { targetContent: null, status: 'correct', text: null }), _FeedbackPopover)) || _class); export { FeedbackPopover as default };