@instructure/quiz-core 17.63.1-rc.1 → 17.63.1-rc.13
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/es/building/api/qtiImports.js +16 -10
- package/es/building/components/QTIImportModal/index.js +1 -1
- package/es/common/actions/analyses.js +7 -1
- package/es/common/components/shared/spinner/Spinner.js +33 -18
- package/es/common/components/shared/spinner/theme.js +2 -5
- package/es/common/reducers/analyses.js +10 -8
- package/es/common/selectors/analyses.js +3 -0
- package/es/reporting/components/resources/NewQuizAndItemAnalysis/AnswerSummaryTable/ChoiceInfo/presenter.js +14 -7
- package/es/reporting/components/resources/NewQuizAndItemAnalysis/AnswerSummaryTable/presenter.js +4 -0
- package/es/reporting/components/resources/NewQuizAndItemAnalysis/NewItemAnalysis/presenter.js +129 -143
- package/es/reporting/components/resources/NewQuizAndItemAnalysis/NewItemAnalysis/theme.js +2 -1
- package/es/reporting/components/resources/NewQuizAndItemAnalysis/NewQuizAnalysis/presenter.js +9 -8
- package/es/reporting/components/resources/NewQuizAndItemAnalysis/NewQuizAnalysis/theme.js +2 -1
- package/es/reporting/components/resources/NewQuizAndItemAnalysis/ReportCard/presenter.js +85 -30
- package/es/reporting/components/resources/NewQuizAndItemAnalysis/ReportCard/theme.js +4 -2
- package/es/reporting/components/resources/NewQuizAndItemAnalysis/errorMessages.js +3 -0
- package/es/reporting/components/resources/NewQuizAndItemAnalysis/fetchReports.js +15 -12
- package/es/reporting/components/resources/NewQuizAndItemAnalysis/fetchReportsStatus.js +45 -0
- package/es/reporting/components/resources/NewQuizAndItemAnalysis/generateReports.js +52 -0
- package/es/reporting/components/resources/NewQuizAndItemAnalysis/withAnalysisState.js +10 -4
- package/es/reporting/components/resources/NewQuizAndItemAnalysis/withAnalysisStatePresenter.js +73 -18
- package/lib/building/api/qtiImports.js +16 -10
- package/lib/building/components/QTIImportModal/index.js +1 -1
- package/lib/common/actions/analyses.js +8 -0
- package/lib/common/components/shared/spinner/Spinner.js +34 -19
- package/lib/common/components/shared/spinner/theme.js +2 -5
- package/lib/common/reducers/analyses.js +13 -8
- package/lib/common/selectors/analyses.js +7 -1
- package/lib/reporting/components/resources/NewQuizAndItemAnalysis/AnswerSummaryTable/ChoiceInfo/presenter.js +14 -6
- package/lib/reporting/components/resources/NewQuizAndItemAnalysis/AnswerSummaryTable/presenter.js +5 -0
- package/lib/reporting/components/resources/NewQuizAndItemAnalysis/NewItemAnalysis/presenter.js +132 -144
- package/lib/reporting/components/resources/NewQuizAndItemAnalysis/NewItemAnalysis/theme.js +2 -1
- package/lib/reporting/components/resources/NewQuizAndItemAnalysis/NewQuizAnalysis/presenter.js +9 -8
- package/lib/reporting/components/resources/NewQuizAndItemAnalysis/NewQuizAnalysis/theme.js +2 -1
- package/lib/reporting/components/resources/NewQuizAndItemAnalysis/ReportCard/presenter.js +84 -29
- package/lib/reporting/components/resources/NewQuizAndItemAnalysis/ReportCard/theme.js +4 -2
- package/lib/reporting/components/resources/NewQuizAndItemAnalysis/errorMessages.js +8 -2
- package/lib/reporting/components/resources/NewQuizAndItemAnalysis/fetchReports.js +15 -12
- package/lib/reporting/components/resources/NewQuizAndItemAnalysis/fetchReportsStatus.js +59 -0
- package/lib/reporting/components/resources/NewQuizAndItemAnalysis/generateReports.js +67 -0
- package/lib/reporting/components/resources/NewQuizAndItemAnalysis/withAnalysisState.js +10 -2
- package/lib/reporting/components/resources/NewQuizAndItemAnalysis/withAnalysisStatePresenter.js +74 -17
- package/package.json +9 -9
|
@@ -4,13 +4,13 @@ import _asyncToGenerator from "@babel/runtime/helpers/esm/asyncToGenerator";
|
|
|
4
4
|
import { getFailedToFetchReports, getLastReportGenerationFailed } from "./errorMessages.js";
|
|
5
5
|
export var fetchReports = /*#__PURE__*/function () {
|
|
6
6
|
var _ref2 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee(_ref) {
|
|
7
|
-
var activeQuizId, setFetchInProgress, setQuizAnalysis, setItemAnalyses, setAnalysisError, setGenerationInProgress, addError, fetchQuizAnalysis, fetchItemAnalyses, _yield$Promise$all, _yield$Promise$all2, quizAnalysis, itemAnalyses;
|
|
7
|
+
var activeQuizId, setFetchInProgress, setQuizAnalysis, setItemAnalyses, setStatusPollingInProgress, setAnalysisError, setGenerationInProgress, addError, fetchQuizAnalysis, fetchItemAnalyses, _yield$Promise$all, _yield$Promise$all2, quizAnalysis, itemAnalyses, areAnalysesInProgress, areAnalysesFailed;
|
|
8
8
|
|
|
9
9
|
return _regeneratorRuntime.wrap(function _callee$(_context) {
|
|
10
10
|
while (1) {
|
|
11
11
|
switch (_context.prev = _context.next) {
|
|
12
12
|
case 0:
|
|
13
|
-
activeQuizId = _ref.activeQuizId, setFetchInProgress = _ref.setFetchInProgress, setQuizAnalysis = _ref.setQuizAnalysis, setItemAnalyses = _ref.setItemAnalyses, setAnalysisError = _ref.setAnalysisError, setGenerationInProgress = _ref.setGenerationInProgress, addError = _ref.addError, fetchQuizAnalysis = _ref.fetchQuizAnalysis, fetchItemAnalyses = _ref.fetchItemAnalyses;
|
|
13
|
+
activeQuizId = _ref.activeQuizId, setFetchInProgress = _ref.setFetchInProgress, setQuizAnalysis = _ref.setQuizAnalysis, setItemAnalyses = _ref.setItemAnalyses, setStatusPollingInProgress = _ref.setStatusPollingInProgress, setAnalysisError = _ref.setAnalysisError, setGenerationInProgress = _ref.setGenerationInProgress, addError = _ref.addError, fetchQuizAnalysis = _ref.fetchQuizAnalysis, fetchItemAnalyses = _ref.fetchItemAnalyses;
|
|
14
14
|
_context.prev = 1;
|
|
15
15
|
setFetchInProgress(true);
|
|
16
16
|
_context.next = 5;
|
|
@@ -21,33 +21,36 @@ export var fetchReports = /*#__PURE__*/function () {
|
|
|
21
21
|
_yield$Promise$all2 = _slicedToArray(_yield$Promise$all, 2);
|
|
22
22
|
quizAnalysis = _yield$Promise$all2[0];
|
|
23
23
|
itemAnalyses = _yield$Promise$all2[1];
|
|
24
|
+
areAnalysesInProgress = quizAnalysis.new_analysis_in_progress || itemAnalyses.new_analysis_in_progress;
|
|
25
|
+
areAnalysesFailed = quizAnalysis.last_analysis_failed || itemAnalyses.last_analysis_failed;
|
|
26
|
+
setGenerationInProgress(areAnalysesInProgress);
|
|
27
|
+
setStatusPollingInProgress(areAnalysesInProgress);
|
|
24
28
|
setQuizAnalysis(quizAnalysis.last_successful_analysis);
|
|
25
29
|
setItemAnalyses(itemAnalyses.last_successful_analysis);
|
|
26
|
-
setGenerationInProgress(quizAnalysis.new_analysis_in_progress || itemAnalyses.new_analysis_in_progress);
|
|
27
30
|
|
|
28
|
-
if (
|
|
31
|
+
if (areAnalysesFailed) {
|
|
29
32
|
setAnalysisError(getLastReportGenerationFailed());
|
|
30
33
|
}
|
|
31
34
|
|
|
32
|
-
_context.next =
|
|
35
|
+
_context.next = 21;
|
|
33
36
|
break;
|
|
34
37
|
|
|
35
|
-
case
|
|
36
|
-
_context.prev =
|
|
38
|
+
case 18:
|
|
39
|
+
_context.prev = 18;
|
|
37
40
|
_context.t0 = _context["catch"](1);
|
|
38
41
|
addError(getFailedToFetchReports());
|
|
39
42
|
|
|
40
|
-
case
|
|
41
|
-
_context.prev =
|
|
43
|
+
case 21:
|
|
44
|
+
_context.prev = 21;
|
|
42
45
|
setFetchInProgress(false);
|
|
43
|
-
return _context.finish(
|
|
46
|
+
return _context.finish(21);
|
|
44
47
|
|
|
45
|
-
case
|
|
48
|
+
case 24:
|
|
46
49
|
case "end":
|
|
47
50
|
return _context.stop();
|
|
48
51
|
}
|
|
49
52
|
}
|
|
50
|
-
}, _callee, null, [[1,
|
|
53
|
+
}, _callee, null, [[1, 18, 21, 24]]);
|
|
51
54
|
}));
|
|
52
55
|
|
|
53
56
|
return function fetchReports(_x) {
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import _regeneratorRuntime from "@babel/runtime/regenerator";
|
|
2
|
+
import _asyncToGenerator from "@babel/runtime/helpers/esm/asyncToGenerator";
|
|
3
|
+
import { getFailedToFetchReports } from "./errorMessages.js";
|
|
4
|
+
export var fetchReportsStatus = /*#__PURE__*/function () {
|
|
5
|
+
var _ref2 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee(_ref) {
|
|
6
|
+
var activeQuizId, addError, fetchAnalysesStatus, instrumentedFetchReports, setStatusPollingInProgress, setGenerationInProgress, status, isReportGenerationReady;
|
|
7
|
+
return _regeneratorRuntime.wrap(function _callee$(_context) {
|
|
8
|
+
while (1) {
|
|
9
|
+
switch (_context.prev = _context.next) {
|
|
10
|
+
case 0:
|
|
11
|
+
activeQuizId = _ref.activeQuizId, addError = _ref.addError, fetchAnalysesStatus = _ref.fetchAnalysesStatus, instrumentedFetchReports = _ref.instrumentedFetchReports, setStatusPollingInProgress = _ref.setStatusPollingInProgress, setGenerationInProgress = _ref.setGenerationInProgress;
|
|
12
|
+
_context.prev = 1;
|
|
13
|
+
_context.next = 4;
|
|
14
|
+
return fetchAnalysesStatus(activeQuizId);
|
|
15
|
+
|
|
16
|
+
case 4:
|
|
17
|
+
status = _context.sent;
|
|
18
|
+
isReportGenerationReady = !status.quiz_analysis_in_progress && !status.item_analyses_in_progress;
|
|
19
|
+
|
|
20
|
+
if (isReportGenerationReady) {
|
|
21
|
+
instrumentedFetchReports();
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
_context.next = 14;
|
|
25
|
+
break;
|
|
26
|
+
|
|
27
|
+
case 9:
|
|
28
|
+
_context.prev = 9;
|
|
29
|
+
_context.t0 = _context["catch"](1);
|
|
30
|
+
addError(getFailedToFetchReports());
|
|
31
|
+
setStatusPollingInProgress(false);
|
|
32
|
+
setGenerationInProgress(false);
|
|
33
|
+
|
|
34
|
+
case 14:
|
|
35
|
+
case "end":
|
|
36
|
+
return _context.stop();
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
}, _callee, null, [[1, 9]]);
|
|
40
|
+
}));
|
|
41
|
+
|
|
42
|
+
return function fetchReportsStatus(_x) {
|
|
43
|
+
return _ref2.apply(this, arguments);
|
|
44
|
+
};
|
|
45
|
+
}();
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import _regeneratorRuntime from "@babel/runtime/regenerator";
|
|
2
|
+
import _asyncToGenerator from "@babel/runtime/helpers/esm/asyncToGenerator";
|
|
3
|
+
import { getReportGenerationFailure } from "./errorMessages.js";
|
|
4
|
+
export var generateReports = /*#__PURE__*/function () {
|
|
5
|
+
var _ref2 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee(_ref) {
|
|
6
|
+
var setGenerationInProgress, setStatusPollingInProgress, generateAnalysis, filter, addError, response;
|
|
7
|
+
return _regeneratorRuntime.wrap(function _callee$(_context) {
|
|
8
|
+
while (1) {
|
|
9
|
+
switch (_context.prev = _context.next) {
|
|
10
|
+
case 0:
|
|
11
|
+
setGenerationInProgress = _ref.setGenerationInProgress, setStatusPollingInProgress = _ref.setStatusPollingInProgress, generateAnalysis = _ref.generateAnalysis, filter = _ref.filter, addError = _ref.addError;
|
|
12
|
+
_context.prev = 1;
|
|
13
|
+
setGenerationInProgress(true);
|
|
14
|
+
_context.next = 5;
|
|
15
|
+
return generateAnalysis(filter);
|
|
16
|
+
|
|
17
|
+
case 5:
|
|
18
|
+
response = _context.sent;
|
|
19
|
+
|
|
20
|
+
if (response) {
|
|
21
|
+
_context.next = 10;
|
|
22
|
+
break;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
addError(getReportGenerationFailure());
|
|
26
|
+
setGenerationInProgress(false);
|
|
27
|
+
return _context.abrupt("return");
|
|
28
|
+
|
|
29
|
+
case 10:
|
|
30
|
+
setStatusPollingInProgress(true);
|
|
31
|
+
_context.next = 17;
|
|
32
|
+
break;
|
|
33
|
+
|
|
34
|
+
case 13:
|
|
35
|
+
_context.prev = 13;
|
|
36
|
+
_context.t0 = _context["catch"](1);
|
|
37
|
+
addError(getReportGenerationFailure());
|
|
38
|
+
setGenerationInProgress(false);
|
|
39
|
+
|
|
40
|
+
case 17:
|
|
41
|
+
case "end":
|
|
42
|
+
return _context.stop();
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
}, _callee, null, [[1, 13]]);
|
|
46
|
+
}));
|
|
47
|
+
|
|
48
|
+
return function generateReports(_x) {
|
|
49
|
+
return _ref2.apply(this, arguments);
|
|
50
|
+
};
|
|
51
|
+
}();
|
|
52
|
+
export default generateReports;
|
|
@@ -1,22 +1,27 @@
|
|
|
1
1
|
import { withAnalysisStatePresenter } from "./withAnalysisStatePresenter.js";
|
|
2
|
-
import { getQuizAnalysis, getItemAnalyses, getFetchInProgress, getGenerationInProgress, getAnalysisError } from "../../../../common/selectors/analyses.js";
|
|
3
|
-
import { setQuizAnalysis, setItemAnalyses, setFetchInProgress, setGenerationInProgress, setAnalysisError } from "../../../../common/actions/analyses.js";
|
|
2
|
+
import { getQuizAnalysis, getItemAnalyses, getFetchInProgress, getGenerationInProgress, getAnalysisError, getStatusPollingInProgress } from "../../../../common/selectors/analyses.js";
|
|
3
|
+
import { setQuizAnalysis, setItemAnalyses, setFetchInProgress, setGenerationInProgress, setAnalysisError, setStatusPollingInProgress } from "../../../../common/actions/analyses.js";
|
|
4
4
|
import { getQuizAnalysis as fetchQuizAnalysis } from "../../../api/getQuizAnalysis.js";
|
|
5
5
|
import { getItemAnalyses as fetchItemAnalyses } from "../../../api/getItemAnalyses.js";
|
|
6
|
+
import { getAnalysesStatus as fetchAnalysesStatus } from "../../../api/getAnalysesStatus.js";
|
|
6
7
|
import { connect } from "../../../../common/react-redux.js";
|
|
7
8
|
import { compose } from 'redux';
|
|
8
9
|
import { getActiveQuizId } from "../../../../common/selectors/quizzes.js";
|
|
9
10
|
import { addError } from "../../../../common/actions/alerts.js";
|
|
11
|
+
var DEFAULT_POLLING_INTERVAL = 3000;
|
|
10
12
|
export function mapStateToProps(state, ownProps) {
|
|
11
13
|
return {
|
|
12
14
|
quizAnalysis: getQuizAnalysis(state),
|
|
13
15
|
itemAnalyses: getItemAnalyses(state),
|
|
14
16
|
fetchInProgress: getFetchInProgress(state),
|
|
15
17
|
generationInProgress: getGenerationInProgress(state),
|
|
18
|
+
statusPollingInProgress: getStatusPollingInProgress(state),
|
|
16
19
|
analysisError: getAnalysisError(state),
|
|
17
20
|
activeQuizId: ownProps.activeQuizId || getActiveQuizId(state),
|
|
18
21
|
fetchQuizAnalysis: fetchQuizAnalysis,
|
|
19
|
-
fetchItemAnalyses: fetchItemAnalyses
|
|
22
|
+
fetchItemAnalyses: fetchItemAnalyses,
|
|
23
|
+
fetchAnalysesStatus: fetchAnalysesStatus,
|
|
24
|
+
pollingInterval: ownProps.pollingInterval || DEFAULT_POLLING_INTERVAL
|
|
20
25
|
};
|
|
21
26
|
}
|
|
22
27
|
var mapDispatchToProps = {
|
|
@@ -25,7 +30,8 @@ var mapDispatchToProps = {
|
|
|
25
30
|
setFetchInProgress: setFetchInProgress,
|
|
26
31
|
setGenerationInProgress: setGenerationInProgress,
|
|
27
32
|
setAnalysisError: setAnalysisError,
|
|
28
|
-
addError: addError
|
|
33
|
+
addError: addError,
|
|
34
|
+
setStatusPollingInProgress: setStatusPollingInProgress
|
|
29
35
|
};
|
|
30
36
|
export var withAnalysisState = compose(connect(mapStateToProps, mapDispatchToProps), withAnalysisStatePresenter);
|
|
31
37
|
export default withAnalysisState;
|
package/es/reporting/components/resources/NewQuizAndItemAnalysis/withAnalysisStatePresenter.js
CHANGED
|
@@ -1,10 +1,12 @@
|
|
|
1
1
|
import _regeneratorRuntime from "@babel/runtime/regenerator";
|
|
2
2
|
import _asyncToGenerator from "@babel/runtime/helpers/esm/asyncToGenerator";
|
|
3
3
|
import _objectWithoutProperties from "@babel/runtime/helpers/esm/objectWithoutProperties";
|
|
4
|
-
import React, { useEffect } from 'react';
|
|
4
|
+
import React, { useEffect, useRef } from 'react';
|
|
5
5
|
import PropTypes from 'prop-types';
|
|
6
6
|
import { itemAnalysisPropType, quizAnalysisPropType } from "./propTypes.js";
|
|
7
7
|
import { fetchReports } from "./fetchReports.js";
|
|
8
|
+
import { fetchReportsStatus } from "./fetchReportsStatus.js";
|
|
9
|
+
import { generateReports as triggerReportGeneration } from "./generateReports.js";
|
|
8
10
|
export var withAnalysisStatePresenter = function withAnalysisStatePresenter(OriginalComponent) {
|
|
9
11
|
var WithAnalysisStatePresenter = function WithAnalysisStatePresenter(_ref) {
|
|
10
12
|
var quizAnalysis = _ref.quizAnalysis,
|
|
@@ -19,22 +21,42 @@ export var withAnalysisStatePresenter = function withAnalysisStatePresenter(Orig
|
|
|
19
21
|
setGenerationInProgress = _ref.setGenerationInProgress,
|
|
20
22
|
setAnalysisError = _ref.setAnalysisError,
|
|
21
23
|
activeQuizId = _ref.activeQuizId,
|
|
22
|
-
|
|
24
|
+
generateAnalysis = _ref.generateAnalysis,
|
|
23
25
|
fetchQuizAnalysis = _ref.fetchQuizAnalysis,
|
|
24
26
|
fetchItemAnalyses = _ref.fetchItemAnalyses,
|
|
25
|
-
|
|
27
|
+
fetchAnalysesStatus = _ref.fetchAnalysesStatus,
|
|
28
|
+
statusPollingInProgress = _ref.statusPollingInProgress,
|
|
29
|
+
setStatusPollingInProgress = _ref.setStatusPollingInProgress,
|
|
30
|
+
pollingInterval = _ref.pollingInterval,
|
|
31
|
+
passThroughProps = _objectWithoutProperties(_ref, ["quizAnalysis", "itemAnalyses", "fetchInProgress", "generationInProgress", "analysisError", "setQuizAnalysis", "addError", "setItemAnalyses", "setFetchInProgress", "setGenerationInProgress", "setAnalysisError", "activeQuizId", "generateAnalysis", "fetchQuizAnalysis", "fetchItemAnalyses", "fetchAnalysesStatus", "statusPollingInProgress", "setStatusPollingInProgress", "pollingInterval"]);
|
|
26
32
|
|
|
27
33
|
WithAnalysisStatePresenter.displayName = "WithAnalysisStatePresenter(".concat(OriginalComponent.displayName || OriginalComponent.name, ")");
|
|
28
|
-
var
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
34
|
+
var runningInterval = useRef(null);
|
|
35
|
+
|
|
36
|
+
var instrumentedFetchReports = function instrumentedFetchReports() {
|
|
37
|
+
return fetchReports({
|
|
38
|
+
activeQuizId: activeQuizId,
|
|
39
|
+
addError: addError,
|
|
40
|
+
fetchQuizAnalysis: fetchQuizAnalysis,
|
|
41
|
+
fetchItemAnalyses: fetchItemAnalyses,
|
|
42
|
+
setAnalysisError: setAnalysisError,
|
|
43
|
+
setStatusPollingInProgress: setStatusPollingInProgress,
|
|
44
|
+
setItemAnalyses: setItemAnalyses,
|
|
45
|
+
setGenerationInProgress: setGenerationInProgress,
|
|
46
|
+
setFetchInProgress: setFetchInProgress,
|
|
47
|
+
setQuizAnalysis: setQuizAnalysis
|
|
48
|
+
});
|
|
49
|
+
};
|
|
50
|
+
|
|
51
|
+
var instrumentedStatusFetching = function instrumentedStatusFetching() {
|
|
52
|
+
return fetchReportsStatus({
|
|
53
|
+
activeQuizId: activeQuizId,
|
|
54
|
+
addError: addError,
|
|
55
|
+
setGenerationInProgress: setGenerationInProgress,
|
|
56
|
+
setStatusPollingInProgress: setStatusPollingInProgress,
|
|
57
|
+
fetchAnalysesStatus: fetchAnalysesStatus,
|
|
58
|
+
instrumentedFetchReports: instrumentedFetchReports
|
|
59
|
+
});
|
|
38
60
|
};
|
|
39
61
|
|
|
40
62
|
function generateReports() {
|
|
@@ -43,10 +65,25 @@ export var withAnalysisStatePresenter = function withAnalysisStatePresenter(Orig
|
|
|
43
65
|
|
|
44
66
|
function _generateReports() {
|
|
45
67
|
_generateReports = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee2() {
|
|
68
|
+
var filter,
|
|
69
|
+
generationConfig,
|
|
70
|
+
_args2 = arguments;
|
|
46
71
|
return _regeneratorRuntime.wrap(function _callee2$(_context2) {
|
|
47
72
|
while (1) {
|
|
48
73
|
switch (_context2.prev = _context2.next) {
|
|
49
74
|
case 0:
|
|
75
|
+
filter = _args2.length > 0 && _args2[0] !== void 0 ? _args2[0] : 'last_attempt';
|
|
76
|
+
generationConfig = {
|
|
77
|
+
filter: filter,
|
|
78
|
+
generateAnalysis: generateAnalysis,
|
|
79
|
+
setGenerationInProgress: setGenerationInProgress,
|
|
80
|
+
setStatusPollingInProgress: setStatusPollingInProgress,
|
|
81
|
+
addError: addError
|
|
82
|
+
};
|
|
83
|
+
_context2.next = 4;
|
|
84
|
+
return triggerReportGeneration(generationConfig);
|
|
85
|
+
|
|
86
|
+
case 4:
|
|
50
87
|
case "end":
|
|
51
88
|
return _context2.stop();
|
|
52
89
|
}
|
|
@@ -72,7 +109,7 @@ export var withAnalysisStatePresenter = function withAnalysisStatePresenter(Orig
|
|
|
72
109
|
}
|
|
73
110
|
|
|
74
111
|
_context.next = 4;
|
|
75
|
-
return
|
|
112
|
+
return instrumentedFetchReports();
|
|
76
113
|
|
|
77
114
|
case 4:
|
|
78
115
|
case "end":
|
|
@@ -89,6 +126,21 @@ export var withAnalysisStatePresenter = function withAnalysisStatePresenter(Orig
|
|
|
89
126
|
|
|
90
127
|
fetchIfNeeded();
|
|
91
128
|
}, []);
|
|
129
|
+
useEffect(function () {
|
|
130
|
+
if (statusPollingInProgress && !runningInterval.current) {
|
|
131
|
+
runningInterval.current = setInterval(instrumentedStatusFetching, pollingInterval);
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
if (!statusPollingInProgress && runningInterval.current) {
|
|
135
|
+
clearInterval(runningInterval.current);
|
|
136
|
+
runningInterval.current = null;
|
|
137
|
+
} // unmount cleanup
|
|
138
|
+
|
|
139
|
+
|
|
140
|
+
return function () {
|
|
141
|
+
return clearInterval(runningInterval.current);
|
|
142
|
+
};
|
|
143
|
+
}, [statusPollingInProgress]);
|
|
92
144
|
return /*#__PURE__*/React.createElement(OriginalComponent, Object.assign({
|
|
93
145
|
quizAnalysis: quizAnalysis,
|
|
94
146
|
itemAnalyses: itemAnalyses,
|
|
@@ -104,24 +156,27 @@ export var withAnalysisStatePresenter = function withAnalysisStatePresenter(Orig
|
|
|
104
156
|
itemAnalyses: PropTypes.arrayOf(itemAnalysisPropType),
|
|
105
157
|
fetchInProgress: PropTypes.bool.isRequired,
|
|
106
158
|
generationInProgress: PropTypes.bool.isRequired,
|
|
159
|
+
statusPollingInProgress: PropTypes.bool.isRequired,
|
|
107
160
|
analysisError: PropTypes.string,
|
|
108
161
|
setQuizAnalysis: PropTypes.func.isRequired,
|
|
109
162
|
setItemAnalyses: PropTypes.func.isRequired,
|
|
110
163
|
setFetchInProgress: PropTypes.func.isRequired,
|
|
111
164
|
setGenerationInProgress: PropTypes.func.isRequired,
|
|
112
165
|
setAnalysisError: PropTypes.func.isRequired,
|
|
166
|
+
setStatusPollingInProgress: PropTypes.func.isRequired,
|
|
113
167
|
activeQuizId: PropTypes.string.isRequired,
|
|
114
168
|
fetchQuizAnalysis: PropTypes.func.isRequired,
|
|
115
169
|
fetchItemAnalyses: PropTypes.func.isRequired,
|
|
170
|
+
fetchAnalysesStatus: PropTypes.func.isRequired,
|
|
116
171
|
addError: PropTypes.func.isRequired,
|
|
117
|
-
|
|
118
|
-
|
|
172
|
+
pollingInterval: PropTypes.number.isRequired,
|
|
173
|
+
generateAnalysis: PropTypes.func.isRequired // from LTI, f(filter: string)
|
|
174
|
+
|
|
119
175
|
};
|
|
120
176
|
WithAnalysisStatePresenter.defaultProps = {
|
|
121
177
|
quizAnalysis: void 0,
|
|
122
178
|
itemAnalyses: void 0,
|
|
123
|
-
analysisError: ''
|
|
124
|
-
generateReport: Function.prototype
|
|
179
|
+
analysisError: ''
|
|
125
180
|
};
|
|
126
181
|
return WithAnalysisStatePresenter;
|
|
127
182
|
};
|
|
@@ -36,8 +36,8 @@ var getQTIInfo = function getQTIInfo(quizId) {
|
|
|
36
36
|
|
|
37
37
|
exports.getQTIInfo = getQTIInfo;
|
|
38
38
|
|
|
39
|
-
var pollForQtiInfo = function pollForQtiInfo(parentId, parentType) {
|
|
40
|
-
var opts = arguments.length >
|
|
39
|
+
var pollForQtiInfo = function pollForQtiInfo(parentId, parentType, waitForAssignmentSettingsImported) {
|
|
40
|
+
var opts = arguments.length > 3 && arguments[3] !== void 0 ? arguments[3] : {
|
|
41
41
|
getExistingBankAndEntries: _banks.getExistingBankAndEntries,
|
|
42
42
|
getExistingQuizAndItems: _quizzes.getExistingQuizAndItems,
|
|
43
43
|
pollForQtiInfo: pollForQtiInfo
|
|
@@ -66,11 +66,17 @@ var pollForQtiInfo = function pollForQtiInfo(parentId, parentType) {
|
|
|
66
66
|
dispatch(opts.getExistingBankAndEntries(parentId));
|
|
67
67
|
}
|
|
68
68
|
|
|
69
|
-
|
|
69
|
+
if (waitForAssignmentSettingsImported) {
|
|
70
|
+
waitForAssignmentSettingsImported().then(function () {
|
|
71
|
+
dispatch((0, _upload.uploadStatus)(_quizCommon.FILE_UPLOAD_SUCCESS));
|
|
72
|
+
});
|
|
73
|
+
} else {
|
|
74
|
+
dispatch((0, _upload.uploadStatus)(_quizCommon.FILE_UPLOAD_SUCCESS));
|
|
75
|
+
}
|
|
70
76
|
} else if (importsList.find(function (qtiImport) {
|
|
71
77
|
return qtiImport.status !== 'failed';
|
|
72
78
|
})) {
|
|
73
|
-
dispatch(opts.pollForQtiInfo(parentId, parentType, opts));
|
|
79
|
+
dispatch(opts.pollForQtiInfo(parentId, parentType, waitForAssignmentSettingsImported, opts));
|
|
74
80
|
} else {
|
|
75
81
|
dispatch((0, _upload.uploadStatus)(_quizCommon.FILE_UPLOAD_FAILURE));
|
|
76
82
|
}
|
|
@@ -90,7 +96,7 @@ var pollForQtiInfo = function pollForQtiInfo(parentId, parentType) {
|
|
|
90
96
|
|
|
91
97
|
exports.pollForQtiInfo = pollForQtiInfo;
|
|
92
98
|
|
|
93
|
-
var postQtiCreate = function postQtiCreate(qtiImportUrl, dispatch, onError) {
|
|
99
|
+
var postQtiCreate = function postQtiCreate(qtiImportUrl, dispatch, onError, waitForAssignmentSettingsImported) {
|
|
94
100
|
return function (url) {
|
|
95
101
|
var qtiCreateFetcher = new _Fetcher.default({
|
|
96
102
|
callType: _quizCommon.CREATE_QTI_IMPORT,
|
|
@@ -103,7 +109,7 @@ var postQtiCreate = function postQtiCreate(qtiImportUrl, dispatch, onError) {
|
|
|
103
109
|
var addImportToStore = function addImportToStore(importData) {
|
|
104
110
|
dispatch((0, _callHandlers.handleQtiImportsResponse)([importData]));
|
|
105
111
|
var parentType = importData.parent_type === 'Quiz' ? _quizCommon.PARENT_TYPE_QUIZ : _quizCommon.PARENT_TYPE_BANK;
|
|
106
|
-
dispatch(pollForQtiInfo(importData.parent_id, parentType));
|
|
112
|
+
dispatch(pollForQtiInfo(importData.parent_id, parentType, waitForAssignmentSettingsImported));
|
|
107
113
|
};
|
|
108
114
|
|
|
109
115
|
return qtiCreateFetcher.post(qtiImportUrl, {
|
|
@@ -114,9 +120,9 @@ var postQtiCreate = function postQtiCreate(qtiImportUrl, dispatch, onError) {
|
|
|
114
120
|
|
|
115
121
|
exports.postQtiCreate = postQtiCreate;
|
|
116
122
|
|
|
117
|
-
var qtiFileUpload = function qtiFileUpload(file, parentId, parentType, onError) {
|
|
118
|
-
var withUrlCallback = arguments.length >
|
|
119
|
-
var qtiCreateFxn = arguments.length >
|
|
123
|
+
var qtiFileUpload = function qtiFileUpload(file, parentId, parentType, onError, waitForAssignmentSettingsImported) {
|
|
124
|
+
var withUrlCallback = arguments.length > 5 && arguments[5] !== void 0 ? arguments[5] : _fileUpload.sendFileToS3;
|
|
125
|
+
var qtiCreateFxn = arguments.length > 6 && arguments[6] !== void 0 ? arguments[6] : postQtiCreate;
|
|
120
126
|
return function (dispatch, getState) {
|
|
121
127
|
var qtiImportUrl;
|
|
122
128
|
|
|
@@ -127,7 +133,7 @@ var qtiFileUpload = function qtiFileUpload(file, parentId, parentType, onError)
|
|
|
127
133
|
}
|
|
128
134
|
|
|
129
135
|
var pathToGetUrl = "".concat(qtiImportUrl, "/upload_url");
|
|
130
|
-
var onSuccess = qtiCreateFxn(qtiImportUrl, dispatch, onError);
|
|
136
|
+
var onSuccess = qtiCreateFxn(qtiImportUrl, dispatch, onError, waitForAssignmentSettingsImported);
|
|
131
137
|
return (0, _fileUpload.getUploadUrl)(pathToGetUrl).then(withUrlCallback(file, onSuccess, onError));
|
|
132
138
|
};
|
|
133
139
|
};
|
|
@@ -42,7 +42,7 @@ var mapDispatchToProps = function mapDispatchToProps(dispatch, props) {
|
|
|
42
42
|
return {
|
|
43
43
|
onContinue: (0, _redux.bindActionCreators)(_qtiImports.clearQtiImports, dispatch),
|
|
44
44
|
fileUpload: function fileUpload(file, cancelAction) {
|
|
45
|
-
boundQtiFileUpload(file, props.parentId, props.parentType, cancelAction);
|
|
45
|
+
boundQtiFileUpload(file, props.parentId, props.parentType, cancelAction, props.waitForAssignmentSettingsImported);
|
|
46
46
|
}
|
|
47
47
|
};
|
|
48
48
|
};
|
|
@@ -6,6 +6,7 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
6
6
|
exports.setQuizAnalysis = setQuizAnalysis;
|
|
7
7
|
exports.setItemAnalyses = setItemAnalyses;
|
|
8
8
|
exports.setFetchInProgress = setFetchInProgress;
|
|
9
|
+
exports.setStatusPollingInProgress = setStatusPollingInProgress;
|
|
9
10
|
exports.setGenerationInProgress = setGenerationInProgress;
|
|
10
11
|
exports.setAnalysisError = setAnalysisError;
|
|
11
12
|
|
|
@@ -32,6 +33,13 @@ function setFetchInProgress(inProgress) {
|
|
|
32
33
|
};
|
|
33
34
|
}
|
|
34
35
|
|
|
36
|
+
function setStatusPollingInProgress(inProgress) {
|
|
37
|
+
return {
|
|
38
|
+
type: _quizCommon.SET_STATUS_POLLING_IN_PROGRESS,
|
|
39
|
+
payload: inProgress
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
|
|
35
43
|
function setGenerationInProgress(inProgress) {
|
|
36
44
|
return {
|
|
37
45
|
type: _quizCommon.SET_ANALYSIS_GENERATION_IN_PROGRESS,
|
|
@@ -21,9 +21,9 @@ var _react = _interopRequireWildcard(require("react"));
|
|
|
21
21
|
|
|
22
22
|
var _propTypes = _interopRequireDefault(require("prop-types"));
|
|
23
23
|
|
|
24
|
-
var
|
|
24
|
+
var _uiText = require("@instructure/ui-text");
|
|
25
25
|
|
|
26
|
-
var
|
|
26
|
+
var _uiSpinner = require("@instructure/ui-spinner");
|
|
27
27
|
|
|
28
28
|
var _uiA11yContent = require("@instructure/ui-a11y-content");
|
|
29
29
|
|
|
@@ -36,14 +36,13 @@ var _theme = _interopRequireDefault(require("./theme.js"));
|
|
|
36
36
|
var _dec, _class, _class2, _temp;
|
|
37
37
|
|
|
38
38
|
var styles = {
|
|
39
|
-
componentId: '
|
|
39
|
+
componentId: 'cJgyM',
|
|
40
40
|
template: function template(theme) {
|
|
41
|
-
return "\n\n.
|
|
41
|
+
return "\n\n.cJgyM_gasz{align-items:center;column-gap:10px;display:inline-flex;flex:1 1 auto;height:100%;justify-content:center;width:100%}\n\n:root .cJgyM_gasz,_:-ms-fullscreen{height:10rem}\n\n.cJgyM_bZBM .cJgyM_qrQc{flex:1 1 auto}";
|
|
42
42
|
},
|
|
43
|
-
'wrapper': '
|
|
44
|
-
'left': '
|
|
45
|
-
'right': '
|
|
46
|
-
'mainText': 'ebGcj_fBqo'
|
|
43
|
+
'wrapper': 'cJgyM_gasz',
|
|
44
|
+
'left': 'cJgyM_bZBM',
|
|
45
|
+
'right': 'cJgyM_qrQc'
|
|
47
46
|
};
|
|
48
47
|
var QuizzesSpinner = (_dec = (0, _uiThemeable.themeable)(_theme.default, styles), _dec(_class = (_temp = _class2 = /*#__PURE__*/function (_Component) {
|
|
49
48
|
(0, _inherits2.default)(QuizzesSpinner, _Component);
|
|
@@ -58,34 +57,50 @@ var QuizzesSpinner = (_dec = (0, _uiThemeable.themeable)(_theme.default, styles)
|
|
|
58
57
|
(0, _createClass2.default)(QuizzesSpinner, [{
|
|
59
58
|
key: "mainText",
|
|
60
59
|
value: function mainText() {
|
|
61
|
-
|
|
60
|
+
var _this$props = this.props,
|
|
61
|
+
color = _this$props.color,
|
|
62
|
+
mainText = _this$props.mainText,
|
|
63
|
+
fontSize = _this$props.fontSize;
|
|
64
|
+
return /*#__PURE__*/_react.default.createElement(_uiText.Text, {
|
|
65
|
+
size: fontSize,
|
|
66
|
+
color: color
|
|
67
|
+
}, mainText || (0, _formatMessage.default)('Loading...'));
|
|
62
68
|
}
|
|
63
69
|
}, {
|
|
64
70
|
key: "render",
|
|
65
71
|
value: function render() {
|
|
72
|
+
var _this$props2 = this.props,
|
|
73
|
+
size = _this$props2.size,
|
|
74
|
+
minHeight = _this$props2.minHeight;
|
|
66
75
|
return /*#__PURE__*/_react.default.createElement("div", {
|
|
67
|
-
className: styles.wrapper
|
|
76
|
+
className: styles.wrapper,
|
|
77
|
+
style: {
|
|
78
|
+
minHeight: minHeight
|
|
79
|
+
}
|
|
68
80
|
}, /*#__PURE__*/_react.default.createElement("div", {
|
|
69
81
|
className: styles.left
|
|
70
82
|
}, /*#__PURE__*/_react.default.createElement(_uiSpinner.Spinner, {
|
|
71
83
|
renderTitle: this.mainText(),
|
|
72
|
-
size:
|
|
84
|
+
size: size
|
|
73
85
|
})), /*#__PURE__*/_react.default.createElement("div", {
|
|
74
86
|
className: styles.right
|
|
75
|
-
}, /*#__PURE__*/_react.default.createElement(_uiA11yContent.PresentationContent, null,
|
|
76
|
-
level: "h2",
|
|
77
|
-
as: "h1"
|
|
78
|
-
}, /*#__PURE__*/_react.default.createElement("div", {
|
|
79
|
-
className: styles.mainText
|
|
80
|
-
}, this.mainText())))));
|
|
87
|
+
}, /*#__PURE__*/_react.default.createElement(_uiA11yContent.PresentationContent, null, this.mainText())));
|
|
81
88
|
}
|
|
82
89
|
}]);
|
|
83
90
|
QuizzesSpinner.displayName = "QuizzesSpinner";
|
|
84
91
|
return QuizzesSpinner;
|
|
85
92
|
}(_react.Component), _class2.propTypes = {
|
|
86
|
-
mainText: _propTypes.default.string
|
|
93
|
+
mainText: _propTypes.default.string,
|
|
94
|
+
fontSize: _propTypes.default.oneOf(['x-small', 'small', 'medium', 'large', 'x-large', 'xx-large']),
|
|
95
|
+
size: _propTypes.default.oneOf(['x-small', 'small', 'medium', 'large']),
|
|
96
|
+
color: _propTypes.default.string,
|
|
97
|
+
minHeight: _propTypes.default.string
|
|
87
98
|
}, _class2.defaultProps = {
|
|
88
|
-
mainText: null
|
|
99
|
+
mainText: null,
|
|
100
|
+
size: 'large',
|
|
101
|
+
fontSize: 'xx-large',
|
|
102
|
+
minHeight: '500px',
|
|
103
|
+
color: 'primary'
|
|
89
104
|
}, _temp)) || _class);
|
|
90
105
|
exports.QuizzesSpinner = QuizzesSpinner;
|
|
91
106
|
var _default = QuizzesSpinner;
|
|
@@ -1,14 +1,20 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
|
|
3
5
|
Object.defineProperty(exports, "__esModule", {
|
|
4
6
|
value: true
|
|
5
7
|
});
|
|
6
|
-
exports.default = exports.defaultState = exports.errorKey = exports.generationInProgressKey = exports.fetchInProgressKey = exports.itemAnalysesKey = exports.quizAnalysisKey = void 0;
|
|
8
|
+
exports.default = exports.defaultState = exports.errorKey = exports.statusPollingInProgressKey = exports.generationInProgressKey = exports.fetchInProgressKey = exports.itemAnalysesKey = exports.quizAnalysisKey = void 0;
|
|
9
|
+
|
|
10
|
+
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
7
11
|
|
|
8
12
|
var _immutable = require("immutable");
|
|
9
13
|
|
|
10
14
|
var _quizCommon = require("@instructure/quiz-common");
|
|
11
15
|
|
|
16
|
+
var _fromJS;
|
|
17
|
+
|
|
12
18
|
var quizAnalysisKey = 'quizAnalysis';
|
|
13
19
|
exports.quizAnalysisKey = quizAnalysisKey;
|
|
14
20
|
var itemAnalysesKey = 'itemAnalyses';
|
|
@@ -17,15 +23,11 @@ var fetchInProgressKey = 'fetchInProgress';
|
|
|
17
23
|
exports.fetchInProgressKey = fetchInProgressKey;
|
|
18
24
|
var generationInProgressKey = 'generationInProgress';
|
|
19
25
|
exports.generationInProgressKey = generationInProgressKey;
|
|
26
|
+
var statusPollingInProgressKey = 'statusPollingInProgress';
|
|
27
|
+
exports.statusPollingInProgressKey = statusPollingInProgressKey;
|
|
20
28
|
var errorKey = 'analysisError';
|
|
21
29
|
exports.errorKey = errorKey;
|
|
22
|
-
var defaultState = (0, _immutable.fromJS)({
|
|
23
|
-
quizAnalysisKey: void 0,
|
|
24
|
-
itemAnalysesKey: void 0,
|
|
25
|
-
fetchStateKey: false,
|
|
26
|
-
generationStateKey: false,
|
|
27
|
-
errorKey: void 0
|
|
28
|
-
});
|
|
30
|
+
var defaultState = (0, _immutable.fromJS)((_fromJS = {}, (0, _defineProperty2.default)(_fromJS, quizAnalysisKey, void 0), (0, _defineProperty2.default)(_fromJS, itemAnalysesKey, void 0), (0, _defineProperty2.default)(_fromJS, fetchInProgressKey, false), (0, _defineProperty2.default)(_fromJS, generationInProgressKey, false), (0, _defineProperty2.default)(_fromJS, statusPollingInProgressKey, false), (0, _defineProperty2.default)(_fromJS, errorKey, void 0), _fromJS));
|
|
29
31
|
exports.defaultState = defaultState;
|
|
30
32
|
|
|
31
33
|
var _default = function _default() {
|
|
@@ -45,6 +47,9 @@ var _default = function _default() {
|
|
|
45
47
|
case _quizCommon.SET_ANALYSIS_GENERATION_IN_PROGRESS:
|
|
46
48
|
return state.set(generationInProgressKey, action.payload);
|
|
47
49
|
|
|
50
|
+
case _quizCommon.SET_STATUS_POLLING_IN_PROGRESS:
|
|
51
|
+
return state.set(statusPollingInProgressKey, action.payload);
|
|
52
|
+
|
|
48
53
|
case _quizCommon.SET_ANALYSIS_ERROR:
|
|
49
54
|
return state.set(errorKey, action.payload);
|
|
50
55
|
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
-
exports.getAnalysisError = exports.getGenerationInProgress = exports.getFetchInProgress = exports.getItemAnalyses = exports.getQuizAnalysis = void 0;
|
|
6
|
+
exports.getAnalysisError = exports.getGenerationInProgress = exports.getStatusPollingInProgress = exports.getFetchInProgress = exports.getItemAnalyses = exports.getQuizAnalysis = void 0;
|
|
7
7
|
var path = 'analyses';
|
|
8
8
|
|
|
9
9
|
var getQuizAnalysis = function getQuizAnalysis(state) {
|
|
@@ -28,6 +28,12 @@ var getFetchInProgress = function getFetchInProgress(state) {
|
|
|
28
28
|
|
|
29
29
|
exports.getFetchInProgress = getFetchInProgress;
|
|
30
30
|
|
|
31
|
+
var getStatusPollingInProgress = function getStatusPollingInProgress(state) {
|
|
32
|
+
return state.getIn([path, 'statusPollingInProgress'], false);
|
|
33
|
+
};
|
|
34
|
+
|
|
35
|
+
exports.getStatusPollingInProgress = getStatusPollingInProgress;
|
|
36
|
+
|
|
31
37
|
var getGenerationInProgress = function getGenerationInProgress(state) {
|
|
32
38
|
return state.getIn([path, 'generationInProgress'], false);
|
|
33
39
|
};
|