UNPKG

@instructure/quiz-interactions

Version:

A React UI component Library for quiz interaction types.

62 lines (61 loc) 2.27 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 _util = require("./util"); var _util2 = require("../common/util"); var GenerateSolutionsService = exports["default"] = /*#__PURE__*/function () { function GenerateSolutionsService(_ref) { var onStart = _ref.onStart, onSuccess = _ref.onSuccess, onFailure = _ref.onFailure, onCancel = _ref.onCancel; (0, _classCallCheck2["default"])(this, GenerateSolutionsService); this._onStart = onStart; this._onSuccess = onSuccess; this._onFailure = onFailure; this._onCancel = onCancel; this._promise = Promise.resolve(); } return (0, _createClass2["default"])(GenerateSolutionsService, [{ key: "start", value: function start(numSolutions, variables, formula, precision) { var _this = this; var scientificNotation = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : false; this._onStart(); var foundSolutions = []; var promises = []; for (var i = 0; i < numSolutions; i++) { promises.push((0, _util2.loadMathjs)().then(function () { var solution = (0, _util.searchForFormulaSolution)(variables, formula, foundSolutions, precision, scientificNotation); if (solution !== null) { foundSolutions.push(solution); } })); } var promise = Promise.all(promises).then(function () { if (!_this.__promiseIsCurrent(promise)) { return; } foundSolutions.length === numSolutions ? _this._onSuccess(foundSolutions) : _this._onFailure(foundSolutions); }); this._promise = promise; return promise; } }, { key: "cancel", value: function cancel() { this._promise = Promise.resolve(); this._onCancel(); } }, { key: "__promiseIsCurrent", value: function __promiseIsCurrent(promise) { return promise === this._promise; } }]); }();