@instructure/quiz-grading
Version:
The Quiz React SDK by Instructure Inc.
251 lines (250 loc) • 12.1 kB
JavaScript
;
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;