@instructure/quiz-core 17.60.1-rc.0 → 17.60.1-rc.2

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.
@@ -0,0 +1,53 @@
1
+ import _classCallCheck from "@babel/runtime/helpers/esm/classCallCheck";
2
+ import _createClass from "@babel/runtime/helpers/esm/createClass";
3
+ import _inherits from "@babel/runtime/helpers/esm/inherits";
4
+ import _createSuper from "@babel/runtime/helpers/esm/createSuper";
5
+ import React, { Component } from 'react';
6
+ import PropTypes from 'prop-types';
7
+ import t from '@instructure/quiz-i18n/es/format-message';
8
+ import { displayDateAndTimeInTimezone } from "../../../../../common/util/formatTimespan.js";
9
+ import { Text } from '@instructure/ui-text';
10
+ import { Flex } from '@instructure/ui-flex';
11
+ export var AnalysisUpdateDate = /*#__PURE__*/function (_Component) {
12
+ _inherits(AnalysisUpdateDate, _Component);
13
+
14
+ var _super = _createSuper(AnalysisUpdateDate);
15
+
16
+ function AnalysisUpdateDate() {
17
+ _classCallCheck(this, AnalysisUpdateDate);
18
+
19
+ return _super.apply(this, arguments);
20
+ }
21
+
22
+ _createClass(AnalysisUpdateDate, [{
23
+ key: "render",
24
+ value: function render() {
25
+ var _this$context = this.context,
26
+ timezone = _this$context.timezone,
27
+ locale = _this$context.locale;
28
+ var _this$props = this.props,
29
+ date = _this$props.date,
30
+ multiline = _this$props.multiline;
31
+ return /*#__PURE__*/React.createElement(Text, {
32
+ size: "x-small"
33
+ }, /*#__PURE__*/React.createElement(Flex, {
34
+ direction: multiline ? 'column' : 'row',
35
+ alignItems: "start"
36
+ }, /*#__PURE__*/React.createElement("b", null, t('Data Last Updated:'), "\xA0"), /*#__PURE__*/React.createElement("span", null, displayDateAndTimeInTimezone(date, timezone, locale))));
37
+ }
38
+ }]);
39
+
40
+ AnalysisUpdateDate.displayName = "AnalysisUpdateDate";
41
+ return AnalysisUpdateDate;
42
+ }(Component);
43
+ AnalysisUpdateDate.propTypes = {
44
+ date: PropTypes.string.isRequired,
45
+ multiline: PropTypes.bool
46
+ };
47
+ AnalysisUpdateDate.contextTypes = {
48
+ timezone: PropTypes.string,
49
+ locale: PropTypes.string
50
+ };
51
+ AnalysisUpdateDate.defaultProps = {
52
+ multiline: false
53
+ };
@@ -24,11 +24,11 @@ import ExpandButton from "../../../../../common/components/shared/ExpandButton/i
24
24
  import { themeable } from '@instructure/ui-themeable';
25
25
  import theme from "./theme.js";
26
26
  import { formatTimeToFullNumeric } from "../../../../../common/util/formatTimespan.js";
27
- import PropTypes from 'prop-types';
28
27
  import Card from "../../../../../common/components/shared/Card/index.js";
29
28
  import AnalysisPopoverMetric from "../AnalysisPopoverMetric/index.js";
30
29
  import AnalysisMetric from "../AnalysisMetric/index.js";
31
30
  import { ScoreDistribution } from "../charts/ScoreDistribution/presenter.js";
31
+ import { quizAnalysisPropType } from "../propTypes.js";
32
32
  var stdDevPopoverTexts = {
33
33
  title: 'Lorem ipsum ',
34
34
  subtitle: 'subtitle',
@@ -152,28 +152,7 @@ export var NewQuizAnalysis = (_dec = themeable(theme, styles), _dec(_class = (_t
152
152
  NewQuizAnalysis.displayName = "NewQuizAnalysis";
153
153
  return NewQuizAnalysis;
154
154
  }(Component), _class2.propTypes = {
155
- quizAnalysis: PropTypes.shape({
156
- created_timestamp: PropTypes.string.isRequired,
157
- metadata: PropTypes.shape({
158
- quiz_title: PropTypes.string
159
- }).isRequired,
160
- scores: PropTypes.shape({
161
- decile_distribution: PropTypes.arrayOf(PropTypes.number),
162
- cronbachs_alpha: PropTypes.number,
163
- stddev: PropTypes.number,
164
- median_percentage: PropTypes.number,
165
- max_percentage: PropTypes.number,
166
- min_percentage: PropTypes.number,
167
- mean_percentage: PropTypes.number
168
- }).isRequired,
169
- attempts: PropTypes.shape({
170
- mean_elapsed_sec: PropTypes.number,
171
- students_completed: PropTypes.number,
172
- students_not_finished: PropTypes.number,
173
- students_without_attempt: PropTypes.number,
174
- average_attempts: PropTypes.number
175
- }).isRequired
176
- }).isRequired
155
+ quizAnalysis: quizAnalysisPropType
177
156
  }, _class2.defaultProps = {
178
157
  quizAnalysis: {}
179
158
  }, _temp)) || _class);
@@ -14,45 +14,95 @@ import { Flex } from '@instructure/ui-flex';
14
14
  import { themeable } from '@instructure/ui-themeable';
15
15
  import Card from "../../../../../common/components/shared/Card/index.js";
16
16
  var styles = {
17
- componentId: 'eRzKS',
17
+ componentId: 'eJSiT',
18
18
  template: function template(theme) {
19
- return "\n\n.eRzKS_fbIL{border-radius:".concat(theme.cardBorderRadius || 'inherit', ";box-shadow:").concat(theme.cardBoxShadow || 'inherit', ";display:inline-flex;flex-direction:column;height:").concat(theme.cardHeight || 'inherit', ";margin:").concat(theme.cardMargin || 'inherit', ";padding:").concat(theme.cardPadding || 'inherit', ";width:").concat(theme.cardWidth || 'inherit', "}\n\n.eRzKS_ebWM{padding-top:").concat(theme.detailPadding || 'inherit', "}");
19
+ return "\n\n.eJSiT_bqdH{column-gap:5px;display:flex;justify-content:space-between;padding:".concat(theme.metricsPadding || 'inherit', " 0}\n\n.eJSiT_fbIL{border-radius:").concat(theme.cardBorderRadius || 'inherit', ";box-shadow:").concat(theme.cardBoxShadow || 'inherit', ";display:inline-flex;flex-direction:column;margin:").concat(theme.cardMargin || 'inherit', ";padding:").concat(theme.cardPadding || 'inherit', ";width:").concat(theme.cardWidth || 'inherit', "}\n\n.eJSiT_blRb{max-width:160px;padding-right:10px}");
20
20
  },
21
- 'card': 'eRzKS_fbIL',
22
- 'details': 'eRzKS_ebWM'
21
+ 'metricsContainer': 'eJSiT_bqdH',
22
+ 'card': 'eJSiT_fbIL',
23
+ 'dateContainer': 'eJSiT_blRb'
23
24
  };
24
- import theme from "../../ReportCard/theme.js";
25
+ import theme from "./theme.js";
26
+ import AnalysisMetric from "../AnalysisMetric/index.js";
27
+ import Spinner from "../../../../../common/components/shared/spinner/Spinner.js";
28
+ import { AnalysisUpdateDate } from "../AnalysisUpdateDate/index.js";
29
+ import { quizAnalysisPropType } from "../propTypes.js";
30
+
31
+ var _ref = /*#__PURE__*/React.createElement(Spinner, null);
32
+
25
33
  export var NewQuizAndItemAnalysisReportCard = (_dec = themeable(theme, styles), _dec(_class = (_temp = _class2 = /*#__PURE__*/function (_Component) {
26
34
  _inherits(NewQuizAndItemAnalysisReportCard, _Component);
27
35
 
28
36
  var _super = _createSuper(NewQuizAndItemAnalysisReportCard);
29
37
 
30
38
  function NewQuizAndItemAnalysisReportCard() {
39
+ var _this;
40
+
31
41
  _classCallCheck(this, NewQuizAndItemAnalysisReportCard);
32
42
 
33
- return _super.apply(this, arguments);
43
+ for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
44
+ args[_key] = arguments[_key];
45
+ }
46
+
47
+ _this = _super.call.apply(_super, [this].concat(args));
48
+
49
+ _this.renderMetrics = function () {
50
+ var _quizAnalysis$scores, _quizAnalysis$scores2, _quizAnalysis$scores3;
51
+
52
+ var quizAnalysis = _this.props.quizAnalysis;
53
+ return /*#__PURE__*/React.createElement("div", {
54
+ className: styles.metricsContainer
55
+ }, /*#__PURE__*/React.createElement(AnalysisMetric, {
56
+ metricKey: "highscore",
57
+ label: t('high score'),
58
+ value: (_quizAnalysis$scores = quizAnalysis.scores) === null || _quizAnalysis$scores === void 0 ? void 0 : _quizAnalysis$scores.max_percentage,
59
+ suffix: "%"
60
+ }), /*#__PURE__*/React.createElement(AnalysisMetric, {
61
+ metricKey: "lowscore",
62
+ label: t('low score'),
63
+ value: (_quizAnalysis$scores2 = quizAnalysis.scores) === null || _quizAnalysis$scores2 === void 0 ? void 0 : _quizAnalysis$scores2.min_percentage,
64
+ suffix: "%"
65
+ }), /*#__PURE__*/React.createElement(AnalysisMetric, {
66
+ metricKey: "meanscore",
67
+ label: t('mean score'),
68
+ value: (_quizAnalysis$scores3 = quizAnalysis.scores) === null || _quizAnalysis$scores3 === void 0 ? void 0 : _quizAnalysis$scores3.mean_percentage,
69
+ suffix: "%"
70
+ }));
71
+ };
72
+
73
+ return _this;
34
74
  }
35
75
 
36
76
  _createClass(NewQuizAndItemAnalysisReportCard, [{
37
- key: "render",
38
- value: function render() {
77
+ key: "renderContent",
78
+ value: function renderContent() {
39
79
  var _this$props = this.props,
40
80
  name = _this$props.name,
41
- href = _this$props.href;
42
- return /*#__PURE__*/React.createElement(Card, {
43
- className: styles.card
44
- }, /*#__PURE__*/React.createElement(Flex, {
45
- direction: "column"
46
- }, /*#__PURE__*/React.createElement(Flex.Item, null, /*#__PURE__*/React.createElement(Text, {
81
+ href = _this$props.href,
82
+ quizAnalysis = _this$props.quizAnalysis;
83
+ return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(Text, {
47
84
  size: "medium",
48
85
  weight: "bold"
49
- }, name)), /*#__PURE__*/React.createElement(Flex.Item, {
50
- align: "end"
51
- }, /*#__PURE__*/React.createElement(Link, {
86
+ }, name), this.renderMetrics(), /*#__PURE__*/React.createElement(Flex, {
87
+ direction: "row",
88
+ justifyItems: "space-between"
89
+ }, /*#__PURE__*/React.createElement("div", {
90
+ className: styles.dateContainer
91
+ }, /*#__PURE__*/React.createElement(AnalysisUpdateDate, {
92
+ date: quizAnalysis.created_timestamp,
93
+ multiline: true
94
+ })), /*#__PURE__*/React.createElement(Link, {
52
95
  href: href
53
96
  }, /*#__PURE__*/React.createElement(Text, {
54
97
  size: "small"
55
- }, t('View Report'))))));
98
+ }, t('View Report')))));
99
+ }
100
+ }, {
101
+ key: "render",
102
+ value: function render() {
103
+ return /*#__PURE__*/React.createElement(Card, {
104
+ className: styles.card
105
+ }, this.props.quizAnalysis ? this.renderContent() : _ref);
56
106
  }
57
107
  }]);
58
108
 
@@ -60,9 +110,11 @@ export var NewQuizAndItemAnalysisReportCard = (_dec = themeable(theme, styles),
60
110
  return NewQuizAndItemAnalysisReportCard;
61
111
  }(Component), _class2.propTypes = {
62
112
  name: PropTypes.node,
63
- href: PropTypes.string
113
+ href: PropTypes.string,
114
+ quizAnalysis: quizAnalysisPropType
64
115
  }, _class2.defaultProps = {
65
116
  name: void 0,
66
- href: void 0
117
+ href: void 0,
118
+ quizAnalysis: {}
67
119
  }, _temp)) || _class);
68
120
  export default NewQuizAndItemAnalysisReportCard;
@@ -0,0 +1,12 @@
1
+ export default function generator(_ref) {
2
+ var spacing = _ref.spacing,
3
+ borders = _ref.borders;
4
+ return {
5
+ metricsPadding: spacing.medium,
6
+ cardWidth: '16rem',
7
+ cardPadding: spacing.medium,
8
+ cardMargin: spacing.xSmall,
9
+ cardBoxShadow: '1px 1px 3px 0 #ddd',
10
+ cardBorderRadius: borders.radiusMedium
11
+ };
12
+ }
@@ -11,9 +11,8 @@ import NewItemAnalysis from "./NewItemAnalysis/index.js";
11
11
  import Spinner from "../../../../common/components/shared/spinner/Spinner.js";
12
12
  import NewQuizAnalysis from "./NewQuizAnalysis/index.js";
13
13
  import t from '@instructure/quiz-i18n/es/format-message';
14
- import { Text } from '@instructure/ui-text';
15
14
  import { Flex } from '@instructure/ui-flex';
16
- import { displayDateAndTimeInTimezone } from "../../../../common/util/formatTimespan.js";
15
+ import { AnalysisUpdateDate } from "./AnalysisUpdateDate/index.js";
17
16
 
18
17
  var _ref3 = /*#__PURE__*/React.createElement(Spinner, null);
19
18
 
@@ -101,18 +100,15 @@ export var NewQuizAndItemAnalysis = /*#__PURE__*/function (_Component) {
101
100
  var _this$state = this.state,
102
101
  quizAnalysis = _this$state.quizAnalysis,
103
102
  itemAnalyses = _this$state.itemAnalyses;
104
- var _this$context = this.context,
105
- timezone = _this$context.timezone,
106
- locale = _this$context.locale;
107
103
  return /*#__PURE__*/React.createElement("div", {
108
104
  className: "fs-mask"
109
105
  }, /*#__PURE__*/React.createElement(Flex, {
110
106
  justifyItems: "end",
111
107
  width: "82.5rem",
112
108
  margin: "auto"
113
- }, /*#__PURE__*/React.createElement(Text, {
114
- size: "x-small"
115
- }, /*#__PURE__*/React.createElement("b", null, t('Data Last Updated:')), "\xA0", displayDateAndTimeInTimezone(quizAnalysis.created_timestamp, timezone, locale))), /*#__PURE__*/React.createElement(NewQuizAnalysis, {
109
+ }, /*#__PURE__*/React.createElement(AnalysisUpdateDate, {
110
+ date: quizAnalysis.created_timestamp
111
+ })), /*#__PURE__*/React.createElement(NewQuizAnalysis, {
116
112
  quizAnalysis: quizAnalysis
117
113
  }), /*#__PURE__*/React.createElement(Heading, {
118
114
  level: "h3",
@@ -142,10 +138,6 @@ export var NewQuizAndItemAnalysis = /*#__PURE__*/function (_Component) {
142
138
  NewQuizAndItemAnalysis.displayName = "NewQuizAndItemAnalysis";
143
139
  return NewQuizAndItemAnalysis;
144
140
  }(Component);
145
- NewQuizAndItemAnalysis.contextTypes = {
146
- timezone: PropTypes.string,
147
- locale: PropTypes.string
148
- };
149
141
  NewQuizAndItemAnalysis.propTypes = {
150
142
  activeQuizId: PropTypes.string.isRequired,
151
143
  getQuizAnalysis: PropTypes.func.isRequired,
@@ -0,0 +1,23 @@
1
+ import PropTypes from 'prop-types';
2
+ export var quizAnalysisPropType = PropTypes.shape({
3
+ created_timestamp: PropTypes.string.isRequired,
4
+ metadata: PropTypes.shape({
5
+ quiz_title: PropTypes.string
6
+ }).isRequired,
7
+ scores: PropTypes.shape({
8
+ decile_distribution: PropTypes.arrayOf(PropTypes.number),
9
+ cronbachs_alpha: PropTypes.number,
10
+ stddev: PropTypes.number,
11
+ median_percentage: PropTypes.number,
12
+ max_percentage: PropTypes.number,
13
+ min_percentage: PropTypes.number,
14
+ mean_percentage: PropTypes.number
15
+ }).isRequired,
16
+ attempts: PropTypes.shape({
17
+ mean_elapsed_sec: PropTypes.number,
18
+ students_completed: PropTypes.number,
19
+ students_not_finished: PropTypes.number,
20
+ students_without_attempt: PropTypes.number,
21
+ average_attempts: PropTypes.number
22
+ }).isRequired
23
+ }).isRequired;
@@ -12,7 +12,7 @@ import { Link } from '@instructure/ui-link';
12
12
  import { themeable } from '@instructure/ui-themeable';
13
13
  import Card from "../../../../common/components/shared/Card/index.js";
14
14
  var styles = {
15
- componentId: 'cNnNG',
15
+ componentId: 'eRzKS',
16
16
  template: function template(theme) {
17
17
  return "\n\n.eRzKS_fbIL{border-radius:".concat(theme.cardBorderRadius || 'inherit', ";box-shadow:").concat(theme.cardBoxShadow || 'inherit', ";display:inline-flex;flex-direction:column;height:").concat(theme.cardHeight || 'inherit', ";margin:").concat(theme.cardMargin || 'inherit', ";padding:").concat(theme.cardPadding || 'inherit', ";width:").concat(theme.cardWidth || 'inherit', "}\n\n.eRzKS_ebWM{padding-top:").concat(theme.detailPadding || 'inherit', "}");
18
18
  },
@@ -0,0 +1,74 @@
1
+ "use strict";
2
+
3
+ var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard");
4
+
5
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
6
+
7
+ Object.defineProperty(exports, "__esModule", {
8
+ value: true
9
+ });
10
+ exports.AnalysisUpdateDate = void 0;
11
+
12
+ var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
13
+
14
+ var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
15
+
16
+ var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
17
+
18
+ var _createSuper2 = _interopRequireDefault(require("@babel/runtime/helpers/createSuper"));
19
+
20
+ var _react = _interopRequireWildcard(require("react"));
21
+
22
+ var _propTypes = _interopRequireDefault(require("prop-types"));
23
+
24
+ var _formatMessage = _interopRequireDefault(require("@instructure/quiz-i18n/es/format-message"));
25
+
26
+ var _formatTimespan = require("../../../../../common/util/formatTimespan.js");
27
+
28
+ var _uiText = require("@instructure/ui-text");
29
+
30
+ var _uiFlex = require("@instructure/ui-flex");
31
+
32
+ var AnalysisUpdateDate = /*#__PURE__*/function (_Component) {
33
+ (0, _inherits2.default)(AnalysisUpdateDate, _Component);
34
+
35
+ var _super = (0, _createSuper2.default)(AnalysisUpdateDate);
36
+
37
+ function AnalysisUpdateDate() {
38
+ (0, _classCallCheck2.default)(this, AnalysisUpdateDate);
39
+ return _super.apply(this, arguments);
40
+ }
41
+
42
+ (0, _createClass2.default)(AnalysisUpdateDate, [{
43
+ key: "render",
44
+ value: function render() {
45
+ var _this$context = this.context,
46
+ timezone = _this$context.timezone,
47
+ locale = _this$context.locale;
48
+ var _this$props = this.props,
49
+ date = _this$props.date,
50
+ multiline = _this$props.multiline;
51
+ return /*#__PURE__*/_react.default.createElement(_uiText.Text, {
52
+ size: "x-small"
53
+ }, /*#__PURE__*/_react.default.createElement(_uiFlex.Flex, {
54
+ direction: multiline ? 'column' : 'row',
55
+ alignItems: "start"
56
+ }, /*#__PURE__*/_react.default.createElement("b", null, (0, _formatMessage.default)('Data Last Updated:'), "\xA0"), /*#__PURE__*/_react.default.createElement("span", null, (0, _formatTimespan.displayDateAndTimeInTimezone)(date, timezone, locale))));
57
+ }
58
+ }]);
59
+ AnalysisUpdateDate.displayName = "AnalysisUpdateDate";
60
+ return AnalysisUpdateDate;
61
+ }(_react.Component);
62
+
63
+ exports.AnalysisUpdateDate = AnalysisUpdateDate;
64
+ AnalysisUpdateDate.propTypes = {
65
+ date: _propTypes.default.string.isRequired,
66
+ multiline: _propTypes.default.bool
67
+ };
68
+ AnalysisUpdateDate.contextTypes = {
69
+ timezone: _propTypes.default.string,
70
+ locale: _propTypes.default.string
71
+ };
72
+ AnalysisUpdateDate.defaultProps = {
73
+ multiline: false
74
+ };
@@ -31,8 +31,6 @@ var _theme = _interopRequireDefault(require("./theme.js"));
31
31
 
32
32
  var _formatTimespan = require("../../../../../common/util/formatTimespan.js");
33
33
 
34
- var _propTypes = _interopRequireDefault(require("prop-types"));
35
-
36
34
  var _index2 = _interopRequireDefault(require("../../../../../common/components/shared/Card/index.js"));
37
35
 
38
36
  var _index3 = _interopRequireDefault(require("../AnalysisPopoverMetric/index.js"));
@@ -41,6 +39,8 @@ var _index4 = _interopRequireDefault(require("../AnalysisMetric/index.js"));
41
39
 
42
40
  var _presenter = require("../charts/ScoreDistribution/presenter.js");
43
41
 
42
+ var _propTypes = require("../propTypes.js");
43
+
44
44
  var _dec, _class, _class2, _temp;
45
45
 
46
46
  var styles = {
@@ -177,28 +177,7 @@ var NewQuizAnalysis = (_dec = (0, _uiThemeable.themeable)(_theme.default, styles
177
177
  NewQuizAnalysis.displayName = "NewQuizAnalysis";
178
178
  return NewQuizAnalysis;
179
179
  }(_react.Component), _class2.propTypes = {
180
- quizAnalysis: _propTypes.default.shape({
181
- created_timestamp: _propTypes.default.string.isRequired,
182
- metadata: _propTypes.default.shape({
183
- quiz_title: _propTypes.default.string
184
- }).isRequired,
185
- scores: _propTypes.default.shape({
186
- decile_distribution: _propTypes.default.arrayOf(_propTypes.default.number),
187
- cronbachs_alpha: _propTypes.default.number,
188
- stddev: _propTypes.default.number,
189
- median_percentage: _propTypes.default.number,
190
- max_percentage: _propTypes.default.number,
191
- min_percentage: _propTypes.default.number,
192
- mean_percentage: _propTypes.default.number
193
- }).isRequired,
194
- attempts: _propTypes.default.shape({
195
- mean_elapsed_sec: _propTypes.default.number,
196
- students_completed: _propTypes.default.number,
197
- students_not_finished: _propTypes.default.number,
198
- students_without_attempt: _propTypes.default.number,
199
- average_attempts: _propTypes.default.number
200
- }).isRequired
201
- }).isRequired
180
+ quizAnalysis: _propTypes.quizAnalysisPropType
202
181
  }, _class2.defaultProps = {
203
182
  quizAnalysis: {}
204
183
  }, _temp)) || _class);
@@ -33,58 +33,115 @@ var _uiThemeable = require("@instructure/ui-themeable");
33
33
 
34
34
  var _index = _interopRequireDefault(require("../../../../../common/components/shared/Card/index.js"));
35
35
 
36
- var _theme = _interopRequireDefault(require("../../ReportCard/theme.js"));
36
+ var _theme = _interopRequireDefault(require("./theme.js"));
37
+
38
+ var _index2 = _interopRequireDefault(require("../AnalysisMetric/index.js"));
39
+
40
+ var _Spinner = _interopRequireDefault(require("../../../../../common/components/shared/spinner/Spinner.js"));
41
+
42
+ var _index3 = require("../AnalysisUpdateDate/index.js");
43
+
44
+ var _propTypes2 = require("../propTypes.js");
37
45
 
38
46
  var _dec, _class, _class2, _temp;
39
47
 
40
48
  var styles = {
41
- componentId: 'eRzKS',
49
+ componentId: 'eJSiT',
42
50
  template: function template(theme) {
43
- return "\n\n.eRzKS_fbIL{border-radius:".concat(theme.cardBorderRadius || 'inherit', ";box-shadow:").concat(theme.cardBoxShadow || 'inherit', ";display:inline-flex;flex-direction:column;height:").concat(theme.cardHeight || 'inherit', ";margin:").concat(theme.cardMargin || 'inherit', ";padding:").concat(theme.cardPadding || 'inherit', ";width:").concat(theme.cardWidth || 'inherit', "}\n\n.eRzKS_ebWM{padding-top:").concat(theme.detailPadding || 'inherit', "}");
51
+ return "\n\n.eJSiT_bqdH{column-gap:5px;display:flex;justify-content:space-between;padding:".concat(theme.metricsPadding || 'inherit', " 0}\n\n.eJSiT_fbIL{border-radius:").concat(theme.cardBorderRadius || 'inherit', ";box-shadow:").concat(theme.cardBoxShadow || 'inherit', ";display:inline-flex;flex-direction:column;margin:").concat(theme.cardMargin || 'inherit', ";padding:").concat(theme.cardPadding || 'inherit', ";width:").concat(theme.cardWidth || 'inherit', "}\n\n.eJSiT_blRb{max-width:160px;padding-right:10px}");
44
52
  },
45
- 'card': 'eRzKS_fbIL',
46
- 'details': 'eRzKS_ebWM'
53
+ 'metricsContainer': 'eJSiT_bqdH',
54
+ 'card': 'eJSiT_fbIL',
55
+ 'dateContainer': 'eJSiT_blRb'
47
56
  };
57
+
58
+ var _ref = /*#__PURE__*/_react.default.createElement(_Spinner.default, null);
59
+
48
60
  var NewQuizAndItemAnalysisReportCard = (_dec = (0, _uiThemeable.themeable)(_theme.default, styles), _dec(_class = (_temp = _class2 = /*#__PURE__*/function (_Component) {
49
61
  (0, _inherits2.default)(NewQuizAndItemAnalysisReportCard, _Component);
50
62
 
51
63
  var _super = (0, _createSuper2.default)(NewQuizAndItemAnalysisReportCard);
52
64
 
53
65
  function NewQuizAndItemAnalysisReportCard() {
66
+ var _this;
67
+
54
68
  (0, _classCallCheck2.default)(this, NewQuizAndItemAnalysisReportCard);
55
- return _super.apply(this, arguments);
69
+
70
+ for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
71
+ args[_key] = arguments[_key];
72
+ }
73
+
74
+ _this = _super.call.apply(_super, [this].concat(args));
75
+
76
+ _this.renderMetrics = function () {
77
+ var _quizAnalysis$scores, _quizAnalysis$scores2, _quizAnalysis$scores3;
78
+
79
+ var quizAnalysis = _this.props.quizAnalysis;
80
+ return /*#__PURE__*/_react.default.createElement("div", {
81
+ className: styles.metricsContainer
82
+ }, /*#__PURE__*/_react.default.createElement(_index2.default, {
83
+ metricKey: "highscore",
84
+ label: (0, _formatMessage.default)('high score'),
85
+ value: (_quizAnalysis$scores = quizAnalysis.scores) === null || _quizAnalysis$scores === void 0 ? void 0 : _quizAnalysis$scores.max_percentage,
86
+ suffix: "%"
87
+ }), /*#__PURE__*/_react.default.createElement(_index2.default, {
88
+ metricKey: "lowscore",
89
+ label: (0, _formatMessage.default)('low score'),
90
+ value: (_quizAnalysis$scores2 = quizAnalysis.scores) === null || _quizAnalysis$scores2 === void 0 ? void 0 : _quizAnalysis$scores2.min_percentage,
91
+ suffix: "%"
92
+ }), /*#__PURE__*/_react.default.createElement(_index2.default, {
93
+ metricKey: "meanscore",
94
+ label: (0, _formatMessage.default)('mean score'),
95
+ value: (_quizAnalysis$scores3 = quizAnalysis.scores) === null || _quizAnalysis$scores3 === void 0 ? void 0 : _quizAnalysis$scores3.mean_percentage,
96
+ suffix: "%"
97
+ }));
98
+ };
99
+
100
+ return _this;
56
101
  }
57
102
 
58
103
  (0, _createClass2.default)(NewQuizAndItemAnalysisReportCard, [{
59
- key: "render",
60
- value: function render() {
104
+ key: "renderContent",
105
+ value: function renderContent() {
61
106
  var _this$props = this.props,
62
107
  name = _this$props.name,
63
- href = _this$props.href;
64
- return /*#__PURE__*/_react.default.createElement(_index.default, {
65
- className: styles.card
66
- }, /*#__PURE__*/_react.default.createElement(_uiFlex.Flex, {
67
- direction: "column"
68
- }, /*#__PURE__*/_react.default.createElement(_uiFlex.Flex.Item, null, /*#__PURE__*/_react.default.createElement(_uiText.Text, {
108
+ href = _this$props.href,
109
+ quizAnalysis = _this$props.quizAnalysis;
110
+ return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement(_uiText.Text, {
69
111
  size: "medium",
70
112
  weight: "bold"
71
- }, name)), /*#__PURE__*/_react.default.createElement(_uiFlex.Flex.Item, {
72
- align: "end"
73
- }, /*#__PURE__*/_react.default.createElement(_uiLink.Link, {
113
+ }, name), this.renderMetrics(), /*#__PURE__*/_react.default.createElement(_uiFlex.Flex, {
114
+ direction: "row",
115
+ justifyItems: "space-between"
116
+ }, /*#__PURE__*/_react.default.createElement("div", {
117
+ className: styles.dateContainer
118
+ }, /*#__PURE__*/_react.default.createElement(_index3.AnalysisUpdateDate, {
119
+ date: quizAnalysis.created_timestamp,
120
+ multiline: true
121
+ })), /*#__PURE__*/_react.default.createElement(_uiLink.Link, {
74
122
  href: href
75
123
  }, /*#__PURE__*/_react.default.createElement(_uiText.Text, {
76
124
  size: "small"
77
- }, (0, _formatMessage.default)('View Report'))))));
125
+ }, (0, _formatMessage.default)('View Report')))));
126
+ }
127
+ }, {
128
+ key: "render",
129
+ value: function render() {
130
+ return /*#__PURE__*/_react.default.createElement(_index.default, {
131
+ className: styles.card
132
+ }, this.props.quizAnalysis ? this.renderContent() : _ref);
78
133
  }
79
134
  }]);
80
135
  NewQuizAndItemAnalysisReportCard.displayName = "NewQuizAndItemAnalysisReportCard";
81
136
  return NewQuizAndItemAnalysisReportCard;
82
137
  }(_react.Component), _class2.propTypes = {
83
138
  name: _propTypes.default.node,
84
- href: _propTypes.default.string
139
+ href: _propTypes.default.string,
140
+ quizAnalysis: _propTypes2.quizAnalysisPropType
85
141
  }, _class2.defaultProps = {
86
142
  name: void 0,
87
- href: void 0
143
+ href: void 0,
144
+ quizAnalysis: {}
88
145
  }, _temp)) || _class);
89
146
  exports.NewQuizAndItemAnalysisReportCard = NewQuizAndItemAnalysisReportCard;
90
147
  var _default = NewQuizAndItemAnalysisReportCard;
@@ -0,0 +1,19 @@
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
+ borders = _ref.borders;
11
+ return {
12
+ metricsPadding: spacing.medium,
13
+ cardWidth: '16rem',
14
+ cardPadding: spacing.medium,
15
+ cardMargin: spacing.xSmall,
16
+ cardBoxShadow: '1px 1px 3px 0 #ddd',
17
+ cardBorderRadius: borders.radiusMedium
18
+ };
19
+ }
@@ -35,11 +35,9 @@ var _index2 = _interopRequireDefault(require("./NewQuizAnalysis/index.js"));
35
35
 
36
36
  var _formatMessage = _interopRequireDefault(require("@instructure/quiz-i18n/es/format-message"));
37
37
 
38
- var _uiText = require("@instructure/ui-text");
39
-
40
38
  var _uiFlex = require("@instructure/ui-flex");
41
39
 
42
- var _formatTimespan = require("../../../../common/util/formatTimespan.js");
40
+ var _index3 = require("./AnalysisUpdateDate/index.js");
43
41
 
44
42
  var _ref3 = /*#__PURE__*/_react.default.createElement(_Spinner.default, null);
45
43
 
@@ -126,18 +124,15 @@ var NewQuizAndItemAnalysis = /*#__PURE__*/function (_Component) {
126
124
  var _this$state = this.state,
127
125
  quizAnalysis = _this$state.quizAnalysis,
128
126
  itemAnalyses = _this$state.itemAnalyses;
129
- var _this$context = this.context,
130
- timezone = _this$context.timezone,
131
- locale = _this$context.locale;
132
127
  return /*#__PURE__*/_react.default.createElement("div", {
133
128
  className: "fs-mask"
134
129
  }, /*#__PURE__*/_react.default.createElement(_uiFlex.Flex, {
135
130
  justifyItems: "end",
136
131
  width: "82.5rem",
137
132
  margin: "auto"
138
- }, /*#__PURE__*/_react.default.createElement(_uiText.Text, {
139
- size: "x-small"
140
- }, /*#__PURE__*/_react.default.createElement("b", null, (0, _formatMessage.default)('Data Last Updated:')), "\xA0", (0, _formatTimespan.displayDateAndTimeInTimezone)(quizAnalysis.created_timestamp, timezone, locale))), /*#__PURE__*/_react.default.createElement(_index2.default, {
133
+ }, /*#__PURE__*/_react.default.createElement(_index3.AnalysisUpdateDate, {
134
+ date: quizAnalysis.created_timestamp
135
+ })), /*#__PURE__*/_react.default.createElement(_index2.default, {
141
136
  quizAnalysis: quizAnalysis
142
137
  }), /*#__PURE__*/_react.default.createElement(_uiHeading.Heading, {
143
138
  level: "h3",
@@ -168,10 +163,6 @@ var NewQuizAndItemAnalysis = /*#__PURE__*/function (_Component) {
168
163
  }(_react.Component);
169
164
 
170
165
  exports.NewQuizAndItemAnalysis = NewQuizAndItemAnalysis;
171
- NewQuizAndItemAnalysis.contextTypes = {
172
- timezone: _propTypes.default.string,
173
- locale: _propTypes.default.string
174
- };
175
166
  NewQuizAndItemAnalysis.propTypes = {
176
167
  activeQuizId: _propTypes.default.string.isRequired,
177
168
  getQuizAnalysis: _propTypes.default.func.isRequired,
@@ -0,0 +1,35 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+
5
+ Object.defineProperty(exports, "__esModule", {
6
+ value: true
7
+ });
8
+ exports.quizAnalysisPropType = void 0;
9
+
10
+ var _propTypes = _interopRequireDefault(require("prop-types"));
11
+
12
+ var quizAnalysisPropType = _propTypes.default.shape({
13
+ created_timestamp: _propTypes.default.string.isRequired,
14
+ metadata: _propTypes.default.shape({
15
+ quiz_title: _propTypes.default.string
16
+ }).isRequired,
17
+ scores: _propTypes.default.shape({
18
+ decile_distribution: _propTypes.default.arrayOf(_propTypes.default.number),
19
+ cronbachs_alpha: _propTypes.default.number,
20
+ stddev: _propTypes.default.number,
21
+ median_percentage: _propTypes.default.number,
22
+ max_percentage: _propTypes.default.number,
23
+ min_percentage: _propTypes.default.number,
24
+ mean_percentage: _propTypes.default.number
25
+ }).isRequired,
26
+ attempts: _propTypes.default.shape({
27
+ mean_elapsed_sec: _propTypes.default.number,
28
+ students_completed: _propTypes.default.number,
29
+ students_not_finished: _propTypes.default.number,
30
+ students_without_attempt: _propTypes.default.number,
31
+ average_attempts: _propTypes.default.number
32
+ }).isRequired
33
+ }).isRequired;
34
+
35
+ exports.quizAnalysisPropType = quizAnalysisPropType;
@@ -34,7 +34,7 @@ var _theme = _interopRequireDefault(require("./theme.js"));
34
34
  var _dec, _class, _class2, _temp;
35
35
 
36
36
  var styles = {
37
- componentId: 'cNnNG',
37
+ componentId: 'eRzKS',
38
38
  template: function template(theme) {
39
39
  return "\n\n.eRzKS_fbIL{border-radius:".concat(theme.cardBorderRadius || 'inherit', ";box-shadow:").concat(theme.cardBoxShadow || 'inherit', ";display:inline-flex;flex-direction:column;height:").concat(theme.cardHeight || 'inherit', ";margin:").concat(theme.cardMargin || 'inherit', ";padding:").concat(theme.cardPadding || 'inherit', ";width:").concat(theme.cardWidth || 'inherit', "}\n\n.eRzKS_ebWM{padding-top:").concat(theme.detailPadding || 'inherit', "}");
40
40
  },
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@instructure/quiz-core",
3
- "version": "17.60.1-rc.0+e62c7066f",
3
+ "version": "17.60.1-rc.2+2a414acab",
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.60.1-rc.0+e62c7066f",
45
- "@instructure/quiz-i18n": "17.60.1-rc.0+e62c7066f",
46
- "@instructure/quiz-interactions": "17.60.1-rc.0+e62c7066f",
47
- "@instructure/quiz-number-input": "17.60.1-rc.0+e62c7066f",
48
- "@instructure/quiz-rce": "17.60.1-rc.0+e62c7066f",
44
+ "@instructure/quiz-common": "17.60.1-rc.2+2a414acab",
45
+ "@instructure/quiz-i18n": "17.60.1-rc.2+2a414acab",
46
+ "@instructure/quiz-interactions": "17.60.1-rc.2+2a414acab",
47
+ "@instructure/quiz-number-input": "17.60.1-rc.2+2a414acab",
48
+ "@instructure/quiz-rce": "17.60.1-rc.2+2a414acab",
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.60.1-rc.0+e62c7066f",
109
+ "instructure-validations": "17.60.1-rc.2+2a414acab",
110
110
  "ipaddr.js": "^1.5.4",
111
111
  "isomorphic-fetch": "^2.2.0",
112
112
  "isuuid": "^0.1.0",
@@ -157,7 +157,7 @@
157
157
  "intl": "^1.2.4",
158
158
  "jquery": "^2.2.3",
159
159
  "most-subject": "^5.3.0",
160
- "quiz-presets": "17.60.1-rc.0+e62c7066f",
160
+ "quiz-presets": "17.60.1-rc.2+2a414acab",
161
161
  "react": "^16.8.6",
162
162
  "react-addons-test-utils": "^15.6.2",
163
163
  "react-dom": "^16.8.6",
@@ -173,5 +173,5 @@
173
173
  "publishConfig": {
174
174
  "access": "public"
175
175
  },
176
- "gitHead": "e62c7066fff45755442bc69d5d792f30a6be5e58"
176
+ "gitHead": "2a414acaba912ac12b7e31030142696d91666c13"
177
177
  }