@instructure/quiz-interactions
Version:
A React UI component Library for quiz interaction types.
216 lines (214 loc) • 8.22 kB
JavaScript
;
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)
});
}
}]);
}();