UNPKG

@instructure/quiz-grading

Version:

The Quiz React SDK by Instructure Inc.

251 lines (250 loc) • 12.1 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); Object.defineProperty(exports, "__esModule", { value: true }); exports["default"] = exports.SessionItemResultWrapper = 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 _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf")); var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits")); var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty")); var _react = require("react"); var _propTypes = _interopRequireDefault(require("prop-types")); var _reactImmutableProptypes = _interopRequireDefault(require("react-immutable-proptypes")); var _immutable = require("immutable"); var _emotion = require("@instructure/emotion"); var _quizCore = require("@instructure/quiz-core"); var _GradingBar = _interopRequireDefault(require("../GradingBar")); var _RegradeOverride = _interopRequireDefault(require("../../quizEntry/RegradeOverride")); var _quizCommon = require("@instructure/quiz-common"); var _styles = _interopRequireDefault(require("./styles")); var _theme = _interopRequireDefault(require("./theme")); var _dec, _class, _SessionItemResultWrapper; /** @jsx jsx */ 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 = (0, _getPrototypeOf2["default"])(derived); return (0, _possibleConstructorReturn2["default"])(_this, isNativeReflectConstruct() ? Reflect.construct(derived, args || [], (0, _getPrototypeOf2["default"])(_this).constructor) : derived.apply(_this, args)); } var SessionItemResultWrapper = exports.SessionItemResultWrapper = (_dec = (0, _quizCommon.withStyleOverrides)(_styles["default"], _theme["default"]), _dec(_class = (_SessionItemResultWrapper = /*#__PURE__*/function (_Component) { function SessionItemResultWrapper() { var _this2; (0, _classCallCheck2["default"])(this, SessionItemResultWrapper); for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) { args[_key] = arguments[_key]; } _this2 = _callSuper(this, SessionItemResultWrapper, [].concat(args)); (0, _defineProperty2["default"])(_this2, "state", { graderFeedback: _this2.props.graderFeedback, validationErrorsFromApi: {} }); (0, _defineProperty2["default"])(_this2, "gradingBar", null); (0, _defineProperty2["default"])(_this2, "_timeouts", []); (0, _defineProperty2["default"])(_this2, "startFeedbackEdit", function () { if (!_this2.props.isEditing) { _this2.props.switchOnEditing(); } }); (0, _defineProperty2["default"])(_this2, "closeFeedbackEdit", function () { var _this2$gradingBar; _this2.props.switchOffEditing(); (_this2$gradingBar = _this2.gradingBar) === null || _this2$gradingBar === void 0 || (_this2$gradingBar = _this2$gradingBar.getWrappedInstance()) === null || _this2$gradingBar === void 0 || _this2$gradingBar.focusFeedbackButton(); }); (0, _defineProperty2["default"])(_this2, "submitFeedbackEdit", function () { _this2.props.handleChangeFeedback(_this2.props.sessionItem.id, _this2.props.item.id, { graderFeedback: _this2.state.graderFeedback.toJS() }); _this2.closeFeedbackEdit(); }); (0, _defineProperty2["default"])(_this2, "updateFeedbackEdit", function (e, _ref) { var editorContent = _ref.editorContent; _this2.setState({ graderFeedback: (0, _immutable.Map)({ content: editorContent }) }); }); // ============= // HANDLERS // ============= (0, _defineProperty2["default"])(_this2, "setActiveItem", function () { if (_this2.props.gradeByQuestionEnabled) { _this2.props.setActiveItem(_this2.props.item.id); } }); (0, _defineProperty2["default"])(_this2, "handleRegradingEditModeToggle", function () { _this2.props.toggleRegradingEditMode(_this2.props.regradingKey); }); (0, _defineProperty2["default"])(_this2, "handleRegradingOnCancel", function (sessionItemId) { _this2.clearValidationErrorsFromApi(_quizCommon.CLEAR_ALL_INPUT_VALIDATION_ERRORS); _this2._timeouts = _this2._timeouts.concat(setTimeout(function () { var _this2$gradingBar2; return (_this2$gradingBar2 = _this2.gradingBar) === null || _this2$gradingBar2 === void 0 || (_this2$gradingBar2 = _this2$gradingBar2.getWrappedInstance()) === null || _this2$gradingBar2 === void 0 ? void 0 : _this2$gradingBar2.focusRegradeButton(); })); }); (0, _defineProperty2["default"])(_this2, "handleGradingBarRef", function (node) { _this2.gradingBar = node; }); (0, _defineProperty2["default"])(_this2, "handleValidationErrorsFromApi", function (errors) { _this2.setState({ validationErrorsFromApi: errors }); }); (0, _defineProperty2["default"])(_this2, "clearValidationErrorsFromApi", function (inputId) { if (inputId === _quizCommon.CLEAR_ALL_INPUT_VALIDATION_ERRORS) { _this2.setState({ validationErrorsFromApi: {} }); } if (_this2.state.validationErrorsFromApi[inputId]) { var newErrors = Object.assign({}, _this2.state.validationErrorsFromApi); delete newErrors[inputId]; _this2.setState({ validationErrorsFromApi: newErrors }); } }); // ============= // RENDERING // ============= (0, _defineProperty2["default"])(_this2, "renderRegradeOverride", function (sessionItem, item) { return (0, _emotion.jsx)(_RegradeOverride["default"], { displayPosition: sessionItem.position, guid: sessionItem.id, onCancel: _this2.handleRegradingOnCancel, itemId: item.id, quizSessionId: _this2.props.quizSessionId, sessionItem: sessionItem, validationErrorsFromApi: _this2.state.validationErrorsFromApi, handleValidationErrorsFromApi: _this2.handleValidationErrorsFromApi, clearValidationErrorsFromApi: _this2.clearValidationErrorsFromApi }); }); return _this2; } (0, _inherits2["default"])(SessionItemResultWrapper, _Component); return (0, _createClass2["default"])(SessionItemResultWrapper, [{ key: "componentDidMount", value: function componentDidMount() { this.props.makeStyles(); } }, { key: "componentDidUpdate", value: function componentDidUpdate() { this.props.makeStyles(); } }, { key: "componentWillUnmount", value: function componentWillUnmount() { this._timeouts.forEach(clearTimeout); } }, { key: "isAutogradeable", value: function isAutogradeable() { var notAutogradeableTypes = ['essay', 'file-upload']; return !notAutogradeableTypes.includes(this.props.item.getInteractionType().slug); } }, { key: "isSubjective", value: function isSubjective() { return this.props.item.getInteractionType().isSubjective; } }, { key: "renderResult", value: function renderResult(sessionItem, item) { var _this$props = this.props, handleChangeGradeStatus = _this$props.handleChangeGradeStatus, handleChangePoints = _this$props.handleChangePoints, itemResultsModifications = _this$props.itemResultsModifications, sessionItemResult = _this$props.sessionItemResult, shouldRenderTopBorder = _this$props.shouldRenderTopBorder; return (0, _emotion.jsx)("div", { css: this.props.styles.root, "data-automation": "sdk-grading-result-wrapper", tabIndex: "-1", onFocus: this.setActiveItem }, (0, _emotion.jsx)("div", { css: this.props.styles.result }, (0, _emotion.jsx)(_quizCore.SessionItemResultView, { appContainer: this.props.appContainer, editGraderFeedback: this.startFeedbackEdit, hideGraderFeedback: this.props.isEditing, item: item, sessionItem: sessionItem, sessionItemResult: sessionItemResult, shouldRenderTopBorder: shouldRenderTopBorder })), (0, _emotion.jsx)("div", { css: this.props.styles.gradingBar }, (0, _emotion.jsx)(_GradingBar["default"], { appContainer: this.props.appContainer, ref: this.handleGradingBarRef, cancelFeedbackEdit: this.closeFeedbackEdit, graderFeedback: this.state.graderFeedback, handleChangeGradeStatus: handleChangeGradeStatus, handleChangePoints: handleChangePoints, isAutogradeable: this.isAutogradeable(), isEditing: this.props.isEditing, isSubjective: this.isSubjective(), itemResultsModifications: itemResultsModifications, regradeToggleAction: this.handleRegradingEditModeToggle, renderUpdateButton: this.props.renderUpdateButton, sessionItem: sessionItem, sessionItemResult: sessionItemResult, startFeedbackEdit: this.startFeedbackEdit, submitFeedbackEdit: this.submitFeedbackEdit, updateFeedbackEdit: this.updateFeedbackEdit }))); } }, { key: "render", value: function render() { var _this$props2 = this.props, sessionItem = _this$props2.sessionItem, item = _this$props2.item; if (this.props.isRegrading && (0, _quizCore.featureOn)('regrading_from_speedgrader')) { return this.renderRegradeOverride(sessionItem, item); } else { return this.renderResult(sessionItem, item); } } }]); }(_react.Component), (0, _defineProperty2["default"])(_SessionItemResultWrapper, "displayName", 'SessionItemResultWrapper'), (0, _defineProperty2["default"])(_SessionItemResultWrapper, "componentId", "Quizzes".concat(_SessionItemResultWrapper.displayName)), (0, _defineProperty2["default"])(_SessionItemResultWrapper, "propTypes", { activeItemId: _propTypes["default"].string, appContainer: _quizCore.CustomPropTypes.selectors.isRequired, handleChangeFeedback: _propTypes["default"].func.isRequired, handleChangeGradeStatus: _propTypes["default"].func.isRequired, handleChangePoints: _propTypes["default"].func.isRequired, gradeByQuestionEnabled: _propTypes["default"].bool, graderFeedback: _reactImmutableProptypes["default"].map.isRequired, isEditing: _propTypes["default"].bool.isRequired, isRegrading: _propTypes["default"].bool.isRequired, item: _reactImmutableProptypes["default"].record.isRequired, itemResultsModifications: _reactImmutableProptypes["default"].map.isRequired, quizSessionId: _propTypes["default"].string.isRequired, regradingKey: _propTypes["default"].string.isRequired, renderUpdateButton: _propTypes["default"].func.isRequired, sessionItem: _reactImmutableProptypes["default"].record.isRequired, sessionItemResult: _reactImmutableProptypes["default"].record.isRequired, setActiveItem: _propTypes["default"].func.isRequired, shouldRenderTopBorder: _propTypes["default"].bool.isRequired, switchOffEditing: _propTypes["default"].func.isRequired, switchOnEditing: _propTypes["default"].func.isRequired, toggleRegradingEditMode: _propTypes["default"].func.isRequired, makeStyles: _propTypes["default"].func, styles: _propTypes["default"].object }), (0, _defineProperty2["default"])(_SessionItemResultWrapper, "defaultProps", { activeItemId: null, gradeByQuestionEnabled: false }), _SessionItemResultWrapper)) || _class); var _default = exports["default"] = SessionItemResultWrapper;