@instructure/quiz-interactions
Version:
A React UI component Library for quiz interaction types.
62 lines (61 loc) • 2.27 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 _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;
}
}]);
}();