@instructure/quiz-core 18.5.1-rc.8 → 18.6.0
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/CHANGELOG.md +23 -0
- package/es/reporting/components/resources/NewQuizAndItemAnalysis/AnalysisMetric/presenter.js +8 -5
- package/es/reporting/components/resources/NewQuizAndItemAnalysis/AnswerFrequencySummary/AggregationType/presenter.js +11 -21
- package/es/reporting/components/resources/NewQuizAndItemAnalysis/AnswerFrequencySummary/ChoiceType/presenter.js +5 -5
- package/es/reporting/components/resources/NewQuizAndItemAnalysis/AnswerFrequencySummary/MatchingType/MatchingType.js +15 -25
- package/es/reporting/components/resources/NewQuizAndItemAnalysis/AnswerFrequencySummary/MatchingType/MatchingTypeTable/presenter.js +4 -1
- package/es/reporting/components/resources/NewQuizAndItemAnalysis/AnswerFrequencySummary/MatchingType/OrderingType.js +87 -0
- package/es/reporting/components/resources/NewQuizAndItemAnalysis/AnswerFrequencySummary/MatchingType/index.js +2 -1
- package/es/reporting/components/resources/NewQuizAndItemAnalysis/AnswerFrequencySummary/presenter.js +8 -2
- package/es/reporting/components/resources/NewQuizAndItemAnalysis/AnswerFrequencySummary/shared/AfsPartsContainer/index.js +1 -0
- package/es/reporting/components/resources/NewQuizAndItemAnalysis/AnswerFrequencySummary/shared/AfsPartsContainer/presenter.js +73 -0
- package/es/reporting/components/resources/NewQuizAndItemAnalysis/NewItemAnalysis/index.js +1 -0
- package/es/reporting/components/resources/NewQuizAndItemAnalysis/ReportCard/presenter.js +9 -9
- package/es/reporting/components/resources/NewQuizAndItemAnalysis/ReportCard/theme.js +1 -1
- package/es/reporting/components/resources/NewQuizAndItemAnalysis/errorMessages.js +3 -0
- package/es/reporting/components/resources/NewQuizAndItemAnalysis/exportReports.js +65 -0
- package/es/reporting/components/resources/NewQuizAndItemAnalysis/utils.js +4 -0
- package/es/reporting/components/resources/NewQuizAndItemAnalysis/withAnalysisState.js +2 -0
- package/es/reporting/components/resources/NewQuizAndItemAnalysis/withAnalysisStatePresenter.js +41 -1
- package/es/reporting/components/resources/ReportCard/theme.js +1 -1
- package/lib/reporting/components/resources/NewQuizAndItemAnalysis/AnalysisMetric/presenter.js +8 -5
- package/lib/reporting/components/resources/NewQuizAndItemAnalysis/AnswerFrequencySummary/AggregationType/presenter.js +15 -24
- package/lib/reporting/components/resources/NewQuizAndItemAnalysis/AnswerFrequencySummary/ChoiceType/presenter.js +5 -5
- package/lib/reporting/components/resources/NewQuizAndItemAnalysis/AnswerFrequencySummary/MatchingType/MatchingType.js +19 -29
- package/lib/reporting/components/resources/NewQuizAndItemAnalysis/AnswerFrequencySummary/MatchingType/MatchingTypeTable/presenter.js +5 -1
- package/lib/reporting/components/resources/NewQuizAndItemAnalysis/AnswerFrequencySummary/MatchingType/OrderingType.js +115 -0
- package/lib/reporting/components/resources/NewQuizAndItemAnalysis/AnswerFrequencySummary/MatchingType/index.js +9 -1
- package/lib/reporting/components/resources/NewQuizAndItemAnalysis/AnswerFrequencySummary/presenter.js +7 -1
- package/lib/reporting/components/resources/NewQuizAndItemAnalysis/AnswerFrequencySummary/shared/AfsPartsContainer/index.js +13 -0
- package/lib/reporting/components/resources/NewQuizAndItemAnalysis/AnswerFrequencySummary/shared/AfsPartsContainer/presenter.js +92 -0
- package/lib/reporting/components/resources/NewQuizAndItemAnalysis/NewItemAnalysis/index.js +1 -0
- package/lib/reporting/components/resources/NewQuizAndItemAnalysis/ReportCard/presenter.js +9 -9
- package/lib/reporting/components/resources/NewQuizAndItemAnalysis/ReportCard/theme.js +1 -1
- package/lib/reporting/components/resources/NewQuizAndItemAnalysis/errorMessages.js +7 -1
- package/lib/reporting/components/resources/NewQuizAndItemAnalysis/exportReports.js +80 -0
- package/lib/reporting/components/resources/NewQuizAndItemAnalysis/utils.js +10 -2
- package/lib/reporting/components/resources/NewQuizAndItemAnalysis/withAnalysisState.js +3 -0
- package/lib/reporting/components/resources/NewQuizAndItemAnalysis/withAnalysisStatePresenter.js +43 -1
- package/lib/reporting/components/resources/ReportCard/theme.js +1 -1
- package/package.json +11 -10
- package/es/reporting/components/resources/NewQuizAndItemAnalysis/AnswerFrequencySummary/AggregationType/theme.js +0 -5
- package/lib/reporting/components/resources/NewQuizAndItemAnalysis/AnswerFrequencySummary/AggregationType/theme.js +0 -12
|
@@ -5,7 +5,7 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
|
|
|
5
5
|
Object.defineProperty(exports, "__esModule", {
|
|
6
6
|
value: true
|
|
7
7
|
});
|
|
8
|
-
exports.getNotEnoughDataAvailableError = exports.getMinimumThreeGradedSubmissionError = exports.getOngoingReportGenerationError = exports.getInsufficentSubmissionNumberError = exports.getReportGenerationFailure = exports.getLastReportGenerationFailed = exports.getFailedToFetchReports = void 0;
|
|
8
|
+
exports.getNotEnoughDataAvailableError = exports.getMinimumThreeGradedSubmissionError = exports.getOngoingReportGenerationError = exports.getInsufficentSubmissionNumberError = exports.getReportGenerationFailure = exports.getLastReportGenerationFailed = exports.getFailedToExportReports = exports.getFailedToFetchReports = void 0;
|
|
9
9
|
|
|
10
10
|
var _formatMessage = _interopRequireDefault(require("@instructure/quiz-i18n/es/format-message"));
|
|
11
11
|
|
|
@@ -15,6 +15,12 @@ var getFailedToFetchReports = function getFailedToFetchReports() {
|
|
|
15
15
|
|
|
16
16
|
exports.getFailedToFetchReports = getFailedToFetchReports;
|
|
17
17
|
|
|
18
|
+
var getFailedToExportReports = function getFailedToExportReports() {
|
|
19
|
+
return (0, _formatMessage.default)('An error has occurred while exporting this report. Please try again.');
|
|
20
|
+
};
|
|
21
|
+
|
|
22
|
+
exports.getFailedToExportReports = getFailedToExportReports;
|
|
23
|
+
|
|
18
24
|
var getLastReportGenerationFailed = function getLastReportGenerationFailed() {
|
|
19
25
|
return (0, _formatMessage.default)('Report generation failed. Please try again.');
|
|
20
26
|
};
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
|
|
5
|
+
Object.defineProperty(exports, "__esModule", {
|
|
6
|
+
value: true
|
|
7
|
+
});
|
|
8
|
+
exports.exportReports = void 0;
|
|
9
|
+
|
|
10
|
+
var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
|
|
11
|
+
|
|
12
|
+
var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
|
|
13
|
+
|
|
14
|
+
var _errorMessages = require("./errorMessages.js");
|
|
15
|
+
|
|
16
|
+
var _contentDisposition = _interopRequireDefault(require("content-disposition"));
|
|
17
|
+
|
|
18
|
+
var exportReports = /*#__PURE__*/function () {
|
|
19
|
+
var _ref2 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee(_ref) {
|
|
20
|
+
var getAnalysesExport, activeQuizId, filter, format, saveFile, addError, response, dispositionHeader, disposition, filename, blob;
|
|
21
|
+
return _regenerator.default.wrap(function _callee$(_context) {
|
|
22
|
+
while (1) {
|
|
23
|
+
switch (_context.prev = _context.next) {
|
|
24
|
+
case 0:
|
|
25
|
+
getAnalysesExport = _ref.getAnalysesExport, activeQuizId = _ref.activeQuizId, filter = _ref.filter, format = _ref.format, saveFile = _ref.saveFile, addError = _ref.addError;
|
|
26
|
+
_context.prev = 1;
|
|
27
|
+
_context.next = 4;
|
|
28
|
+
return getAnalysesExport(activeQuizId, format, filter);
|
|
29
|
+
|
|
30
|
+
case 4:
|
|
31
|
+
response = _context.sent;
|
|
32
|
+
dispositionHeader = response.headers.get('Content-Disposition');
|
|
33
|
+
|
|
34
|
+
if (dispositionHeader) {
|
|
35
|
+
_context.next = 8;
|
|
36
|
+
break;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
throw new Error('Response contains no Content-Disposition header.');
|
|
40
|
+
|
|
41
|
+
case 8:
|
|
42
|
+
disposition = _contentDisposition.default.parse(dispositionHeader);
|
|
43
|
+
filename = disposition.parameters.filename;
|
|
44
|
+
|
|
45
|
+
if (filename) {
|
|
46
|
+
_context.next = 12;
|
|
47
|
+
break;
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
throw new Error('Cannot determine filename to save.');
|
|
51
|
+
|
|
52
|
+
case 12:
|
|
53
|
+
_context.next = 14;
|
|
54
|
+
return response.blob();
|
|
55
|
+
|
|
56
|
+
case 14:
|
|
57
|
+
blob = _context.sent;
|
|
58
|
+
saveFile(blob, filename);
|
|
59
|
+
_context.next = 21;
|
|
60
|
+
break;
|
|
61
|
+
|
|
62
|
+
case 18:
|
|
63
|
+
_context.prev = 18;
|
|
64
|
+
_context.t0 = _context["catch"](1);
|
|
65
|
+
addError((0, _errorMessages.getFailedToExportReports)());
|
|
66
|
+
|
|
67
|
+
case 21:
|
|
68
|
+
case "end":
|
|
69
|
+
return _context.stop();
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
}, _callee, null, [[1, 18]]);
|
|
73
|
+
}));
|
|
74
|
+
|
|
75
|
+
return function exportReports(_x) {
|
|
76
|
+
return _ref2.apply(this, arguments);
|
|
77
|
+
};
|
|
78
|
+
}();
|
|
79
|
+
|
|
80
|
+
exports.exportReports = exportReports;
|
|
@@ -5,10 +5,12 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
|
|
|
5
5
|
Object.defineProperty(exports, "__esModule", {
|
|
6
6
|
value: true
|
|
7
7
|
});
|
|
8
|
-
exports.getSanitizedMetricValue = void 0;
|
|
8
|
+
exports.getSanitizedMetricValue = exports.saveFile = void 0;
|
|
9
9
|
|
|
10
10
|
var _formatMessage = _interopRequireDefault(require("@instructure/quiz-i18n/es/format-message"));
|
|
11
11
|
|
|
12
|
+
var _fileSaver = require("file-saver");
|
|
13
|
+
|
|
12
14
|
var formatNumbers = function formatNumbers(value) {
|
|
13
15
|
if (typeof value === 'number') {
|
|
14
16
|
return _formatMessage.default.number(value);
|
|
@@ -26,4 +28,10 @@ var getSanitizedMetricValue = function getSanitizedMetricValue(value, suffix) {
|
|
|
26
28
|
return suffix ? formattedValue + suffix : formattedValue;
|
|
27
29
|
};
|
|
28
30
|
|
|
29
|
-
exports.getSanitizedMetricValue = getSanitizedMetricValue;
|
|
31
|
+
exports.getSanitizedMetricValue = getSanitizedMetricValue;
|
|
32
|
+
|
|
33
|
+
var saveFile = function saveFile(file, fileName) {
|
|
34
|
+
(0, _fileSaver.saveAs)(file, fileName);
|
|
35
|
+
};
|
|
36
|
+
|
|
37
|
+
exports.saveFile = saveFile;
|
|
@@ -18,6 +18,8 @@ var _getItemAnalyses = require("../../../api/getItemAnalyses.js");
|
|
|
18
18
|
|
|
19
19
|
var _getAnalysesStatus = require("../../../api/getAnalysesStatus.js");
|
|
20
20
|
|
|
21
|
+
var _getAnalysesExport = require("../../../api/getAnalysesExport.js");
|
|
22
|
+
|
|
21
23
|
var _reactRedux = require("../../../../common/react-redux.js");
|
|
22
24
|
|
|
23
25
|
var _redux = require("redux");
|
|
@@ -40,6 +42,7 @@ function mapStateToProps(state, ownProps) {
|
|
|
40
42
|
fetchQuizAnalysis: _getQuizAnalysis.getQuizAnalysis,
|
|
41
43
|
fetchItemAnalyses: _getItemAnalyses.getItemAnalyses,
|
|
42
44
|
fetchAnalysesStatus: _getAnalysesStatus.getAnalysesStatus,
|
|
45
|
+
getAnalysesExport: _getAnalysesExport.getAnalysesExport,
|
|
43
46
|
pollingInterval: ownProps.pollingInterval || DEFAULT_POLLING_INTERVAL
|
|
44
47
|
};
|
|
45
48
|
}
|
package/lib/reporting/components/resources/NewQuizAndItemAnalysis/withAnalysisStatePresenter.js
CHANGED
|
@@ -31,6 +31,10 @@ var _errorCodes = require("./errorCodes.js");
|
|
|
31
31
|
|
|
32
32
|
var _generateReports2 = require("./generateReports.js");
|
|
33
33
|
|
|
34
|
+
var _exportReports2 = require("./exportReports.js");
|
|
35
|
+
|
|
36
|
+
var _utils = require("./utils.js");
|
|
37
|
+
|
|
34
38
|
var withAnalysisStatePresenter = function withAnalysisStatePresenter(OriginalComponent) {
|
|
35
39
|
var WithAnalysisStatePresenter = function WithAnalysisStatePresenter(_ref) {
|
|
36
40
|
var quizAnalysis = _ref.quizAnalysis,
|
|
@@ -48,11 +52,12 @@ var withAnalysisStatePresenter = function withAnalysisStatePresenter(OriginalCom
|
|
|
48
52
|
generateAnalysis = _ref.generateAnalysis,
|
|
49
53
|
fetchQuizAnalysis = _ref.fetchQuizAnalysis,
|
|
50
54
|
fetchItemAnalyses = _ref.fetchItemAnalyses,
|
|
55
|
+
getAnalysesExport = _ref.getAnalysesExport,
|
|
51
56
|
fetchAnalysesStatus = _ref.fetchAnalysesStatus,
|
|
52
57
|
statusPollingInProgress = _ref.statusPollingInProgress,
|
|
53
58
|
setStatusPollingInProgress = _ref.setStatusPollingInProgress,
|
|
54
59
|
pollingInterval = _ref.pollingInterval,
|
|
55
|
-
passThroughProps = (0, _objectWithoutProperties2.default)(_ref, ["quizAnalysis", "itemAnalyses", "fetchInProgress", "generationInProgress", "analysisError", "setQuizAnalysis", "addError", "setItemAnalyses", "setFetchInProgress", "setGenerationInProgress", "setAnalysisError", "activeQuizId", "generateAnalysis", "fetchQuizAnalysis", "fetchItemAnalyses", "fetchAnalysesStatus", "statusPollingInProgress", "setStatusPollingInProgress", "pollingInterval"]);
|
|
60
|
+
passThroughProps = (0, _objectWithoutProperties2.default)(_ref, ["quizAnalysis", "itemAnalyses", "fetchInProgress", "generationInProgress", "analysisError", "setQuizAnalysis", "addError", "setItemAnalyses", "setFetchInProgress", "setGenerationInProgress", "setAnalysisError", "activeQuizId", "generateAnalysis", "fetchQuizAnalysis", "fetchItemAnalyses", "getAnalysesExport", "fetchAnalysesStatus", "statusPollingInProgress", "setStatusPollingInProgress", "pollingInterval"]);
|
|
56
61
|
WithAnalysisStatePresenter.displayName = "WithAnalysisStatePresenter(".concat(OriginalComponent.displayName || OriginalComponent.name, ")");
|
|
57
62
|
|
|
58
63
|
var _useState = (0, _react.useState)(false),
|
|
@@ -122,6 +127,41 @@ var withAnalysisStatePresenter = function withAnalysisStatePresenter(OriginalCom
|
|
|
122
127
|
return _generateReports.apply(this, arguments);
|
|
123
128
|
}
|
|
124
129
|
|
|
130
|
+
function exportReports(_x) {
|
|
131
|
+
return _exportReports.apply(this, arguments);
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
function _exportReports() {
|
|
135
|
+
_exportReports = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee4(format) {
|
|
136
|
+
var filter,
|
|
137
|
+
exportConfig,
|
|
138
|
+
_args4 = arguments;
|
|
139
|
+
return _regenerator.default.wrap(function _callee4$(_context4) {
|
|
140
|
+
while (1) {
|
|
141
|
+
switch (_context4.prev = _context4.next) {
|
|
142
|
+
case 0:
|
|
143
|
+
filter = _args4.length > 1 && _args4[1] !== void 0 ? _args4[1] : 'last_attempt';
|
|
144
|
+
exportConfig = {
|
|
145
|
+
getAnalysesExport: getAnalysesExport,
|
|
146
|
+
format: format,
|
|
147
|
+
filter: filter,
|
|
148
|
+
activeQuizId: activeQuizId,
|
|
149
|
+
addError: addError,
|
|
150
|
+
saveFile: _utils.saveFile
|
|
151
|
+
};
|
|
152
|
+
_context4.next = 4;
|
|
153
|
+
return (0, _exportReports2.exportReports)(exportConfig);
|
|
154
|
+
|
|
155
|
+
case 4:
|
|
156
|
+
case "end":
|
|
157
|
+
return _context4.stop();
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
}, _callee4);
|
|
161
|
+
}));
|
|
162
|
+
return _exportReports.apply(this, arguments);
|
|
163
|
+
}
|
|
164
|
+
|
|
125
165
|
(0, _react.useEffect)(function () {
|
|
126
166
|
var fetchIfNeeded = /*#__PURE__*/function () {
|
|
127
167
|
var _ref2 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee() {
|
|
@@ -193,6 +233,7 @@ var withAnalysisStatePresenter = function withAnalysisStatePresenter(OriginalCom
|
|
|
193
233
|
generationInProgress: generationInProgress,
|
|
194
234
|
analysisError: analysisError,
|
|
195
235
|
generateReports: generateReports,
|
|
236
|
+
exportReports: exportReports,
|
|
196
237
|
analysisFetchError: analysisFetchError
|
|
197
238
|
}, passThroughProps));
|
|
198
239
|
};
|
|
@@ -214,6 +255,7 @@ var withAnalysisStatePresenter = function withAnalysisStatePresenter(OriginalCom
|
|
|
214
255
|
fetchQuizAnalysis: _propTypes.default.func.isRequired,
|
|
215
256
|
fetchItemAnalyses: _propTypes.default.func.isRequired,
|
|
216
257
|
fetchAnalysesStatus: _propTypes.default.func.isRequired,
|
|
258
|
+
getAnalysesExport: _propTypes.default.func.isRequired,
|
|
217
259
|
addError: _propTypes.default.func.isRequired,
|
|
218
260
|
pollingInterval: _propTypes.default.number.isRequired,
|
|
219
261
|
generateAnalysis: _propTypes.default.func.isRequired // from LTI, f(filter: string, onError?: func(error))
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@instructure/quiz-core",
|
|
3
|
-
"version": "18.
|
|
3
|
+
"version": "18.6.0",
|
|
4
4
|
"license": "MIT",
|
|
5
5
|
"description": "The Quiz React SDK by Instructure Inc.",
|
|
6
6
|
"author": "Instructure, Inc. Engineering and Product Design",
|
|
@@ -43,11 +43,11 @@
|
|
|
43
43
|
"dependencies": {
|
|
44
44
|
"@instructure/grading-utils": "^1.0.0",
|
|
45
45
|
"@instructure/outcomes-ui": "^2.1.9",
|
|
46
|
-
"@instructure/quiz-common": "18.
|
|
47
|
-
"@instructure/quiz-i18n": "18.
|
|
48
|
-
"@instructure/quiz-interactions": "18.
|
|
49
|
-
"@instructure/quiz-number-input": "18.
|
|
50
|
-
"@instructure/quiz-rce": "18.
|
|
46
|
+
"@instructure/quiz-common": "^18.6.0",
|
|
47
|
+
"@instructure/quiz-i18n": "^18.6.0",
|
|
48
|
+
"@instructure/quiz-interactions": "^18.6.0",
|
|
49
|
+
"@instructure/quiz-number-input": "^18.6.0",
|
|
50
|
+
"@instructure/quiz-rce": "^18.6.0",
|
|
51
51
|
"@instructure/ui-a11y-content": "^7.22.1",
|
|
52
52
|
"@instructure/ui-alerts": "^7.22.1",
|
|
53
53
|
"@instructure/ui-avatar": "^7.22.1",
|
|
@@ -106,9 +106,10 @@
|
|
|
106
106
|
"d3-transition": "^1",
|
|
107
107
|
"date-fns": "^1.28.0",
|
|
108
108
|
"eventemitter3": "^3.1.0",
|
|
109
|
+
"file-saver": "~2.0.5",
|
|
109
110
|
"humps": "^2.0.0",
|
|
110
111
|
"immutable": "^3.8.1",
|
|
111
|
-
"instructure-validations": "18.
|
|
112
|
+
"instructure-validations": "^18.6.0",
|
|
112
113
|
"ipaddr.js": "^1.5.4",
|
|
113
114
|
"isomorphic-fetch": "^2.2.0",
|
|
114
115
|
"isuuid": "^0.1.0",
|
|
@@ -140,7 +141,7 @@
|
|
|
140
141
|
"uuid": "^3.2.1"
|
|
141
142
|
},
|
|
142
143
|
"devDependencies": {
|
|
143
|
-
"@instructure/quiz-scripts": "18.
|
|
144
|
+
"@instructure/quiz-scripts": "^18.6.0",
|
|
144
145
|
"@instructure/ui-axe-check": "^7.22.1",
|
|
145
146
|
"@instructure/ui-babel-preset": "^7.22.1",
|
|
146
147
|
"@instructure/ui-karma-config": "^7.22.1",
|
|
@@ -159,7 +160,7 @@
|
|
|
159
160
|
"intl": "^1.2.4",
|
|
160
161
|
"jquery": "^2.2.3",
|
|
161
162
|
"most-subject": "^5.3.0",
|
|
162
|
-
"quiz-presets": "18.
|
|
163
|
+
"quiz-presets": "^18.6.0",
|
|
163
164
|
"react": "^16.8.6",
|
|
164
165
|
"react-addons-test-utils": "^15.6.2",
|
|
165
166
|
"react-dom": "^16.8.6",
|
|
@@ -175,5 +176,5 @@
|
|
|
175
176
|
"publishConfig": {
|
|
176
177
|
"access": "public"
|
|
177
178
|
},
|
|
178
|
-
"gitHead": "
|
|
179
|
+
"gitHead": "dddcaa8802c8344705537cacfbc0b9638c25be4c"
|
|
179
180
|
}
|