@instructure/quiz-grading
Version:
The Quiz React SDK by Instructure Inc.
164 lines • 7.13 kB
JavaScript
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, _SessionItemResultList;
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 partial from 'lodash/partial';
import ImmutablePropTypes from 'react-immutable-proptypes';
import { jsx } from '@instructure/emotion';
import { View } from '@instructure/ui-view';
import { IconArrowOpenEndLine } from '@instructure/ui-icons';
import { ResultStimulus, generateDisplayPositions } from '@instructure/quiz-core';
import { Flex, GRADE_BY_QUESTION_NEXT, withStyleOverrides } from '@instructure/quiz-common';
import SessionItemResultWrapper from '../SessionItemResultWrapper';
import generateStyle from './styles';
import t from '@instructure/quiz-i18n/es/format-message';
export var SessionItemResultList = (_dec = withStyleOverrides(generateStyle, null), _dec(_class = (_SessionItemResultList = /*#__PURE__*/function (_Component) {
function SessionItemResultList() {
var _this2;
_classCallCheck(this, SessionItemResultList);
for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
args[_key] = arguments[_key];
}
_this2 = _callSuper(this, SessionItemResultList, [].concat(args));
_defineProperty(_this2, "nextStudent", function () {
_this2.props.postToParent({
subject: GRADE_BY_QUESTION_NEXT
});
});
_defineProperty(_this2, "renderSessionItemResultWrapper", function (sessionItem, shouldRenderTopBorder) {
var _this2$props = _this2.props,
handleChangePoints = _this2$props.handleChangePoints,
handleChangeFeedback = _this2$props.handleChangeFeedback,
handleChangeGradeStatus = _this2$props.handleChangeGradeStatus,
quizSessionId = _this2$props.quizSessionId,
regradingIdentifier = _this2$props.regradingIdentifier,
renderUpdateButton = _this2$props.renderUpdateButton;
var result = sessionItem.sessionItemResult;
var item = sessionItem.getItem();
return jsx(SessionItemResultWrapper, {
handleChangeFeedback: handleChangeFeedback,
handleChangeGradeStatus: partial(handleChangeGradeStatus, result.id, item.id),
handleChangePoints: partial(handleChangePoints, result.id, item.id),
item: item,
key: sessionItem.id,
quizSessionId: quizSessionId,
isRegrading: sessionItem.id === regradingIdentifier,
regradingKey: sessionItem.id,
renderUpdateButton: renderUpdateButton,
sessionItem: sessionItem,
shouldRenderTopBorder: shouldRenderTopBorder
});
});
return _this2;
}
_inherits(SessionItemResultList, _Component);
return _createClass(SessionItemResultList, [{
key: "componentDidMount",
value: function componentDidMount() {
this.scrollToActiveItem();
}
}, {
key: "componentDidUpdate",
value: function componentDidUpdate(prevProps) {
if (prevProps.quizSessionId !== this.props.quizSessionId) {
this.scrollToActiveItem();
}
}
}, {
key: "scrollToActiveItem",
value: function scrollToActiveItem() {
var _this$props = this.props,
activeItemId = _this$props.activeItemId,
gradeByQuestionEnabled = _this$props.gradeByQuestionEnabled,
sessionItems = _this$props.sessionItems;
if (gradeByQuestionEnabled && activeItemId) {
var sessionItem = sessionItems.find(function (si) {
return si.itemRecord.id === activeItemId;
});
if (sessionItem) {
this.props.scrollToItem(sessionItem.id);
} else {
var continueText = jsx(Flex, {
alignItems: "center"
}, jsx(View, {
margin: "0 x-small 0 0"
}, t('Next Student')), jsx(IconArrowOpenEndLine, null));
this.props.withConfirm(this.nextStudent, {
continueText: continueText,
text: t('The active student does not have this question. Please use the Next Student button to proceed.'),
title: t('Question Not Available')
});
}
}
}
}, {
key: "renderItem",
value: function renderItem(sessionItem) {
if (sessionItem.stimulus) {
return jsx(ResultStimulus, {
key: sessionItem.id,
stimulus: sessionItem.stimulusRecord,
renderItem: this.renderSessionItemResultWrapper,
sessionItem: sessionItem
// This prop is necessary to rerender the child items when we enter regrading mode
,
regradingIdentifier: this.props.regradingIdentifier
});
}
return this.renderSessionItemResultWrapper(sessionItem, true);
}
}, {
key: "renderItems",
value: function renderItems() {
var _this3 = this;
return generateDisplayPositions(this.props.sessionItems).map(function (si) {
return _this3.renderItem(si.record);
});
}
}, {
key: "render",
value: function render() {
return jsx("div", {
css: this.props.styles.root
}, this.renderItems());
}
}]);
}(Component), _defineProperty(_SessionItemResultList, "displayName", 'SessionItemResultList'), _defineProperty(_SessionItemResultList, "componentId", "Quizzes".concat(_SessionItemResultList.displayName)), _defineProperty(_SessionItemResultList, "propTypes", {
activeItemId: PropTypes.string,
gradeByQuestionEnabled: PropTypes.bool,
handleChangePoints: PropTypes.func.isRequired,
handleChangeFeedback: PropTypes.func.isRequired,
handleChangeGradeStatus: PropTypes.func.isRequired,
postToParent: PropTypes.func.isRequired,
quizSessionId: PropTypes.string.isRequired,
regradingIdentifier: PropTypes.string.isRequired,
renderUpdateButton: PropTypes.func.isRequired,
scrollToItem: PropTypes.func.isRequired,
sessionItems: ImmutablePropTypes.list.isRequired,
withConfirm: PropTypes.func.isRequired,
styles: PropTypes.object
}), _defineProperty(_SessionItemResultList, "defaultProps", {
activeItemId: null,
gradeByQuestionEnabled: false
}), _SessionItemResultList)) || _class);
export default SessionItemResultList;