@instructure/quiz-core 17.64.1-rc.2 → 17.64.1-rc.5

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 (21) hide show
  1. package/es/common/components/resources/quizSessionResult/Info/index.js +31 -1
  2. package/es/common/components/resources/sessionItemResult/SessionItemResult/presenter.js +3 -1
  3. package/es/common/components/resources/sessionItemResult/SessionItemResultsList/index.js +5 -0
  4. package/es/reporting/components/resources/NewQuizAndItemAnalysis/AnswerSummaryTable/Row/presenter.js +8 -4
  5. package/es/reporting/components/resources/NewQuizAndItemAnalysis/AnswerSummaryTable/presenter.js +4 -1
  6. package/es/reporting/components/resources/NewQuizAndItemAnalysis/NewItemAnalysis/presenter.js +3 -3
  7. package/es/reporting/components/resources/NewQuizAndItemAnalysis/NewQuizAnalysis/presenter.js +4 -4
  8. package/es/reporting/components/resources/NewQuizAndItemAnalysis/charts/ScoreDistribution/presenter.js +1 -1
  9. package/es/reporting/components/resources/NewQuizAndItemAnalysis/presenter.js +1 -1
  10. package/es/reporting/components/resources/NewQuizAndItemAnalysis/utils.js +10 -1
  11. package/lib/common/components/resources/quizSessionResult/Info/index.js +33 -1
  12. package/lib/common/components/resources/sessionItemResult/SessionItemResult/presenter.js +3 -1
  13. package/lib/common/components/resources/sessionItemResult/SessionItemResultsList/index.js +6 -0
  14. package/lib/reporting/components/resources/NewQuizAndItemAnalysis/AnswerSummaryTable/Row/presenter.js +8 -4
  15. package/lib/reporting/components/resources/NewQuizAndItemAnalysis/AnswerSummaryTable/presenter.js +4 -1
  16. package/lib/reporting/components/resources/NewQuizAndItemAnalysis/NewItemAnalysis/presenter.js +3 -3
  17. package/lib/reporting/components/resources/NewQuizAndItemAnalysis/NewQuizAnalysis/presenter.js +4 -4
  18. package/lib/reporting/components/resources/NewQuizAndItemAnalysis/charts/ScoreDistribution/presenter.js +1 -1
  19. package/lib/reporting/components/resources/NewQuizAndItemAnalysis/presenter.js +1 -1
  20. package/lib/reporting/components/resources/NewQuizAndItemAnalysis/utils.js +10 -1
  21. package/package.json +10 -9
@@ -7,6 +7,7 @@ import _createSuper from "@babel/runtime/helpers/esm/createSuper";
7
7
  var _dec, _class, _class2, _temp;
8
8
 
9
9
  import React, { Component } from 'react';
10
+ import PropTypes from 'prop-types';
10
11
  import ImmutablePropTypes from 'react-immutable-proptypes';
11
12
  import classNames from 'classnames';
12
13
  import { AccessibleContent, ScreenReaderContent } from '@instructure/ui-a11y-content';
@@ -17,6 +18,7 @@ import { Heading } from '@instructure/ui-heading';
17
18
  import { View } from '@instructure/ui-view';
18
19
  import { themeable } from '@instructure/ui-themeable';
19
20
  import t from '@instructure/quiz-i18n/es/format-message';
21
+ import { scoreToLetterGrade } from '@instructure/grading-utils';
20
22
  import { withI18nSupport } from '@instructure/quiz-common';
21
23
  import FormattedDuration from "../../../shared/FormattedDuration/index.js";
22
24
  import { formatTime } from "../../../../util/formatTimespan.js";
@@ -114,6 +116,26 @@ export var Info = (_dec = themeable(theme, styles), _dec(_class = (_temp = _clas
114
116
  }, alerts));
115
117
  }
116
118
  }
119
+ }, {
120
+ key: "renderLetterGrade",
121
+ value: function renderLetterGrade() {
122
+ var letterGrade = scoreToLetterGrade(this.percentageVal * 100, this.props.gradingScheme);
123
+ var gradeText = t('Grade for this attempt');
124
+ var alt = t('Grade for this attempt: { grade }', {
125
+ grade: letterGrade
126
+ });
127
+ return /*#__PURE__*/React.createElement(AccessibleContent, {
128
+ alt: alt
129
+ }, /*#__PURE__*/React.createElement(View, {
130
+ as: "div"
131
+ }, /*#__PURE__*/React.createElement(Text, {
132
+ size: "xx-large",
133
+ weight: "bold",
134
+ color: "primary"
135
+ }, letterGrade)), /*#__PURE__*/React.createElement(Text, {
136
+ color: "secondary"
137
+ }, gradeText));
138
+ }
117
139
  }, {
118
140
  key: "renderScoreStats",
119
141
  value: function renderScoreStats() {
@@ -186,7 +208,7 @@ export var Info = (_dec = themeable(theme, styles), _dec(_class = (_temp = _clas
186
208
  className: classNames('fs-mask', styles.info)
187
209
  }, /*#__PURE__*/React.createElement(ScreenReaderContent, null, /*#__PURE__*/React.createElement(Heading, {
188
210
  level: "h2"
189
- }, t('Assessment Statistics'))), this.renderScoreStats(), /*#__PURE__*/React.createElement("div", {
211
+ }, t('Assessment Statistics'))), this.props.restrictQuantitativeData ? this.renderLetterGrade() : this.renderScoreStats(), /*#__PURE__*/React.createElement("div", {
190
212
  className: styles.infoWrapper
191
213
  }, this.renderTime()))));
192
214
  }
@@ -286,8 +308,16 @@ export var Info = (_dec = themeable(theme, styles), _dec(_class = (_temp = _clas
286
308
  Info.displayName = "Info";
287
309
  return Info;
288
310
  }(withI18nSupport(Component)), _class2.propTypes = {
311
+ gradingScheme: PropTypes.arrayOf(PropTypes.shape({
312
+ name: PropTypes.string,
313
+ value: PropTypes.number
314
+ })),
289
315
  quizSession: ImmutablePropTypes.record.isRequired,
290
316
  quizSessionResult: ImmutablePropTypes.record.isRequired,
317
+ restrictQuantitativeData: PropTypes.bool,
291
318
  sessionItemResults: ImmutablePropTypes.list.isRequired
319
+ }, _class2.defaultProps = {
320
+ gradingScheme: [],
321
+ restrictQuantitativeData: false
292
322
  }, _temp)) || _class);
293
323
  export default Info;
@@ -136,7 +136,7 @@ export var SessionItemResult = (_dec = themeable(theme, styles), _dec(_class = (
136
136
  value: function renderHeader() {
137
137
  return /*#__PURE__*/React.createElement("div", {
138
138
  className: styles.sessionItemResultHeader
139
- }, this.renderResultPosition(), this.hasRegradeInfo() ? this.renderRegradePoints() : this.renderPoints());
139
+ }, this.renderResultPosition(), !this.props.restrictQuantitativeData && (this.hasRegradeInfo() ? this.renderRegradePoints() : this.renderPoints()));
140
140
  }
141
141
  }, {
142
142
  key: "renderResultPosition",
@@ -345,6 +345,7 @@ export var SessionItemResult = (_dec = themeable(theme, styles), _dec(_class = (
345
345
  editGraderFeedback: PropTypes.func,
346
346
  hideGraderFeedback: PropTypes.bool,
347
347
  itemResultsModifications: ImmutablePropTypes.map,
348
+ restrictQuantitativeData: PropTypes.bool,
348
349
  sessionItem: ImmutablePropTypes.record.isRequired,
349
350
  sessionItemResult: ImmutablePropTypes.record.isRequired,
350
351
  shouldRenderAnswerFeedback: PropTypes.bool,
@@ -353,6 +354,7 @@ export var SessionItemResult = (_dec = themeable(theme, styles), _dec(_class = (
353
354
  editGraderFeedback: null,
354
355
  hideGraderFeedback: false,
355
356
  itemResultsModifications: null,
357
+ restrictQuantitativeData: false,
356
358
  shouldRenderAnswerFeedback: false,
357
359
  shouldRenderTopBorder: true
358
360
  }, _temp)) || _class);
@@ -6,6 +6,7 @@ import _createSuper from "@babel/runtime/helpers/esm/createSuper";
6
6
  var _dec, _class, _class2, _temp;
7
7
 
8
8
  import React, { Component } from 'react';
9
+ import PropTypes from 'prop-types';
9
10
  import ImmutablePropTypes from 'react-immutable-proptypes';
10
11
  import { Heading } from '@instructure/ui-heading';
11
12
  import { themeable } from '@instructure/ui-themeable';
@@ -44,6 +45,7 @@ export var SessionItemResultsList = (_dec = themeable(theme, styles), _dec(_clas
44
45
  return /*#__PURE__*/React.createElement(SessionItemResult, {
45
46
  appContainer: _this.props.appContainer,
46
47
  key: sessionItem.id,
48
+ restrictQuantitativeData: _this.props.restrictQuantitativeData,
47
49
  sessionItem: sessionItem,
48
50
  sessionItemResult: sessionItem.sessionItemResult,
49
51
  shouldRenderTopBorder: shouldRenderTopBorder
@@ -93,6 +95,9 @@ export var SessionItemResultsList = (_dec = themeable(theme, styles), _dec(_clas
93
95
  return SessionItemResultsList;
94
96
  }(Component), _class2.propTypes = {
95
97
  appContainer: CustomPropTypes.selectors.isRequired,
98
+ restrictQuantitativeData: PropTypes.bool,
96
99
  sessionItems: ImmutablePropTypes.list.isRequired
100
+ }, _class2.defaultProps = {
101
+ restrictQuantitativeData: false
97
102
  }, _temp)) || _class);
98
103
  export default SessionItemResultsList;
@@ -75,20 +75,24 @@ export var Row = (_dec = themeable(theme, styles), _dec(_class = (_temp = _class
75
75
  key: _this.props.choiceIndex
76
76
  }, /*#__PURE__*/React.createElement(Table.Cell, {
77
77
  theme: {
78
- padding: '0px'
78
+ padding: '0px',
79
+ fontWeight: 'bold'
79
80
  }
80
81
  }, _this.renderIcon(correct)), /*#__PURE__*/React.createElement(Table.RowHeader, {
81
82
  theme: {
82
- padding: cellPadding
83
+ padding: cellPadding,
84
+ fontWeight: 'bold'
83
85
  },
84
86
  className: styles.tableBody
85
87
  }, _this.renderMiddleCell(correct, extractTextFromHtml(_this.props.choice.body))), /*#__PURE__*/React.createElement(Table.Cell, {
86
88
  theme: {
87
- padding: cellPadding
89
+ padding: cellPadding,
90
+ fontWeight: 'bold'
88
91
  }
89
92
  }, _this.renderMiddleCell(correct, _this.props.choice.count)), /*#__PURE__*/React.createElement(Table.Cell, {
90
93
  theme: {
91
- padding: cellPadding
94
+ padding: cellPadding,
95
+ fontWeight: 'bold'
92
96
  },
93
97
  textAlign: "center"
94
98
  }, _this.renderLastCell(correct, "".concat(_this.props.choice.percentage, "%"))));
@@ -48,7 +48,10 @@ export var AnswerSummaryTable = (_dec = themeable(theme, styles), _dec(_class =
48
48
  className: styles.tableWrapper
49
49
  }, /*#__PURE__*/React.createElement(Heading, {
50
50
  margin: "large 0 small 0",
51
- level: "h3"
51
+ level: "h3",
52
+ theme: {
53
+ h3FontWeight: 'normal'
54
+ }
52
55
  }, t('Answer Frequency Summary')), /*#__PURE__*/React.createElement(ChoiceInfo, {
53
56
  itemId: itemId,
54
57
  choices: choices,
@@ -143,7 +143,7 @@ export var NewItemAnalysis = (_dec = themeable(theme, styles), _dec(_class = (_t
143
143
  }, /*#__PURE__*/React.createElement(AnalysisPopoverMetric, {
144
144
  metricKey: "difficulty_index",
145
145
  label: t('Item Difficulty'),
146
- value: t.number(scores.difficulty_index),
146
+ value: scores.difficulty_index,
147
147
  popoverDescription: difficultyIndex
148
148
  })), /*#__PURE__*/React.createElement(Flex.Item, {
149
149
  margin: "none medium none none"
@@ -162,7 +162,7 @@ export var NewItemAnalysis = (_dec = themeable(theme, styles), _dec(_class = (_t
162
162
  }, /*#__PURE__*/React.createElement(AnalysisPopoverMetric, {
163
163
  metricKey: "discrimination_index",
164
164
  label: t('Discrimination Index'),
165
- value: t.number(scores.discrimination_index),
165
+ value: scores.discrimination_index,
166
166
  popoverDescription: discriminationIndex
167
167
  })))), /*#__PURE__*/React.createElement(Flex.Item, {
168
168
  overflowY: "visible",
@@ -176,7 +176,7 @@ export var NewItemAnalysis = (_dec = themeable(theme, styles), _dec(_class = (_t
176
176
  }, /*#__PURE__*/React.createElement(AnalysisPopoverMetric, {
177
177
  metricKey: "pearson_correlation",
178
178
  label: t('Corrected Item-Total Correlation Coefficient'),
179
- value: t.number(scores.pearson_correlation),
179
+ value: scores.pearson_correlation,
180
180
  popoverDescription: pearsonCorrelation
181
181
  }))))));
182
182
  };
@@ -63,12 +63,12 @@ export var NewQuizAnalysis = (_dec = themeable(theme, styles), _dec(_class = (_t
63
63
  className: styles.metricGroup
64
64
  }, /*#__PURE__*/React.createElement(AnalysisPopoverMetric, {
65
65
  metricKey: "stddev",
66
- value: t.number(scores === null || scores === void 0 ? void 0 : scores.stddev),
66
+ value: scores === null || scores === void 0 ? void 0 : scores.stddev,
67
67
  label: t('Standard Deviation'),
68
68
  popoverDescription: standardDeviation
69
69
  }), /*#__PURE__*/React.createElement(AnalysisPopoverMetric, {
70
70
  metricKey: "cronbachs_alpha",
71
- value: t.number(scores === null || scores === void 0 ? void 0 : scores.cronbachs_alpha),
71
+ value: scores === null || scores === void 0 ? void 0 : scores.cronbachs_alpha,
72
72
  label: t('Cronbach\'s Alpha'),
73
73
  popoverDescription: cronbachsAlpha
74
74
  })));
@@ -117,7 +117,7 @@ export var NewQuizAnalysis = (_dec = themeable(theme, styles), _dec(_class = (_t
117
117
  }, /*#__PURE__*/React.createElement(AnalysisMetric, {
118
118
  metricKey: "median_percentage",
119
119
  label: t('Median Score'),
120
- value: t.number(scores === null || scores === void 0 ? void 0 : scores.median_percentage),
120
+ value: scores === null || scores === void 0 ? void 0 : scores.median_percentage,
121
121
  suffix: "%"
122
122
  }), /*#__PURE__*/React.createElement(AnalysisMetric, {
123
123
  metricKey: "mean_elapsed_sec",
@@ -130,7 +130,7 @@ export var NewQuizAnalysis = (_dec = themeable(theme, styles), _dec(_class = (_t
130
130
  title: expanded ? t('collapse quiz analysis') : t('expand quiz analysis'),
131
131
  isExpanded: expanded
132
132
  }))), expanded && this.renderExpanded(), /*#__PURE__*/React.createElement(ScoreDistribution, {
133
- decileDistribution: quizAnalysis.scores.decile_distribution
133
+ decileDistribution: scores === null || scores === void 0 ? void 0 : scores.decile_distribution
134
134
  }));
135
135
  }
136
136
  }]);
@@ -62,7 +62,7 @@ export var ScoreDistribution = (_dec = themeable(theme, styles), _dec(_class = (
62
62
  }, t('Score Distribution'))), /*#__PURE__*/React.createElement(QuintileDistribution, {
63
63
  animateDelay: 1000,
64
64
  animateDuration: 1000,
65
- visualDistribution: this.props.decileDistribution,
65
+ visualDistribution: this.props.decileDistribution || [],
66
66
  calculateLabelForColumn: this.calculateLabelForColumn
67
67
  }), /*#__PURE__*/React.createElement("div", {
68
68
  className: styles.chartLabel
@@ -43,7 +43,7 @@ export var NewQuizAndItemAnalysisPresenter = /*#__PURE__*/function (_Component)
43
43
  })), /*#__PURE__*/React.createElement(NewQuizAnalysis, {
44
44
  quizAnalysis: quizAnalysis
45
45
  }), /*#__PURE__*/React.createElement(Heading, {
46
- level: "h3",
46
+ level: "h2",
47
47
  color: "primary"
48
48
  }, t('Item Analysis')), itemAnalyses === null || itemAnalyses === void 0 ? void 0 : itemAnalyses.map(function (itemAnalysis) {
49
49
  return /*#__PURE__*/React.createElement(NewItemAnalysis, {
@@ -1,11 +1,20 @@
1
1
  import t from '@instructure/quiz-i18n/es/format-message';
2
2
 
3
+ var formatNumbers = function formatNumbers(value) {
4
+ if (typeof value === 'number') {
5
+ return t.number(value);
6
+ }
7
+
8
+ return value;
9
+ };
10
+
3
11
  var getSanitizedMetricValue = function getSanitizedMetricValue(value, suffix) {
4
12
  if (value === null || value === void 0) {
5
13
  return t('N/A');
6
14
  }
7
15
 
8
- return suffix ? value + suffix : value;
16
+ var formattedValue = formatNumbers(value);
17
+ return suffix ? formattedValue + suffix : formattedValue;
9
18
  };
10
19
 
11
20
  export { getSanitizedMetricValue };
@@ -21,6 +21,8 @@ var _createSuper2 = _interopRequireDefault(require("@babel/runtime/helpers/creat
21
21
 
22
22
  var _react = _interopRequireWildcard(require("react"));
23
23
 
24
+ var _propTypes = _interopRequireDefault(require("prop-types"));
25
+
24
26
  var _reactImmutableProptypes = _interopRequireDefault(require("react-immutable-proptypes"));
25
27
 
26
28
  var _classnames = _interopRequireDefault(require("classnames"));
@@ -41,6 +43,8 @@ var _uiThemeable = require("@instructure/ui-themeable");
41
43
 
42
44
  var _formatMessage = _interopRequireDefault(require("@instructure/quiz-i18n/es/format-message"));
43
45
 
46
+ var _gradingUtils = require("@instructure/grading-utils");
47
+
44
48
  var _quizCommon = require("@instructure/quiz-common");
45
49
 
46
50
  var _index = _interopRequireDefault(require("../../../shared/FormattedDuration/index.js"));
@@ -143,6 +147,26 @@ var Info = (_dec = (0, _uiThemeable.themeable)(_theme.default, styles), _dec(_cl
143
147
  }, alerts));
144
148
  }
145
149
  }
150
+ }, {
151
+ key: "renderLetterGrade",
152
+ value: function renderLetterGrade() {
153
+ var letterGrade = (0, _gradingUtils.scoreToLetterGrade)(this.percentageVal * 100, this.props.gradingScheme);
154
+ var gradeText = (0, _formatMessage.default)('Grade for this attempt');
155
+ var alt = (0, _formatMessage.default)('Grade for this attempt: { grade }', {
156
+ grade: letterGrade
157
+ });
158
+ return /*#__PURE__*/_react.default.createElement(_uiA11yContent.AccessibleContent, {
159
+ alt: alt
160
+ }, /*#__PURE__*/_react.default.createElement(_uiView.View, {
161
+ as: "div"
162
+ }, /*#__PURE__*/_react.default.createElement(_uiText.Text, {
163
+ size: "xx-large",
164
+ weight: "bold",
165
+ color: "primary"
166
+ }, letterGrade)), /*#__PURE__*/_react.default.createElement(_uiText.Text, {
167
+ color: "secondary"
168
+ }, gradeText));
169
+ }
146
170
  }, {
147
171
  key: "renderScoreStats",
148
172
  value: function renderScoreStats() {
@@ -215,7 +239,7 @@ var Info = (_dec = (0, _uiThemeable.themeable)(_theme.default, styles), _dec(_cl
215
239
  className: (0, _classnames.default)('fs-mask', styles.info)
216
240
  }, /*#__PURE__*/_react.default.createElement(_uiA11yContent.ScreenReaderContent, null, /*#__PURE__*/_react.default.createElement(_uiHeading.Heading, {
217
241
  level: "h2"
218
- }, (0, _formatMessage.default)('Assessment Statistics'))), this.renderScoreStats(), /*#__PURE__*/_react.default.createElement("div", {
242
+ }, (0, _formatMessage.default)('Assessment Statistics'))), this.props.restrictQuantitativeData ? this.renderLetterGrade() : this.renderScoreStats(), /*#__PURE__*/_react.default.createElement("div", {
219
243
  className: styles.infoWrapper
220
244
  }, this.renderTime()))));
221
245
  }
@@ -314,9 +338,17 @@ var Info = (_dec = (0, _uiThemeable.themeable)(_theme.default, styles), _dec(_cl
314
338
  Info.displayName = "Info";
315
339
  return Info;
316
340
  }((0, _quizCommon.withI18nSupport)(_react.Component)), _class2.propTypes = {
341
+ gradingScheme: _propTypes.default.arrayOf(_propTypes.default.shape({
342
+ name: _propTypes.default.string,
343
+ value: _propTypes.default.number
344
+ })),
317
345
  quizSession: _reactImmutableProptypes.default.record.isRequired,
318
346
  quizSessionResult: _reactImmutableProptypes.default.record.isRequired,
347
+ restrictQuantitativeData: _propTypes.default.bool,
319
348
  sessionItemResults: _reactImmutableProptypes.default.list.isRequired
349
+ }, _class2.defaultProps = {
350
+ gradingScheme: [],
351
+ restrictQuantitativeData: false
320
352
  }, _temp)) || _class);
321
353
  exports.Info = Info;
322
354
  var _default = Info;
@@ -168,7 +168,7 @@ var SessionItemResult = (_dec = (0, _uiThemeable.themeable)(_theme.default, styl
168
168
  value: function renderHeader() {
169
169
  return /*#__PURE__*/_react.default.createElement("div", {
170
170
  className: styles.sessionItemResultHeader
171
- }, this.renderResultPosition(), this.hasRegradeInfo() ? this.renderRegradePoints() : this.renderPoints());
171
+ }, this.renderResultPosition(), !this.props.restrictQuantitativeData && (this.hasRegradeInfo() ? this.renderRegradePoints() : this.renderPoints()));
172
172
  }
173
173
  }, {
174
174
  key: "renderResultPosition",
@@ -376,6 +376,7 @@ var SessionItemResult = (_dec = (0, _uiThemeable.themeable)(_theme.default, styl
376
376
  editGraderFeedback: _propTypes.default.func,
377
377
  hideGraderFeedback: _propTypes.default.bool,
378
378
  itemResultsModifications: _reactImmutableProptypes.default.map,
379
+ restrictQuantitativeData: _propTypes.default.bool,
379
380
  sessionItem: _reactImmutableProptypes.default.record.isRequired,
380
381
  sessionItemResult: _reactImmutableProptypes.default.record.isRequired,
381
382
  shouldRenderAnswerFeedback: _propTypes.default.bool,
@@ -384,6 +385,7 @@ var SessionItemResult = (_dec = (0, _uiThemeable.themeable)(_theme.default, styl
384
385
  editGraderFeedback: null,
385
386
  hideGraderFeedback: false,
386
387
  itemResultsModifications: null,
388
+ restrictQuantitativeData: false,
387
389
  shouldRenderAnswerFeedback: false,
388
390
  shouldRenderTopBorder: true
389
391
  }, _temp)) || _class);
@@ -19,6 +19,8 @@ var _createSuper2 = _interopRequireDefault(require("@babel/runtime/helpers/creat
19
19
 
20
20
  var _react = _interopRequireWildcard(require("react"));
21
21
 
22
+ var _propTypes = _interopRequireDefault(require("prop-types"));
23
+
22
24
  var _reactImmutableProptypes = _interopRequireDefault(require("react-immutable-proptypes"));
23
25
 
24
26
  var _uiHeading = require("@instructure/ui-heading");
@@ -68,6 +70,7 @@ var SessionItemResultsList = (_dec = (0, _uiThemeable.themeable)(_theme.default,
68
70
  return /*#__PURE__*/_react.default.createElement(_index.default, {
69
71
  appContainer: _this.props.appContainer,
70
72
  key: sessionItem.id,
73
+ restrictQuantitativeData: _this.props.restrictQuantitativeData,
71
74
  sessionItem: sessionItem,
72
75
  sessionItemResult: sessionItem.sessionItemResult,
73
76
  shouldRenderTopBorder: shouldRenderTopBorder
@@ -116,7 +119,10 @@ var SessionItemResultsList = (_dec = (0, _uiThemeable.themeable)(_theme.default,
116
119
  return SessionItemResultsList;
117
120
  }(_react.Component), _class2.propTypes = {
118
121
  appContainer: _CustomPropTypes.default.selectors.isRequired,
122
+ restrictQuantitativeData: _propTypes.default.bool,
119
123
  sessionItems: _reactImmutableProptypes.default.list.isRequired
124
+ }, _class2.defaultProps = {
125
+ restrictQuantitativeData: false
120
126
  }, _temp)) || _class);
121
127
  exports.SessionItemResultsList = SessionItemResultsList;
122
128
  var _default = SessionItemResultsList;
@@ -97,20 +97,24 @@ var Row = (_dec = (0, _uiThemeable.themeable)(_theme.default, styles), _dec(_cla
97
97
  key: _this.props.choiceIndex
98
98
  }, /*#__PURE__*/_react.default.createElement(_uiTable.Table.Cell, {
99
99
  theme: {
100
- padding: '0px'
100
+ padding: '0px',
101
+ fontWeight: 'bold'
101
102
  }
102
103
  }, _this.renderIcon(correct)), /*#__PURE__*/_react.default.createElement(_uiTable.Table.RowHeader, {
103
104
  theme: {
104
- padding: cellPadding
105
+ padding: cellPadding,
106
+ fontWeight: 'bold'
105
107
  },
106
108
  className: styles.tableBody
107
109
  }, _this.renderMiddleCell(correct, (0, _quizInteractions.extractTextFromHtml)(_this.props.choice.body))), /*#__PURE__*/_react.default.createElement(_uiTable.Table.Cell, {
108
110
  theme: {
109
- padding: cellPadding
111
+ padding: cellPadding,
112
+ fontWeight: 'bold'
110
113
  }
111
114
  }, _this.renderMiddleCell(correct, _this.props.choice.count)), /*#__PURE__*/_react.default.createElement(_uiTable.Table.Cell, {
112
115
  theme: {
113
- padding: cellPadding
116
+ padding: cellPadding,
117
+ fontWeight: 'bold'
114
118
  },
115
119
  textAlign: "center"
116
120
  }, _this.renderLastCell(correct, "".concat(_this.props.choice.percentage, "%"))));
@@ -69,7 +69,10 @@ var AnswerSummaryTable = (_dec = (0, _uiThemeable.themeable)(_theme.default, sty
69
69
  className: styles.tableWrapper
70
70
  }, /*#__PURE__*/_react.default.createElement(_uiHeading.Heading, {
71
71
  margin: "large 0 small 0",
72
- level: "h3"
72
+ level: "h3",
73
+ theme: {
74
+ h3FontWeight: 'normal'
75
+ }
73
76
  }, (0, _formatMessage.default)('Answer Frequency Summary')), /*#__PURE__*/_react.default.createElement(_presenter.ChoiceInfo, {
74
77
  itemId: itemId,
75
78
  choices: choices,
@@ -175,7 +175,7 @@ var NewItemAnalysis = (_dec = (0, _uiThemeable.themeable)(_theme.default, styles
175
175
  }, /*#__PURE__*/_react.default.createElement(_index4.default, {
176
176
  metricKey: "difficulty_index",
177
177
  label: (0, _formatMessage.default)('Item Difficulty'),
178
- value: _formatMessage.default.number(scores.difficulty_index),
178
+ value: scores.difficulty_index,
179
179
  popoverDescription: _popoverContent.difficultyIndex
180
180
  })), /*#__PURE__*/_react.default.createElement(_uiFlex.Flex.Item, {
181
181
  margin: "none medium none none"
@@ -194,7 +194,7 @@ var NewItemAnalysis = (_dec = (0, _uiThemeable.themeable)(_theme.default, styles
194
194
  }, /*#__PURE__*/_react.default.createElement(_index4.default, {
195
195
  metricKey: "discrimination_index",
196
196
  label: (0, _formatMessage.default)('Discrimination Index'),
197
- value: _formatMessage.default.number(scores.discrimination_index),
197
+ value: scores.discrimination_index,
198
198
  popoverDescription: _popoverContent.discriminationIndex
199
199
  })))), /*#__PURE__*/_react.default.createElement(_uiFlex.Flex.Item, {
200
200
  overflowY: "visible",
@@ -208,7 +208,7 @@ var NewItemAnalysis = (_dec = (0, _uiThemeable.themeable)(_theme.default, styles
208
208
  }, /*#__PURE__*/_react.default.createElement(_index4.default, {
209
209
  metricKey: "pearson_correlation",
210
210
  label: (0, _formatMessage.default)('Corrected Item-Total Correlation Coefficient'),
211
- value: _formatMessage.default.number(scores.pearson_correlation),
211
+ value: scores.pearson_correlation,
212
212
  popoverDescription: _popoverContent.pearsonCorrelation
213
213
  }))))));
214
214
  };
@@ -90,12 +90,12 @@ var NewQuizAnalysis = (_dec = (0, _uiThemeable.themeable)(_theme.default, styles
90
90
  className: styles.metricGroup
91
91
  }, /*#__PURE__*/_react.default.createElement(_index3.default, {
92
92
  metricKey: "stddev",
93
- value: _formatMessage.default.number(scores === null || scores === void 0 ? void 0 : scores.stddev),
93
+ value: scores === null || scores === void 0 ? void 0 : scores.stddev,
94
94
  label: (0, _formatMessage.default)('Standard Deviation'),
95
95
  popoverDescription: _popoverContent.standardDeviation
96
96
  }), /*#__PURE__*/_react.default.createElement(_index3.default, {
97
97
  metricKey: "cronbachs_alpha",
98
- value: _formatMessage.default.number(scores === null || scores === void 0 ? void 0 : scores.cronbachs_alpha),
98
+ value: scores === null || scores === void 0 ? void 0 : scores.cronbachs_alpha,
99
99
  label: (0, _formatMessage.default)('Cronbach\'s Alpha'),
100
100
  popoverDescription: _popoverContent.cronbachsAlpha
101
101
  })));
@@ -144,7 +144,7 @@ var NewQuizAnalysis = (_dec = (0, _uiThemeable.themeable)(_theme.default, styles
144
144
  }, /*#__PURE__*/_react.default.createElement(_index4.default, {
145
145
  metricKey: "median_percentage",
146
146
  label: (0, _formatMessage.default)('Median Score'),
147
- value: _formatMessage.default.number(scores === null || scores === void 0 ? void 0 : scores.median_percentage),
147
+ value: scores === null || scores === void 0 ? void 0 : scores.median_percentage,
148
148
  suffix: "%"
149
149
  }), /*#__PURE__*/_react.default.createElement(_index4.default, {
150
150
  metricKey: "mean_elapsed_sec",
@@ -157,7 +157,7 @@ var NewQuizAnalysis = (_dec = (0, _uiThemeable.themeable)(_theme.default, styles
157
157
  title: expanded ? (0, _formatMessage.default)('collapse quiz analysis') : (0, _formatMessage.default)('expand quiz analysis'),
158
158
  isExpanded: expanded
159
159
  }))), expanded && this.renderExpanded(), /*#__PURE__*/_react.default.createElement(_presenter.ScoreDistribution, {
160
- decileDistribution: quizAnalysis.scores.decile_distribution
160
+ decileDistribution: scores === null || scores === void 0 ? void 0 : scores.decile_distribution
161
161
  }));
162
162
  }
163
163
  }]);
@@ -84,7 +84,7 @@ var ScoreDistribution = (_dec = (0, _uiThemeable.themeable)(_theme.default, styl
84
84
  }, (0, _formatMessage.default)('Score Distribution'))), /*#__PURE__*/_react.default.createElement(_index.default, {
85
85
  animateDelay: 1000,
86
86
  animateDuration: 1000,
87
- visualDistribution: this.props.decileDistribution,
87
+ visualDistribution: this.props.decileDistribution || [],
88
88
  calculateLabelForColumn: this.calculateLabelForColumn
89
89
  }), /*#__PURE__*/_react.default.createElement("div", {
90
90
  className: styles.chartLabel
@@ -66,7 +66,7 @@ var NewQuizAndItemAnalysisPresenter = /*#__PURE__*/function (_Component) {
66
66
  })), /*#__PURE__*/_react.default.createElement(_index2.default, {
67
67
  quizAnalysis: quizAnalysis
68
68
  }), /*#__PURE__*/_react.default.createElement(_uiHeading.Heading, {
69
- level: "h3",
69
+ level: "h2",
70
70
  color: "primary"
71
71
  }, (0, _formatMessage.default)('Item Analysis')), itemAnalyses === null || itemAnalyses === void 0 ? void 0 : itemAnalyses.map(function (itemAnalysis) {
72
72
  return /*#__PURE__*/_react.default.createElement(_index.default, {
@@ -9,12 +9,21 @@ exports.getSanitizedMetricValue = void 0;
9
9
 
10
10
  var _formatMessage = _interopRequireDefault(require("@instructure/quiz-i18n/es/format-message"));
11
11
 
12
+ var formatNumbers = function formatNumbers(value) {
13
+ if (typeof value === 'number') {
14
+ return _formatMessage.default.number(value);
15
+ }
16
+
17
+ return value;
18
+ };
19
+
12
20
  var getSanitizedMetricValue = function getSanitizedMetricValue(value, suffix) {
13
21
  if (value === null || value === void 0) {
14
22
  return (0, _formatMessage.default)('N/A');
15
23
  }
16
24
 
17
- return suffix ? value + suffix : value;
25
+ var formattedValue = formatNumbers(value);
26
+ return suffix ? formattedValue + suffix : formattedValue;
18
27
  };
19
28
 
20
29
  exports.getSanitizedMetricValue = getSanitizedMetricValue;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@instructure/quiz-core",
3
- "version": "17.64.1-rc.2+819871daa",
3
+ "version": "17.64.1-rc.5+7ab6e1fd3",
4
4
  "license": "MIT",
5
5
  "description": "The Quiz React SDK by Instructure Inc.",
6
6
  "author": "Instructure, Inc. Engineering and Product Design",
@@ -40,12 +40,13 @@
40
40
  "lib"
41
41
  ],
42
42
  "dependencies": {
43
+ "@instructure/grading-utils": "^1.0.0",
43
44
  "@instructure/outcomes-ui": "^2.1.9",
44
- "@instructure/quiz-common": "17.64.1-rc.2+819871daa",
45
- "@instructure/quiz-i18n": "17.64.1-rc.2+819871daa",
46
- "@instructure/quiz-interactions": "17.64.1-rc.2+819871daa",
47
- "@instructure/quiz-number-input": "17.64.1-rc.2+819871daa",
48
- "@instructure/quiz-rce": "17.64.1-rc.2+819871daa",
45
+ "@instructure/quiz-common": "17.64.1-rc.5+7ab6e1fd3",
46
+ "@instructure/quiz-i18n": "17.64.1-rc.5+7ab6e1fd3",
47
+ "@instructure/quiz-interactions": "17.64.1-rc.5+7ab6e1fd3",
48
+ "@instructure/quiz-number-input": "17.64.1-rc.5+7ab6e1fd3",
49
+ "@instructure/quiz-rce": "17.64.1-rc.5+7ab6e1fd3",
49
50
  "@instructure/ui-a11y-content": "^7.20.0",
50
51
  "@instructure/ui-alerts": "^7.20.0",
51
52
  "@instructure/ui-avatar": "^7.20.0",
@@ -106,7 +107,7 @@
106
107
  "eventemitter3": "^3.1.0",
107
108
  "humps": "^2.0.0",
108
109
  "immutable": "^3.8.1",
109
- "instructure-validations": "17.64.1-rc.2+819871daa",
110
+ "instructure-validations": "17.64.1-rc.5+7ab6e1fd3",
110
111
  "ipaddr.js": "^1.5.4",
111
112
  "isomorphic-fetch": "^2.2.0",
112
113
  "isuuid": "^0.1.0",
@@ -157,7 +158,7 @@
157
158
  "intl": "^1.2.4",
158
159
  "jquery": "^2.2.3",
159
160
  "most-subject": "^5.3.0",
160
- "quiz-presets": "17.64.1-rc.2+819871daa",
161
+ "quiz-presets": "17.64.1-rc.5+7ab6e1fd3",
161
162
  "react": "^16.8.6",
162
163
  "react-addons-test-utils": "^15.6.2",
163
164
  "react-dom": "^16.8.6",
@@ -173,5 +174,5 @@
173
174
  "publishConfig": {
174
175
  "access": "public"
175
176
  },
176
- "gitHead": "819871daafc1c68e4691ee2efbdfe6108144329e"
177
+ "gitHead": "7ab6e1fd33c7aca23bea334c6a88cedaa883f812"
177
178
  }