UNPKG

@instructure/quiz-grading

Version:

The Quiz React SDK by Instructure Inc.

164 lines • 7.13 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, _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;