@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.
Files changed (43) hide show
  1. package/es/building/api/qtiImports.js +16 -10
  2. package/es/building/components/QTIImportModal/index.js +1 -1
  3. package/es/common/actions/analyses.js +7 -1
  4. package/es/common/components/shared/spinner/Spinner.js +33 -18
  5. package/es/common/components/shared/spinner/theme.js +2 -5
  6. package/es/common/reducers/analyses.js +10 -8
  7. package/es/common/selectors/analyses.js +3 -0
  8. package/es/reporting/components/resources/NewQuizAndItemAnalysis/AnswerSummaryTable/ChoiceInfo/presenter.js +14 -7
  9. package/es/reporting/components/resources/NewQuizAndItemAnalysis/AnswerSummaryTable/presenter.js +4 -0
  10. package/es/reporting/components/resources/NewQuizAndItemAnalysis/NewItemAnalysis/presenter.js +129 -143
  11. package/es/reporting/components/resources/NewQuizAndItemAnalysis/NewItemAnalysis/theme.js +2 -1
  12. package/es/reporting/components/resources/NewQuizAndItemAnalysis/NewQuizAnalysis/presenter.js +9 -8
  13. package/es/reporting/components/resources/NewQuizAndItemAnalysis/NewQuizAnalysis/theme.js +2 -1
  14. package/es/reporting/components/resources/NewQuizAndItemAnalysis/ReportCard/presenter.js +85 -30
  15. package/es/reporting/components/resources/NewQuizAndItemAnalysis/ReportCard/theme.js +4 -2
  16. package/es/reporting/components/resources/NewQuizAndItemAnalysis/errorMessages.js +3 -0
  17. package/es/reporting/components/resources/NewQuizAndItemAnalysis/fetchReports.js +15 -12
  18. package/es/reporting/components/resources/NewQuizAndItemAnalysis/fetchReportsStatus.js +45 -0
  19. package/es/reporting/components/resources/NewQuizAndItemAnalysis/generateReports.js +52 -0
  20. package/es/reporting/components/resources/NewQuizAndItemAnalysis/withAnalysisState.js +10 -4
  21. package/es/reporting/components/resources/NewQuizAndItemAnalysis/withAnalysisStatePresenter.js +73 -18
  22. package/lib/building/api/qtiImports.js +16 -10
  23. package/lib/building/components/QTIImportModal/index.js +1 -1
  24. package/lib/common/actions/analyses.js +8 -0
  25. package/lib/common/components/shared/spinner/Spinner.js +34 -19
  26. package/lib/common/components/shared/spinner/theme.js +2 -5
  27. package/lib/common/reducers/analyses.js +13 -8
  28. package/lib/common/selectors/analyses.js +7 -1
  29. package/lib/reporting/components/resources/NewQuizAndItemAnalysis/AnswerSummaryTable/ChoiceInfo/presenter.js +14 -6
  30. package/lib/reporting/components/resources/NewQuizAndItemAnalysis/AnswerSummaryTable/presenter.js +5 -0
  31. package/lib/reporting/components/resources/NewQuizAndItemAnalysis/NewItemAnalysis/presenter.js +132 -144
  32. package/lib/reporting/components/resources/NewQuizAndItemAnalysis/NewItemAnalysis/theme.js +2 -1
  33. package/lib/reporting/components/resources/NewQuizAndItemAnalysis/NewQuizAnalysis/presenter.js +9 -8
  34. package/lib/reporting/components/resources/NewQuizAndItemAnalysis/NewQuizAnalysis/theme.js +2 -1
  35. package/lib/reporting/components/resources/NewQuizAndItemAnalysis/ReportCard/presenter.js +84 -29
  36. package/lib/reporting/components/resources/NewQuizAndItemAnalysis/ReportCard/theme.js +4 -2
  37. package/lib/reporting/components/resources/NewQuizAndItemAnalysis/errorMessages.js +8 -2
  38. package/lib/reporting/components/resources/NewQuizAndItemAnalysis/fetchReports.js +15 -12
  39. package/lib/reporting/components/resources/NewQuizAndItemAnalysis/fetchReportsStatus.js +59 -0
  40. package/lib/reporting/components/resources/NewQuizAndItemAnalysis/generateReports.js +67 -0
  41. package/lib/reporting/components/resources/NewQuizAndItemAnalysis/withAnalysisState.js +10 -2
  42. package/lib/reporting/components/resources/NewQuizAndItemAnalysis/withAnalysisStatePresenter.js +74 -17
  43. 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 (quizAnalysis.last_analysis_failed || itemAnalyses.last_analysis_failed) {
31
+ if (areAnalysesFailed) {
29
32
  setAnalysisError(getLastReportGenerationFailed());
30
33
  }
31
34
 
32
- _context.next = 18;
35
+ _context.next = 21;
33
36
  break;
34
37
 
35
- case 15:
36
- _context.prev = 15;
38
+ case 18:
39
+ _context.prev = 18;
37
40
  _context.t0 = _context["catch"](1);
38
41
  addError(getFailedToFetchReports());
39
42
 
40
- case 18:
41
- _context.prev = 18;
43
+ case 21:
44
+ _context.prev = 21;
42
45
  setFetchInProgress(false);
43
- return _context.finish(18);
46
+ return _context.finish(21);
44
47
 
45
- case 21:
48
+ case 24:
46
49
  case "end":
47
50
  return _context.stop();
48
51
  }
49
52
  }
50
- }, _callee, null, [[1, 15, 18, 21]]);
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;
@@ -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
- generateReport = _ref.generateReport,
24
+ generateAnalysis = _ref.generateAnalysis,
23
25
  fetchQuizAnalysis = _ref.fetchQuizAnalysis,
24
26
  fetchItemAnalyses = _ref.fetchItemAnalyses,
25
- passThroughProps = _objectWithoutProperties(_ref, ["quizAnalysis", "itemAnalyses", "fetchInProgress", "generationInProgress", "analysisError", "setQuizAnalysis", "addError", "setItemAnalyses", "setFetchInProgress", "setGenerationInProgress", "setAnalysisError", "activeQuizId", "generateReport", "fetchQuizAnalysis", "fetchItemAnalyses"]);
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 reportFetchingConfig = {
29
- activeQuizId: activeQuizId,
30
- addError: addError,
31
- fetchQuizAnalysis: fetchQuizAnalysis,
32
- fetchItemAnalyses: fetchItemAnalyses,
33
- setAnalysisError: setAnalysisError,
34
- setItemAnalyses: setItemAnalyses,
35
- setGenerationInProgress: setGenerationInProgress,
36
- setFetchInProgress: setFetchInProgress,
37
- setQuizAnalysis: setQuizAnalysis
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 fetchReports(reportFetchingConfig);
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
- // can be required after passed from LTI
118
- generateReport: PropTypes.func
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 > 2 && arguments[2] !== void 0 ? arguments[2] : {
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
- dispatch((0, _upload.uploadStatus)(_quizCommon.FILE_UPLOAD_SUCCESS));
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 > 4 && arguments[4] !== void 0 ? arguments[4] : _fileUpload.sendFileToS3;
119
- var qtiCreateFxn = arguments.length > 5 && arguments[5] !== void 0 ? arguments[5] : postQtiCreate;
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 _uiSpinner = require("@instructure/ui-spinner");
24
+ var _uiText = require("@instructure/ui-text");
25
25
 
26
- var _uiHeading = require("@instructure/ui-heading");
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: 'ebGcj',
39
+ componentId: 'cJgyM',
40
40
  template: function template(theme) {
41
- return "\n\n.ebGcj_gasz{align-items:center;display:inline-flex;flex:1 1 auto;height:100%;justify-content:center;min-height:500px;width:100%}\n\n:root .ebGcj_gasz,_:-ms-fullscreen{height:10rem}\n\n.ebGcj_bZBM .ebGcj_qrQc{flex:1 1 auto}\n\n.ebGcj_fBqo{font-size:".concat(theme.mainTextFontSize || 'inherit', "}");
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': 'ebGcj_gasz',
44
- 'left': 'ebGcj_bZBM',
45
- 'right': 'ebGcj_qrQc',
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
- return this.props.mainText || (0, _formatMessage.default)('Loading...');
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: "large"
84
+ size: size
73
85
  })), /*#__PURE__*/_react.default.createElement("div", {
74
86
  className: styles.right
75
- }, /*#__PURE__*/_react.default.createElement(_uiA11yContent.PresentationContent, null, /*#__PURE__*/_react.default.createElement(_uiHeading.Heading, {
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;
@@ -5,9 +5,6 @@ Object.defineProperty(exports, "__esModule", {
5
5
  });
6
6
  exports.default = generator;
7
7
 
8
- function generator(_ref) {
9
- var typography = _ref.typography;
10
- return {
11
- mainTextFontSize: typography.fontSizeXXLarge
12
- };
8
+ function generator() {
9
+ return {};
13
10
  }
@@ -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
  };