UNPKG

quiz-interactions

Version:

A React UI component Library for quiz interaction types.

174 lines (140 loc) 6.59 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); Object.defineProperty(exports, "__esModule", { value: true }); exports.default = exports.variableRules = 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 _assertThisInitialized2 = _interopRequireDefault(require("@babel/runtime/helpers/assertThisInitialized")); var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits")); var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf")); var _get2 = _interopRequireDefault(require("@babel/runtime/helpers/get")); var _react = _interopRequireDefault(require("react")); var _instructureValidations = require("instructure-validations"); var _quizScientificNotation = require("@instructure/quiz-scientific-notation"); var _uiElements = require("@instructure/ui-elements"); var _interaction_slugs = require("../../interaction_slugs"); var _InteractionType2 = _interopRequireDefault(require("../InteractionType")); var _formula = require("../../util/formula"); var _validationHelpers = require("../../util/validationHelpers"); var _formatMessage = _interopRequireDefault(require("@instructure/quiz-i18n/lib/format-message")); var hasVariables = function hasVariables(itemBody) { if ((0, _formula.variablesFromItemBody)(itemBody).length === 0) { return (0, _formatMessage.default)('Item body must contain variables'); } }; var formulaSyntax = function formulaSyntax(formula, options) { var variables = (0, _formula.variablesFromItemBody)(options.itemBody); return (0, _formula.formulaSyntaxError)(variables, formula); }; (0, _instructureValidations.addValidator)('hasVariables', hasVariables); (0, _instructureValidations.addValidator)('formulaSyntax', formulaSyntax); var variableRules = function variableRules(variable) { var minRule = (0, _instructureValidations.rule)('numeric', { message: (0, _validationHelpers.numericMessage)((0, _formatMessage.default)('Min')) }); var maxRule = (0, _instructureValidations.rule)('numeric', { message: (0, _validationHelpers.numericMessage)((0, _formatMessage.default)('Max')), min: variable.min, minMessage: (0, _formatMessage.default)('Must be larger than minimum value') }); var scientificNotationRule = (0, _instructureValidations.rule)('scientificNotation', { message: (0, _formatMessage.default)('Must be in scientific notation') }); // Don't allow just min or max in scientific notation: it's both, or neither var min = (0, _quizScientificNotation.isScientificNotation)(variable.max) ? [scientificNotationRule, minRule] : [minRule]; var max = (0, _quizScientificNotation.isScientificNotation)(variable.min) ? [scientificNotationRule, maxRule] : [maxRule]; var precision = [(0, _instructureValidations.rule)('numeric', { decMessage: (0, _formatMessage.default)('Min must have at least the same number of decimals as precision'), type: 'decimals', value: variable.min }), (0, _instructureValidations.rule)('numeric', { decMessage: (0, _formatMessage.default)('Max must have at least the same number of decimals as precision'), type: 'decimals', value: variable.max })]; return { min: min, max: max, precision: precision }; }; exports.variableRules = variableRules; var FormulaInteractionType = /*#__PURE__*/ function (_InteractionType) { (0, _inherits2.default)(FormulaInteractionType, _InteractionType); function FormulaInteractionType(obj) { var _this; (0, _classCallCheck2.default)(this, FormulaInteractionType); _this = (0, _possibleConstructorReturn2.default)(this, (0, _getPrototypeOf2.default)(FormulaInteractionType).call(this)); _this.slug = _interaction_slugs.FORMULA_SLUG; _this.translatedName = (0, _formatMessage.default)('Formula'); _this.getDefaultScoringData = function (intData) { return { value: { answerCount: '200', formula: '', generatedSolutions: [], variables: [], // TODO: set this from the UI, rather than being stuck with the default numeric: { type: 'marginOfError', marginType: 'absolute', margin: '0' } } }; }; _this.getDefaultInteractionData = function () { return {}; }; _this.getRenderedResponse = function (responseValue) { return _react.default.createElement(_uiElements.Text, { color: "primary" }, responseValue); }; (0, _get2.default)((0, _getPrototypeOf2.default)(FormulaInteractionType.prototype), "initializeProps", (0, _assertThisInitialized2.default)(_this)).call((0, _assertThisInitialized2.default)(_this), obj); return _this; } (0, _createClass2.default)(FormulaInteractionType, [{ key: "getDefaultUserResponse", value: function getDefaultUserResponse() { return { value: '' }; } }]); return FormulaInteractionType; }(_InteractionType2.default); exports.default = FormulaInteractionType; FormulaInteractionType.validations = function () { var obj = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : {}; var numeric = obj.scoringData.value.numeric && obj.scoringData.value.numeric.type === 'marginOfError' ? { margin: [(0, _instructureValidations.rule)('numeric', { message: (0, _validationHelpers.numericMessage)((0, _formatMessage.default)('Margin')), min: 0 })] } : []; return { itemBody: [(0, _instructureValidations.rule)('presence', { message: (0, _formatMessage.default)('Item body cannot be blank') }), (0, _instructureValidations.rule)('hasVariables')], scoringData: { value: { variables: [(0, _instructureValidations.each)(variableRules)], formula: [(0, _instructureValidations.rule)('presence', { message: (0, _formatMessage.default)('Formula cannot be blank') }), (0, _instructureValidations.rule)('formulaSyntax', { itemBody: obj.itemBody })], numeric: numeric, generatedSolutions: [(0, _instructureValidations.onSelf)((0, _instructureValidations.rule)('listSize', { min: 1, minMessage: (0, _formatMessage.default)('Must have at least one solution') }))] } } }; };