@instructure/quiz-core 17.58.2-rc.6 → 17.58.2-rc.8

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 (35) hide show
  1. package/es/banks/api/banks.js +35 -1
  2. package/es/banks/components/Bank/index.js +16 -7
  3. package/es/banks/components/Bank/presenter.js +198 -18
  4. package/es/building/components/resources/BanksTray/presenter.js +2 -1
  5. package/es/common/actions/sharedBanks.js +2 -2
  6. package/es/reporting/components/resources/NewQuizAndItemAnalysis/AnalysisMetric/index.js +2 -0
  7. package/es/reporting/components/resources/NewQuizAndItemAnalysis/AnalysisMetric/presenter.js +64 -0
  8. package/es/reporting/components/resources/NewQuizAndItemAnalysis/AnalysisMetric/theme.js +3 -0
  9. package/es/reporting/components/resources/NewQuizAndItemAnalysis/AnalysisPopoverMetric/index.js +2 -0
  10. package/es/reporting/components/resources/NewQuizAndItemAnalysis/AnalysisPopoverMetric/presenter.js +75 -0
  11. package/es/reporting/components/resources/NewQuizAndItemAnalysis/AnalysisPopoverMetric/theme.js +6 -0
  12. package/es/reporting/components/resources/NewQuizAndItemAnalysis/NewItemAnalysis/index.js +2 -0
  13. package/es/reporting/components/resources/NewQuizAndItemAnalysis/NewItemAnalysis/popoverContent.js +18 -0
  14. package/es/reporting/components/resources/NewQuizAndItemAnalysis/NewItemAnalysis/presenter.js +245 -0
  15. package/es/reporting/components/resources/NewQuizAndItemAnalysis/NewItemAnalysis/theme.js +9 -0
  16. package/es/reporting/components/resources/NewQuizAndItemAnalysis/NewQuizAnalysis/presenter.js +55 -57
  17. package/es/reporting/components/resources/NewQuizAndItemAnalysis/presenter.js +5 -16
  18. package/lib/banks/api/banks.js +40 -2
  19. package/lib/banks/components/Bank/index.js +15 -2
  20. package/lib/banks/components/Bank/presenter.js +203 -17
  21. package/lib/building/components/resources/BanksTray/presenter.js +2 -1
  22. package/lib/common/actions/sharedBanks.js +2 -2
  23. package/lib/reporting/components/resources/NewQuizAndItemAnalysis/AnalysisMetric/index.js +11 -0
  24. package/lib/reporting/components/resources/NewQuizAndItemAnalysis/AnalysisMetric/presenter.js +83 -0
  25. package/lib/reporting/components/resources/NewQuizAndItemAnalysis/AnalysisMetric/theme.js +10 -0
  26. package/lib/reporting/components/resources/NewQuizAndItemAnalysis/AnalysisPopoverMetric/index.js +11 -0
  27. package/lib/reporting/components/resources/NewQuizAndItemAnalysis/AnalysisPopoverMetric/presenter.js +95 -0
  28. package/lib/reporting/components/resources/NewQuizAndItemAnalysis/AnalysisPopoverMetric/theme.js +13 -0
  29. package/lib/reporting/components/resources/NewQuizAndItemAnalysis/NewItemAnalysis/index.js +11 -0
  30. package/lib/reporting/components/resources/NewQuizAndItemAnalysis/NewItemAnalysis/popoverContent.js +27 -0
  31. package/lib/reporting/components/resources/NewQuizAndItemAnalysis/NewItemAnalysis/presenter.js +274 -0
  32. package/lib/reporting/components/resources/NewQuizAndItemAnalysis/NewItemAnalysis/theme.js +16 -0
  33. package/lib/reporting/components/resources/NewQuizAndItemAnalysis/NewQuizAnalysis/presenter.js +59 -62
  34. package/lib/reporting/components/resources/NewQuizAndItemAnalysis/presenter.js +7 -18
  35. package/package.json +9 -9
@@ -0,0 +1,274 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+
5
+ var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard");
6
+
7
+ Object.defineProperty(exports, "__esModule", {
8
+ value: true
9
+ });
10
+ exports.NewItemAnalysis = void 0;
11
+
12
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
13
+
14
+ var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
15
+
16
+ var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
17
+
18
+ var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
19
+
20
+ var _createSuper2 = _interopRequireDefault(require("@babel/runtime/helpers/createSuper"));
21
+
22
+ var _uiHeading = require("@instructure/ui-heading");
23
+
24
+ var _react = _interopRequireWildcard(require("react"));
25
+
26
+ var _formatMessage = _interopRequireDefault(require("@instructure/quiz-i18n/es/format-message"));
27
+
28
+ var _index = _interopRequireDefault(require("../../../../../common/components/shared/ExpandButton/index.js"));
29
+
30
+ var _uiText = require("@instructure/ui-text");
31
+
32
+ var _uiThemeable = require("@instructure/ui-themeable");
33
+
34
+ var _theme = _interopRequireDefault(require("./theme.js"));
35
+
36
+ var _popoverContent = require("./popoverContent.js");
37
+
38
+ var _index2 = _interopRequireDefault(require("../../../../../common/components/shared/Card/index.js"));
39
+
40
+ var _index3 = _interopRequireDefault(require("../AnalysisMetric/index.js"));
41
+
42
+ var _index4 = _interopRequireDefault(require("../AnalysisPopoverMetric/index.js"));
43
+
44
+ var _propTypes = _interopRequireDefault(require("prop-types"));
45
+
46
+ var _classnames2 = _interopRequireDefault(require("classnames"));
47
+
48
+ var _interactionTypeMetadata = require("../../../../../common/util/interactionTypeMetadata.js");
49
+
50
+ var _dec, _class, _class2, _temp;
51
+
52
+ var styles = {
53
+ componentId: 'dcJyB',
54
+ template: function template(theme) {
55
+ return "\n\n.dcJyB_eDnN{display:flex;flex-basis:45%;flex-direction:column;overflow:hidden}\n\n.dcJyB_eKXQ{padding:".concat(theme.cardWrapperPadding || 'inherit', ";position:relative}\n\n.dcJyB_eIAv{display:flex;position:relative}\n\n.dcJyB_ePHw{flex-basis:91%;overflow:hidden;padding-bottom:10px;text-overflow:ellipsis;white-space:nowrap}\n\n.dcJyB_dzsH{overflow:visible;text-overflow:unset;white-space:normal}\n\n.dcJyB_byoJ{position:absolute;right:7px;top:-8px}\n\n.dcJyB_evBt{display:flex;flex-direction:row;flex-wrap:wrap;justify-content:space-between}\n\n.dcJyB_pAQb{display:flex;flex-direction:column;height:60px}\n\n.dcJyB_zefc{display:flex;flex-basis:55%;justify-content:flex-end}\n\n.dcJyB_dPzc{flex-direction:column}\n\n.dcJyB_dPzc,.dcJyB_dzph{display:flex;flex-basis:100%}\n\n.dcJyB_dzph{align-items:flex-start;box-sizing:border-box;column-gap:5px;justify-content:space-between;padding:0 30px 0 25px}\n\n.dcJyB_eobd{padding-top:1rem}\n\n.dcJyB_NpIG{position:absolute;right:").concat(theme.viewPadding || 'inherit', ";top:").concat(theme.viewPadding || 'inherit', "}\n\n@media screen and (--tabletBreakPoint){.dcJyB_zefc{flex-basis:100%;justify-content:flex-start}.dcJyB_ePHw{flex-basis:94%}.dcJyB_eDnN{flex-basis:100%}.dcJyB_dzph{padding:0}.dcJyB_eDnN h3{padding-right:30px}.dcJyB_NpIG{right:17px}.dcJyB_eIAv{margin-bottom:20px}.dcJyB_byoJ{right:-7px}.dcJyB_dzph{flex-wrap:wrap}}");
56
+ },
57
+ 'heading': 'dcJyB_eDnN',
58
+ 'cardWrapper': 'dcJyB_eKXQ',
59
+ 'bodyPresentation': 'dcJyB_eIAv',
60
+ 'bodyExcerpt': 'dcJyB_ePHw',
61
+ 'bodyExcerptExpanded': 'dcJyB_dzsH',
62
+ 'bodyExpandButtonWrapper': 'dcJyB_byoJ',
63
+ 'innerWrapper': 'dcJyB_evBt',
64
+ 'expandableInnerWrapper': 'dcJyB_pAQb',
65
+ 'metricsWithControls': 'dcJyB_zefc',
66
+ 'metricGroup': 'dcJyB_dPzc',
67
+ 'metricsRow': 'dcJyB_dzph',
68
+ 'metricsRowPaginated': 'dcJyB_eobd',
69
+ 'itemCardToggleButtonWrapper': 'dcJyB_NpIG'
70
+ };
71
+ var NewItemAnalysis = (_dec = (0, _uiThemeable.themeable)(_theme.default, styles), _dec(_class = (_temp = _class2 = /*#__PURE__*/function (_Component) {
72
+ (0, _inherits2.default)(NewItemAnalysis, _Component);
73
+
74
+ var _super = (0, _createSuper2.default)(NewItemAnalysis);
75
+
76
+ function NewItemAnalysis() {
77
+ var _this;
78
+
79
+ (0, _classCallCheck2.default)(this, NewItemAnalysis);
80
+
81
+ for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
82
+ args[_key] = arguments[_key];
83
+ }
84
+
85
+ _this = _super.call.apply(_super, [this].concat(args));
86
+ _this.state = {
87
+ bodyToggable: false,
88
+ bodyExpanded: false,
89
+ itemExpanded: false,
90
+ metricsExpanded: false
91
+ };
92
+
93
+ _this.mapInteractionTypeToTranslation = function (interactionType) {
94
+ return (0, _interactionTypeMetadata.interactionTypesNameDictionary)({
95
+ slug: interactionType,
96
+ name: (0, _formatMessage.default)('Question')
97
+ });
98
+ };
99
+
100
+ _this.buildItemCardHeadingId = function () {
101
+ return "itemCardHeading-".concat(_this.props.itemAnalysis.metadata.item_id);
102
+ };
103
+
104
+ _this.buildItemCardBodyId = function () {
105
+ return "itemCardBody-".concat(_this.props.itemAnalysis.metadata.item_id);
106
+ };
107
+
108
+ _this.bodyExceedsLimit = function (bodyElement, headingElement) {
109
+ if (!bodyElement || !headingElement) {
110
+ return;
111
+ }
112
+
113
+ return bodyElement.scrollWidth > headingElement.clientWidth || _this.state.bodyExpanded;
114
+ };
115
+
116
+ _this.handleBodyWidth = function () {
117
+ var bodyElement = document.getElementById(_this.buildItemCardBodyId());
118
+ var headingElement = document.getElementById(_this.buildItemCardHeadingId());
119
+
120
+ _this.setState({
121
+ bodyToggable: _this.bodyExceedsLimit(bodyElement, headingElement)
122
+ });
123
+ };
124
+
125
+ _this.handleToggle = function () {
126
+ _this.setState({
127
+ metricsExpanded: !_this.state.metricsExpanded
128
+ });
129
+
130
+ _this.setState({
131
+ itemExpanded: !_this.state.itemExpanded
132
+ });
133
+ };
134
+
135
+ _this.handleBodyToggle = function () {
136
+ _this.setState({
137
+ bodyExpanded: !_this.state.bodyExpanded
138
+ });
139
+ };
140
+
141
+ _this.renderExpandItemCardButton = function () {
142
+ return /*#__PURE__*/_react.default.createElement("div", {
143
+ className: styles.itemCardToggleButtonWrapper
144
+ }, /*#__PURE__*/_react.default.createElement(_index.default, {
145
+ onClick: _this.handleToggle,
146
+ title: _this.state.metricsExpanded ? (0, _formatMessage.default)('collapse item card') : (0, _formatMessage.default)('expand item card'),
147
+ isExpanded: _this.state.metricsExpanded
148
+ }));
149
+ };
150
+
151
+ _this.renderBodyToggleButton = function () {
152
+ return /*#__PURE__*/_react.default.createElement("div", {
153
+ className: styles.bodyExpandButtonWrapper
154
+ }, /*#__PURE__*/_react.default.createElement(_index.default, {
155
+ onClick: _this.handleBodyToggle,
156
+ title: _this.state.bodyExpanded ? (0, _formatMessage.default)('collapse question stem') : (0, _formatMessage.default)('expand question stem'),
157
+ isExpanded: _this.state.bodyExpanded
158
+ }));
159
+ };
160
+
161
+ _this.renderExpanded = function () {
162
+ var scores = _this.props.itemAnalysis.scores;
163
+ return /*#__PURE__*/_react.default.createElement("div", {
164
+ className: [styles.metricsRow, styles.metricsRowPaginated].join(' ')
165
+ }, /*#__PURE__*/_react.default.createElement(_index4.default, {
166
+ metricKey: "pearson_correlation",
167
+ label: (0, _formatMessage.default)('Pearson Correlation Coefficient'),
168
+ value: _formatMessage.default.number(scores.pearson_correlation),
169
+ popoverDescription: _popoverContent.pearsonCorrelation
170
+ }));
171
+ };
172
+
173
+ return _this;
174
+ }
175
+
176
+ (0, _createClass2.default)(NewItemAnalysis, [{
177
+ key: "componentDidMount",
178
+ value: function componentDidMount() {
179
+ this.handleBodyWidth();
180
+ window.addEventListener('resize', this.handleBodyWidth);
181
+ }
182
+ }, {
183
+ key: "componentWillUnmount",
184
+ value: function componentWillUnmount() {
185
+ window.removeEventListener('resize', this.handleBodyWidth);
186
+ }
187
+ }, {
188
+ key: "render",
189
+ value: function render() {
190
+ var _this$props$itemAnaly = this.props.itemAnalysis,
191
+ metadata = _this$props$itemAnaly.metadata,
192
+ scores = _this$props$itemAnaly.scores;
193
+ var bodyClass = (0, _classnames2.default)(styles.bodyExcerpt, (0, _defineProperty2.default)({}, styles.bodyExcerptExpanded, this.state.bodyExpanded));
194
+ var headingId = this.buildItemCardHeadingId();
195
+ var bodyId = this.buildItemCardBodyId();
196
+ return /*#__PURE__*/_react.default.createElement(_index2.default, {
197
+ className: styles.cardWrapper
198
+ }, /*#__PURE__*/_react.default.createElement("div", {
199
+ className: styles.innerWrapper
200
+ }, /*#__PURE__*/_react.default.createElement("div", {
201
+ id: headingId,
202
+ className: styles.heading
203
+ }, /*#__PURE__*/_react.default.createElement(_uiHeading.Heading, {
204
+ margin: "0 0 small 0",
205
+ level: "h3",
206
+ weight: "bold",
207
+ color: "primary"
208
+ }, metadata.item_title), /*#__PURE__*/_react.default.createElement(_uiText.Text, {
209
+ size: "small",
210
+ weight: "bold",
211
+ transform: "capitalize"
212
+ }, this.mapInteractionTypeToTranslation(metadata.interaction_type)), /*#__PURE__*/_react.default.createElement("div", {
213
+ id: "itemBody",
214
+ className: styles.bodyPresentation
215
+ }, /*#__PURE__*/_react.default.createElement("div", {
216
+ id: bodyId,
217
+ className: bodyClass
218
+ }, /*#__PURE__*/_react.default.createElement(_uiText.Text, {
219
+ size: "small"
220
+ }, metadata.item_body)), this.state.bodyToggable && this.renderBodyToggleButton())), /*#__PURE__*/_react.default.createElement("div", {
221
+ className: styles.metricsWithControls
222
+ }, /*#__PURE__*/_react.default.createElement("div", {
223
+ className: styles.metricGroup
224
+ }, /*#__PURE__*/_react.default.createElement("div", {
225
+ className: styles.metricsRow
226
+ }, /*#__PURE__*/_react.default.createElement(_index4.default, {
227
+ metricKey: "difficulty_index",
228
+ label: (0, _formatMessage.default)('Item Difficulty'),
229
+ value: _formatMessage.default.number(scores.difficulty_index),
230
+ popoverDescription: _popoverContent.difficultyIndex
231
+ }), /*#__PURE__*/_react.default.createElement(_index3.default, {
232
+ metricKey: "mean",
233
+ label: (0, _formatMessage.default)('Mean Earned Points'),
234
+ value: _formatMessage.default.number(scores.mean)
235
+ }), /*#__PURE__*/_react.default.createElement(_index3.default, {
236
+ metricKey: "median",
237
+ label: (0, _formatMessage.default)('Median Earned Points'),
238
+ value: _formatMessage.default.number(scores.median)
239
+ }), /*#__PURE__*/_react.default.createElement(_index4.default, {
240
+ metricKey: "discrimination_index",
241
+ label: (0, _formatMessage.default)('Discrimination Index'),
242
+ value: _formatMessage.default.number(scores.discrimination_index),
243
+ popoverDescription: _popoverContent.discriminationIndex
244
+ }), this.renderExpandItemCardButton()), this.state.metricsExpanded && this.renderExpanded()))), this.state.itemExpanded && /*#__PURE__*/_react.default.createElement("div", {
245
+ className: styles.expandableInnerWrapper
246
+ }));
247
+ }
248
+ }]);
249
+ NewItemAnalysis.displayName = "NewItemAnalysis";
250
+ return NewItemAnalysis;
251
+ }(_react.Component), _class2.propTypes = {
252
+ itemAnalysis: _propTypes.default.shape({
253
+ attempts: _propTypes.default.shape({
254
+ students_responded: _propTypes.default.number,
255
+ students_without_response: _propTypes.default.number
256
+ }),
257
+ metadata: _propTypes.default.shape({
258
+ interaction_type: _propTypes.default.string,
259
+ item_body: _propTypes.default.string,
260
+ item_id: _propTypes.default.string,
261
+ item_title: _propTypes.default.string
262
+ }),
263
+ scores: _propTypes.default.shape({
264
+ difficulty_index: _propTypes.default.number,
265
+ discrimination_index: _propTypes.default.number,
266
+ mean: _propTypes.default.number,
267
+ median: _propTypes.default.number,
268
+ pearson_correlation: _propTypes.default.number,
269
+ points_possible: _propTypes.default.number,
270
+ quartile_distribution: _propTypes.default.arrayOf(_propTypes.default.number)
271
+ })
272
+ }).isRequired
273
+ }, _temp)) || _class);
274
+ exports.NewItemAnalysis = NewItemAnalysis;
@@ -0,0 +1,16 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = generator;
7
+
8
+ function generator(_ref) {
9
+ var spacing = _ref.spacing,
10
+ breakpoints = _ref.breakpoints;
11
+ return {
12
+ tabletBreakPoint: "max-width: ".concat(breakpoints.large),
13
+ cardWrapperPadding: spacing.medium,
14
+ viewPadding: spacing.small
15
+ };
16
+ }
@@ -19,8 +19,6 @@ var _createSuper2 = _interopRequireDefault(require("@babel/runtime/helpers/creat
19
19
 
20
20
  var _uiHeading = require("@instructure/ui-heading");
21
21
 
22
- var _uiMetric = require("@instructure/ui-metric");
23
-
24
22
  var _react = _interopRequireWildcard(require("react"));
25
23
 
26
24
  var _formatMessage = _interopRequireDefault(require("@instructure/quiz-i18n/es/format-message"));
@@ -33,43 +31,39 @@ var _uiThemeable = require("@instructure/ui-themeable");
33
31
 
34
32
  var _theme = _interopRequireDefault(require("./theme.js"));
35
33
 
36
- var _utils = require("../utils.js");
37
-
38
- var _index2 = _interopRequireDefault(require("../MetricPopover/index.js"));
39
-
40
34
  var _formatTimespan = require("../../../../../common/util/formatTimespan.js");
41
35
 
42
36
  var _propTypes = _interopRequireDefault(require("prop-types"));
43
37
 
44
- var _index3 = _interopRequireDefault(require("../../../../../common/components/shared/Card/index.js"));
38
+ var _index2 = _interopRequireDefault(require("../../../../../common/components/shared/Card/index.js"));
39
+
40
+ var _index3 = _interopRequireDefault(require("../AnalysisPopoverMetric/index.js"));
41
+
42
+ var _index4 = _interopRequireDefault(require("../AnalysisMetric/index.js"));
45
43
 
46
44
  var _presenter = require("../charts/ScoreDistribution/presenter.js");
47
45
 
48
46
  var _dec, _class, _class2, _temp;
49
47
 
50
48
  var styles = {
51
- componentId: 'bsfUh',
49
+ componentId: 'ePPpE',
52
50
  template: function template(theme) {
53
- return "\n\n.bsfUh_eDnN{display:flex;justify-content:space-between;padding-bottom:".concat(theme.headingPadding || 'inherit', "}\n\n.bsfUh_eKXQ{padding:").concat(theme.cardWrapperPadding || 'inherit', ";position:relative}\n\n.bsfUh_crZr{padding-top:").concat(theme.metricGroupPaddingTop || 'inherit', "}\n\n.bsfUh_eckF{text-transform:uppercase}\n\n.bsfUh_dPzc,.bsfUh_cpZE{column-gap:").concat(theme.metricsColumnGap || 'inherit', ";display:flex;flex-wrap:wrap;justify-content:flex-start;row-gap:1.5rem}\n\n.bsfUh_dPzc{margin-left:-8px}\n\n.bsfUh_dqHR{padding-left:5px}\n\n.bsfUh_bTHH{position:absolute;right:").concat(theme.viewPadding || 'inherit', ";top:").concat(theme.viewPadding || 'inherit', "}");
51
+ return "\n\n.ePPpE_eDnN{display:flex;justify-content:space-between;padding-bottom:".concat(theme.headingPadding || 'inherit', "}\n\n.ePPpE_eKXQ{padding:").concat(theme.cardWrapperPadding || 'inherit', ";position:relative}\n\n.ePPpE_crZr{padding-top:").concat(theme.metricGroupPaddingTop || 'inherit', "}\n\n.ePPpE_bTHH{position:absolute;right:").concat(theme.viewPadding || 'inherit', ";top:").concat(theme.viewPadding || 'inherit', "}\n\n.ePPpE_dPzc,.ePPpE_cpZE{column-gap:").concat(theme.metricsColumnGap || 'inherit', ";display:flex;flex-wrap:wrap;justify-content:flex-start;row-gap:1.5rem}\n\n.ePPpE_dPzc{margin-left:-8px}");
54
52
  },
55
- 'heading': 'bsfUh_eDnN',
56
- 'cardWrapper': 'bsfUh_eKXQ',
57
- 'container': 'bsfUh_crZr',
58
- 'metricLabel': 'bsfUh_eckF',
59
- 'metricGroup': 'bsfUh_dPzc',
60
- 'metricsWrapper': 'bsfUh_cpZE',
61
- 'popoverContainer': 'bsfUh_dqHR',
62
- 'expandButtonContainer': 'bsfUh_bTHH'
53
+ 'heading': 'ePPpE_eDnN',
54
+ 'cardWrapper': 'ePPpE_eKXQ',
55
+ 'container': 'ePPpE_crZr',
56
+ 'expandButtonContainer': 'ePPpE_bTHH',
57
+ 'metricGroup': 'ePPpE_dPzc',
58
+ 'metricsWrapper': 'ePPpE_cpZE'
63
59
  };
64
60
  var stdDevPopoverTexts = {
65
- metricLabel: 'standard deviation',
66
61
  title: 'Lorem ipsum ',
67
62
  subtitle: 'subtitle',
68
63
  body: 'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor',
69
64
  screenReaderLabel: 'standard deviation tooltip'
70
65
  };
71
66
  var cronbachsAlphaPopoverTexts = {
72
- metricLabel: 'cronbach\'s alpha',
73
67
  title: 'Lorem ipsum ',
74
68
  subtitle: 'subtitle',
75
69
  body: 'cronbach\'s alpha description',
@@ -109,50 +103,28 @@ var NewQuizAnalysis = (_dec = (0, _uiThemeable.themeable)(_theme.default, styles
109
103
  className: styles.container
110
104
  }, /*#__PURE__*/_react.default.createElement("div", {
111
105
  className: styles.metricGroup
112
- }, _this.renderMetric('median_percentage', (0, _formatMessage.default)('median score'), _formatMessage.default.number(scores === null || scores === void 0 ? void 0 : scores.median_percentage), '%'), _this.renderMetricWithPopover('stddev', stdDevPopoverTexts, _formatMessage.default.number(scores === null || scores === void 0 ? void 0 : scores.stddev)), _this.renderMetricWithPopover('cronbachs_alpha', cronbachsAlphaPopoverTexts, _formatMessage.default.number(scores === null || scores === void 0 ? void 0 : scores.cronbachs_alpha))));
106
+ }, /*#__PURE__*/_react.default.createElement(_index4.default, {
107
+ metricKey: "median_percentage",
108
+ label: (0, _formatMessage.default)('Median Score'),
109
+ value: _formatMessage.default.number(scores === null || scores === void 0 ? void 0 : scores.median_percentage),
110
+ suffix: "%"
111
+ }), /*#__PURE__*/_react.default.createElement(_index3.default, {
112
+ metricKey: "stddev",
113
+ value: _formatMessage.default.number(scores === null || scores === void 0 ? void 0 : scores.stddev),
114
+ label: (0, _formatMessage.default)('Standard Deviation'),
115
+ popoverDescription: stdDevPopoverTexts
116
+ }), /*#__PURE__*/_react.default.createElement(_index3.default, {
117
+ metricKey: "cronbachs_alpha",
118
+ value: _formatMessage.default.number(scores === null || scores === void 0 ? void 0 : scores.cronbachs_alpha),
119
+ label: (0, _formatMessage.default)('Cronbach\'s Alpha'),
120
+ popoverDescription: cronbachsAlphaPopoverTexts
121
+ })));
113
122
  };
114
123
 
115
124
  return _this;
116
125
  }
117
126
 
118
127
  (0, _createClass2.default)(NewQuizAnalysis, [{
119
- key: "renderLabelWithPopover",
120
- value: function renderLabelWithPopover(texts) {
121
- return /*#__PURE__*/_react.default.createElement("span", {
122
- className: styles.metricLabel
123
- }, texts.metricLabel, /*#__PURE__*/_react.default.createElement("span", {
124
- className: styles.popoverContainer
125
- }, /*#__PURE__*/_react.default.createElement(_index2.default, texts)));
126
- }
127
- }, {
128
- key: "renderMetric",
129
- value: function renderMetric(key, label, value, suffix) {
130
- return /*#__PURE__*/_react.default.createElement(_uiMetric.Metric, {
131
- theme: {
132
- valueFontWeight: 500
133
- },
134
- textAlign: "start",
135
- key: key,
136
- renderLabel: /*#__PURE__*/_react.default.createElement("span", {
137
- className: styles.metricLabel
138
- }, label),
139
- renderValue: (0, _utils.getSanitizedMetricValue)(value, suffix)
140
- });
141
- }
142
- }, {
143
- key: "renderMetricWithPopover",
144
- value: function renderMetricWithPopover(key, texts, value) {
145
- return /*#__PURE__*/_react.default.createElement(_uiMetric.Metric, {
146
- theme: {
147
- valueFontWeight: 500
148
- },
149
- textAlign: "start",
150
- key: key,
151
- renderLabel: this.renderLabelWithPopover(texts),
152
- renderValue: (0, _utils.getSanitizedMetricValue)(value)
153
- });
154
- }
155
- }, {
156
128
  key: "render",
157
129
  value: function render() {
158
130
  var quizAnalysis = this.props.quizAnalysis;
@@ -160,7 +132,7 @@ var NewQuizAnalysis = (_dec = (0, _uiThemeable.themeable)(_theme.default, styles
160
132
  attempts = quizAnalysis.attempts,
161
133
  metadata = quizAnalysis.metadata;
162
134
  var expanded = this.state.expanded;
163
- return /*#__PURE__*/_react.default.createElement(_index3.default, {
135
+ return /*#__PURE__*/_react.default.createElement(_index2.default, {
164
136
  className: styles.cardWrapper
165
137
  }, /*#__PURE__*/_react.default.createElement("div", {
166
138
  className: styles.heading
@@ -171,9 +143,32 @@ var NewQuizAnalysis = (_dec = (0, _uiThemeable.themeable)(_theme.default, styles
171
143
  className: styles.metricGroup
172
144
  }, /*#__PURE__*/_react.default.createElement("div", {
173
145
  className: styles.metricsWrapper
174
- }, this.renderMetric('highscore', (0, _formatMessage.default)('high score'), scores === null || scores === void 0 ? void 0 : scores.max_percentage, '%'), this.renderMetric('lowscore', (0, _formatMessage.default)('low score'), scores === null || scores === void 0 ? void 0 : scores.min_percentage, '%'), this.renderMetric('meanscore', (0, _formatMessage.default)('mean score'), scores === null || scores === void 0 ? void 0 : scores.mean_percentage, '%')), /*#__PURE__*/_react.default.createElement("div", {
146
+ }, /*#__PURE__*/_react.default.createElement(_index4.default, {
147
+ metricKey: "highscore",
148
+ label: (0, _formatMessage.default)('high score'),
149
+ value: scores === null || scores === void 0 ? void 0 : scores.max_percentage,
150
+ suffix: "%"
151
+ }), /*#__PURE__*/_react.default.createElement(_index4.default, {
152
+ metricKey: "lowscore",
153
+ label: (0, _formatMessage.default)('low score'),
154
+ value: scores === null || scores === void 0 ? void 0 : scores.min_percentage,
155
+ suffix: "%"
156
+ }), /*#__PURE__*/_react.default.createElement(_index4.default, {
157
+ metricKey: "meanscore",
158
+ label: (0, _formatMessage.default)('mean score'),
159
+ value: scores === null || scores === void 0 ? void 0 : scores.mean_percentage,
160
+ suffix: "%"
161
+ })), /*#__PURE__*/_react.default.createElement("div", {
175
162
  className: styles.metricsWrapper
176
- }, this.renderMetric('average_attempts', (0, _formatMessage.default)('average attempts'), _formatMessage.default.number(attempts === null || attempts === void 0 ? void 0 : attempts.average_attempts)), this.renderMetric('mean_elapsed_sec', (0, _formatMessage.default)('mean elapsed time'), (0, _formatTimespan.formatTimeToFullNumeric)(attempts === null || attempts === void 0 ? void 0 : attempts.mean_elapsed_sec))), /*#__PURE__*/_react.default.createElement("div", {
163
+ }, /*#__PURE__*/_react.default.createElement(_index4.default, {
164
+ metricKey: "average_attempts",
165
+ label: (0, _formatMessage.default)('average attempts'),
166
+ value: _formatMessage.default.number(attempts === null || attempts === void 0 ? void 0 : attempts.average_attempts)
167
+ }), /*#__PURE__*/_react.default.createElement(_index4.default, {
168
+ metricKey: "mean_elapsed_sec",
169
+ label: (0, _formatMessage.default)('mean elapsed time'),
170
+ value: (0, _formatTimespan.formatTimeToFullNumeric)(attempts === null || attempts === void 0 ? void 0 : attempts.mean_elapsed_sec)
171
+ })), /*#__PURE__*/_react.default.createElement("div", {
177
172
  className: styles.expandButtonContainer
178
173
  }, /*#__PURE__*/_react.default.createElement(_index.default, {
179
174
  onClick: this.handleToggle,
@@ -190,10 +185,10 @@ var NewQuizAnalysis = (_dec = (0, _uiThemeable.themeable)(_theme.default, styles
190
185
  return NewQuizAnalysis;
191
186
  }(_react.Component), _class2.propTypes = {
192
187
  quizAnalysis: _propTypes.default.shape({
193
- created_timestamp: _propTypes.default.string,
188
+ created_timestamp: _propTypes.default.string.isRequired,
194
189
  metadata: _propTypes.default.shape({
195
190
  quiz_title: _propTypes.default.string
196
- }),
191
+ }).isRequired,
197
192
  scores: _propTypes.default.shape({
198
193
  decile_distribution: _propTypes.default.arrayOf(_propTypes.default.number),
199
194
  cronbachs_alpha: _propTypes.default.number,
@@ -211,5 +206,7 @@ var NewQuizAnalysis = (_dec = (0, _uiThemeable.themeable)(_theme.default, styles
211
206
  average_attempts: _propTypes.default.number
212
207
  }).isRequired
213
208
  }).isRequired
209
+ }, _class2.defaultProps = {
210
+ quizAnalysis: {}
214
211
  }, _temp)) || _class);
215
212
  exports.NewQuizAnalysis = NewQuizAnalysis;
@@ -21,11 +21,11 @@ var _propTypes = _interopRequireDefault(require("prop-types"));
21
21
 
22
22
  var _uiHeading = require("@instructure/ui-heading");
23
23
 
24
- var _uiMetric = require("@instructure/ui-metric");
24
+ var _index = _interopRequireDefault(require("./NewItemAnalysis/index.js"));
25
25
 
26
26
  var _Spinner = _interopRequireDefault(require("../../../../common/components/shared/spinner/Spinner.js"));
27
27
 
28
- var _index = _interopRequireDefault(require("./NewQuizAnalysis/index.js"));
28
+ var _index2 = _interopRequireDefault(require("./NewQuizAnalysis/index.js"));
29
29
 
30
30
  var _ref5 = /*#__PURE__*/_react.default.createElement(_uiHeading.Heading, {
31
31
  level: "h3",
@@ -116,7 +116,7 @@ var NewQuizAndItemAnalysis = function NewQuizAndItemAnalysis(_ref) {
116
116
  fetch();
117
117
  }, []);
118
118
 
119
- var _ref4 = /*#__PURE__*/_react.default.createElement(_index.default, {
119
+ var _ref4 = /*#__PURE__*/_react.default.createElement(_index2.default, {
120
120
  quizAnalysis: quizAnalysis
121
121
  });
122
122
 
@@ -125,21 +125,10 @@ var NewQuizAndItemAnalysis = function NewQuizAndItemAnalysis(_ref) {
125
125
  return /*#__PURE__*/_react.default.createElement("div", {
126
126
  className: "fs-mask"
127
127
  }, _ref4, _ref5, itemAnalyses === null || itemAnalyses === void 0 ? void 0 : itemAnalyses.map(function (itemAnalysis) {
128
- return /*#__PURE__*/_react.default.createElement(_uiMetric.MetricGroup, {
129
- key: itemAnalysis.metadata.item_id
130
- }, /*#__PURE__*/_react.default.createElement(_uiMetric.Metric, {
131
- key: "itemdifficulty",
132
- renderLabel: "ITEM DIFFICULTY",
133
- renderValue: itemAnalysis.scores.difficulty_index
134
- }), /*#__PURE__*/_react.default.createElement(_uiMetric.Metric, {
135
- key: "responded",
136
- renderLabel: "RESPONDED",
137
- renderValue: itemAnalysis.attempts.students_responded
138
- }), /*#__PURE__*/_react.default.createElement(_uiMetric.Metric, {
139
- key: "skipped",
140
- renderLabel: "SKIPPED/NO RESPONSE",
141
- renderValue: itemAnalysis.attempts.students_without_response
142
- }));
128
+ return /*#__PURE__*/_react.default.createElement(_index.default, {
129
+ key: itemAnalysis.metadata.item_id,
130
+ itemAnalysis: itemAnalysis
131
+ });
143
132
  }));
144
133
  /* eslint-enable react/jsx-no-literals */
145
134
  }; // TODO: distinguish between loading and empty item analyses (eg. when there is no items in a quiz)
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@instructure/quiz-core",
3
- "version": "17.58.2-rc.6+2291f061e",
3
+ "version": "17.58.2-rc.8+a2806a24e",
4
4
  "license": "MIT",
5
5
  "description": "The Quiz React SDK by Instructure Inc.",
6
6
  "author": "Instructure, Inc. Engineering and Product Design",
@@ -41,11 +41,11 @@
41
41
  ],
42
42
  "dependencies": {
43
43
  "@instructure/outcomes-ui": "^2.1.8",
44
- "@instructure/quiz-common": "17.58.2-rc.6+2291f061e",
45
- "@instructure/quiz-i18n": "17.58.2-rc.6+2291f061e",
46
- "@instructure/quiz-interactions": "17.58.2-rc.6+2291f061e",
47
- "@instructure/quiz-number-input": "17.58.2-rc.6+2291f061e",
48
- "@instructure/quiz-rce": "17.58.2-rc.6+2291f061e",
44
+ "@instructure/quiz-common": "17.58.2-rc.8+a2806a24e",
45
+ "@instructure/quiz-i18n": "17.58.2-rc.8+a2806a24e",
46
+ "@instructure/quiz-interactions": "17.58.2-rc.8+a2806a24e",
47
+ "@instructure/quiz-number-input": "17.58.2-rc.8+a2806a24e",
48
+ "@instructure/quiz-rce": "17.58.2-rc.8+a2806a24e",
49
49
  "@instructure/ui-a11y-content": "^7.20.0",
50
50
  "@instructure/ui-alerts": "^7.20.0",
51
51
  "@instructure/ui-avatar": "^7.20.0",
@@ -106,7 +106,7 @@
106
106
  "eventemitter3": "^3.1.0",
107
107
  "humps": "^2.0.0",
108
108
  "immutable": "^3.8.1",
109
- "instructure-validations": "17.58.2-rc.6+2291f061e",
109
+ "instructure-validations": "17.58.2-rc.8+a2806a24e",
110
110
  "ipaddr.js": "^1.5.4",
111
111
  "isomorphic-fetch": "^2.2.0",
112
112
  "isuuid": "^0.1.0",
@@ -156,7 +156,7 @@
156
156
  "intl": "^1.2.4",
157
157
  "jquery": "^2.2.3",
158
158
  "most-subject": "^5.3.0",
159
- "quiz-presets": "17.58.2-rc.6+2291f061e",
159
+ "quiz-presets": "17.58.2-rc.8+a2806a24e",
160
160
  "react": "^16.8.6",
161
161
  "react-addons-test-utils": "^15.6.2",
162
162
  "react-dom": "^16.8.6",
@@ -172,5 +172,5 @@
172
172
  "publishConfig": {
173
173
  "access": "public"
174
174
  },
175
- "gitHead": "2291f061ed85f10cd0648eef4a254b8b2975fb50"
175
+ "gitHead": "a2806a24eb3fd90deeaf76b10b647ba9cfd9ed4a"
176
176
  }