UNPKG

@instructure/quiz-interactions

Version:

A React UI component Library for quiz interaction types.

216 lines (214 loc) • 8.22 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); Object.defineProperty(exports, "__esModule", { value: true }); exports["default"] = void 0; var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck")); var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass")); var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty")); var _immutabilityHelper = _interopRequireDefault(require("immutability-helper")); var _findIndex = _interopRequireDefault(require("lodash/findIndex")); var _omit = _interopRequireDefault(require("lodash/omit")); var _without = _interopRequireDefault(require("lodash/without")); var CategorizationPresenter = exports["default"] = /*#__PURE__*/function () { function CategorizationPresenter(props) { var _this = this; (0, _classCallCheck2["default"])(this, CategorizationPresenter); // =========== // ACTIONS - CATEGORIES // =========== (0, _defineProperty2["default"])(this, "onCategoryInputChange", function (itemId, e) { var categories = (0, _immutabilityHelper["default"])(_this.props.interactionData.categories, (0, _defineProperty2["default"])({}, itemId, { itemBody: { $set: e.target.value } })); _this.updateInteractionData({ categories: categories }); }); (0, _defineProperty2["default"])(this, "onCreateCategory", function () { var newItemId = _this.props.newId(); var newItem = { id: newItemId, itemBody: '' }; var newCategories = (0, _immutabilityHelper["default"])(_this.props.interactionData.categories, (0, _defineProperty2["default"])({}, newItemId, { $set: newItem })); var newCategoryOrder = (0, _immutabilityHelper["default"])(_this.getCategoryOrder(), { $push: [newItemId] }); var newCategoryScoringData = { id: newItemId, scoringAlgorithm: 'AllOrNothing', scoringData: { value: [] } }; var interactionData = (0, _immutabilityHelper["default"])(_this.props.interactionData, { categories: { $set: newCategories }, categoryOrder: { $set: newCategoryOrder } }); var scoringData = (0, _immutabilityHelper["default"])(_this.props.scoringData, { value: { $push: [newCategoryScoringData] } }); _this.props.changeItemState({ interactionData: interactionData, scoringData: scoringData }); }); (0, _defineProperty2["default"])(this, "onRemoveCategory", function (categoryId) { var newCategories = (0, _omit["default"])(_this.props.interactionData.categories, categoryId); var newCategoryOrder = _this.getCategoryOrder().filter(function (c) { return c !== categoryId; }); var newDistractors = (0, _omit["default"])(_this.props.interactionData.distractors, _this.props.scoringData.value.filter(function (item) { return item.id === categoryId; })[0].scoringData.value); var newScoringData = _this.props.scoringData.value.filter(function (item) { return item.id !== categoryId; }); var interactionData = (0, _immutabilityHelper["default"])(_this.props.interactionData, { categoryOrder: { $set: newCategoryOrder }, categories: { $set: newCategories }, distractors: { $set: newDistractors } }); var scoringData = (0, _immutabilityHelper["default"])(_this.props.scoringData, { value: { $set: newScoringData } }); _this.props.changeItemState({ interactionData: interactionData, scoringData: scoringData }); }); // =========== // ACTIONS - ANSWERS // =========== (0, _defineProperty2["default"])(this, "onCreateAnswer", function (categoryId) { var newItemId = _this.props.newId(); var newItem = { id: newItemId, itemBody: '' }; var newDistractors = (0, _immutabilityHelper["default"])(_this.props.interactionData.distractors, (0, _defineProperty2["default"])({}, newItemId, { $set: newItem })); var scoringDataCategoryIndex = (0, _findIndex["default"])(_this.props.scoringData.value, function (item) { return item.id === categoryId; }); var interactionData = (0, _immutabilityHelper["default"])(_this.props.interactionData, { distractors: { $set: newDistractors } }); var scoringData = (0, _immutabilityHelper["default"])(_this.props.scoringData, { value: (0, _defineProperty2["default"])({}, scoringDataCategoryIndex, { scoringData: { value: { // because kinesis does not save empty arrays well, // we need to guard against this being null $apply: function $apply(answersList) { return (answersList || []).concat([newItemId]); } } } }) }); _this.props.changeItemState({ interactionData: interactionData, scoringData: scoringData }); }); (0, _defineProperty2["default"])(this, "onRemoveAnswer", function (itemId, categoryId) { var newDistractors = (0, _omit["default"])(_this.props.interactionData.distractors, itemId); var scoringDataCategoryIndex = (0, _findIndex["default"])(_this.props.scoringData.value, function (item) { return item.id === categoryId; }); var scoringDataCategory = _this.props.scoringData.value[scoringDataCategoryIndex]; var newCategScoringDataValues = (0, _without["default"])(scoringDataCategory.scoringData.value, itemId); var interactionData = (0, _immutabilityHelper["default"])(_this.props.interactionData, { distractors: { $set: newDistractors } }); var scoringData = (0, _immutabilityHelper["default"])(_this.props.scoringData, { value: (0, _defineProperty2["default"])({}, scoringDataCategoryIndex, { scoringData: { value: { $set: newCategScoringDataValues } } }) }); _this.props.changeItemState({ interactionData: interactionData, scoringData: scoringData }); }); // =========== // ACTIONS - DISTRACTORS // =========== (0, _defineProperty2["default"])(this, "onDistractorInputChange", function (itemId, e) { var distractors = (0, _immutabilityHelper["default"])(_this.props.interactionData.distractors, (0, _defineProperty2["default"])({}, itemId, { itemBody: { $set: e.target.value } })); _this.updateInteractionData({ distractors: distractors }); }); (0, _defineProperty2["default"])(this, "onRemoveDistractor", function (itemId) { var newList = (0, _omit["default"])(_this.props.interactionData.distractors, itemId); var newInteractionData = (0, _immutabilityHelper["default"])(_this.props.interactionData, { distractors: { $set: newList } }); _this.props.changeItemState({ interactionData: newInteractionData }); }); this.props = props; } return (0, _createClass2["default"])(CategorizationPresenter, [{ key: "UNSAFE_componentWillReceiveProps", value: function UNSAFE_componentWillReceiveProps(props) { this.props = props; } // ============= // HELPERS // ============= }, { key: "getCategoryOrder", value: function getCategoryOrder() { // This is to protect against quizzes which were // created before categoryOrder was introduced var intData = this.props.interactionData; return intData.categoryOrder || Object.keys(intData.categories); } }, { key: "updateInteractionData", value: function updateInteractionData(updates) { this.props.changeItemState({ interactionData: Object.assign({}, this.props.interactionData || {}, updates) }); } }]); }();