@instructure/quiz-core 17.50.2-rc.2 → 17.50.2-rc.4

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.
@@ -2,14 +2,26 @@ import _classCallCheck from "@babel/runtime/helpers/esm/classCallCheck";
2
2
  import _createClass from "@babel/runtime/helpers/esm/createClass";
3
3
  import _inherits from "@babel/runtime/helpers/esm/inherits";
4
4
  import _createSuper from "@babel/runtime/helpers/esm/createSuper";
5
+
6
+ var _dec, _class, _class2, _temp;
7
+
5
8
  import React, { Component } from 'react';
6
9
  import PropTypes from 'prop-types';
7
10
  import ImmutablePropTypes from 'react-immutable-proptypes';
11
+ import { themeable } from '@instructure/ui-themeable';
8
12
  import { chooseDragConnection, usingIE } from "../../../../../common/components/shared/drag_and_drop/dragAndDropUtils.js";
9
13
  import DragHandle from "../../../../../common/components/shared/drag_and_drop/DragHandle/index.js";
10
14
  import DragAndDropZone from "../../../../../common/components/shared/drag_and_drop/DragAndDropZone/index.js";
11
15
  import CommonSidebarItem from "../../../../../common/components/layout/sidebar/SidebarItem/index.js";
12
- export var BuildingSidebarItem = /*#__PURE__*/function (_Component) {
16
+ var styles = {
17
+ componentId: 'beYOg',
18
+ template: function template(theme) {
19
+ return "\n\n.beYOg_cpvQ{transform:translateZ(0)}";
20
+ },
21
+ 'sidebarItemWrapper': 'beYOg_cpvQ'
22
+ };
23
+ import theme from "./theme.js";
24
+ export var BuildingSidebarItem = (_dec = themeable(theme, styles), _dec(_class = (_temp = _class2 = /*#__PURE__*/function (_Component) {
13
25
  _inherits(BuildingSidebarItem, _Component);
14
26
 
15
27
  var _super = _createSuper(BuildingSidebarItem);
@@ -69,7 +81,9 @@ export var BuildingSidebarItem = /*#__PURE__*/function (_Component) {
69
81
  draggingOver: draggingOver,
70
82
  draggingAboveHalf: draggingAboveHalf
71
83
  };
72
- return /*#__PURE__*/React.createElement("div", null, /*#__PURE__*/React.createElement(DragAndDropZone, Object.assign({}, propsForDnDZone, {
84
+ return /*#__PURE__*/React.createElement("div", {
85
+ className: styles.sidebarItemWrapper
86
+ }, /*#__PURE__*/React.createElement(DragAndDropZone, Object.assign({}, propsForDnDZone, {
73
87
  location: "above"
74
88
  })), /*#__PURE__*/React.createElement(CommonSidebarItem, {
75
89
  itemId: this.props.itemId,
@@ -104,8 +118,7 @@ export var BuildingSidebarItem = /*#__PURE__*/function (_Component) {
104
118
 
105
119
  BuildingSidebarItem.displayName = "BuildingSidebarItem";
106
120
  return BuildingSidebarItem;
107
- }(Component);
108
- BuildingSidebarItem.propTypes = {
121
+ }(Component), _class2.propTypes = {
109
122
  connectDragSource: PropTypes.func.isRequired,
110
123
  // inserted by React DnD
111
124
  connectDragPreview: PropTypes.func.isRequired,
@@ -127,10 +140,9 @@ BuildingSidebarItem.propTypes = {
127
140
  // Passed in by connect
128
141
  draggingOver: PropTypes.bool.isRequired,
129
142
  draggingAboveHalf: PropTypes.bool.isRequired
130
- };
131
- BuildingSidebarItem.defaultProps = {
143
+ }, _class2.defaultProps = {
132
144
  disableDraggingOverride: false,
133
145
  inStimulus: false,
134
146
  itemBody: ''
135
- };
147
+ }, _temp)) || _class);
136
148
  export default BuildingSidebarItem;
@@ -0,0 +1,3 @@
1
+ export default function generator() {
2
+ return {};
3
+ }
@@ -2,14 +2,26 @@ import _classCallCheck from "@babel/runtime/helpers/esm/classCallCheck";
2
2
  import _createClass from "@babel/runtime/helpers/esm/createClass";
3
3
  import _inherits from "@babel/runtime/helpers/esm/inherits";
4
4
  import _createSuper from "@babel/runtime/helpers/esm/createSuper";
5
+
6
+ var _dec, _class, _class2, _temp;
7
+
5
8
  import React, { Component } from 'react';
6
9
  import PropTypes from 'prop-types';
7
10
  import ImmutablePropTypes from 'react-immutable-proptypes';
11
+ import { themeable } from '@instructure/ui-themeable';
8
12
  import { chooseDragConnection, usingIE } from "../../../../../common/components/shared/drag_and_drop/dragAndDropUtils.js";
9
13
  import DragHandle from "../../../../../common/components/shared/drag_and_drop/DragHandle/index.js";
10
14
  import DragAndDropZone from "../../../../../common/components/shared/drag_and_drop/DragAndDropZone/index.js";
11
15
  import CommonStimulus from "../../../../../common/components/layout/sidebar/Stimulus/index.js";
12
- export var BuildingStimulus = /*#__PURE__*/function (_Component) {
16
+ var styles = {
17
+ componentId: 'fyovm',
18
+ template: function template(theme) {
19
+ return "\n\n.fyovm_drae{transform:translateZ(0)}";
20
+ },
21
+ 'sidebarStimulusWrapper': 'fyovm_drae'
22
+ };
23
+ import theme from "./theme.js";
24
+ export var BuildingStimulus = (_dec = themeable(theme, styles), _dec(_class = (_temp = _class2 = /*#__PURE__*/function (_Component) {
13
25
  _inherits(BuildingStimulus, _Component);
14
26
 
15
27
  var _super = _createSuper(BuildingStimulus);
@@ -84,7 +96,9 @@ export var BuildingStimulus = /*#__PURE__*/function (_Component) {
84
96
  draggingAboveHalf: this.props.draggingAboveHalf,
85
97
  dropIntoEmptyStimulus: this.props.dropIntoEmptyStimulus
86
98
  };
87
- return /*#__PURE__*/React.createElement("div", null, /*#__PURE__*/React.createElement(DragAndDropZone, Object.assign({}, propsForDnDZone, {
99
+ return /*#__PURE__*/React.createElement("div", {
100
+ className: styles.sidebarStimulusWrapper
101
+ }, /*#__PURE__*/React.createElement(DragAndDropZone, Object.assign({}, propsForDnDZone, {
88
102
  location: "above"
89
103
  })), this.renderStimulus(), /*#__PURE__*/React.createElement(DragAndDropZone, Object.assign({}, propsForDnDZone, {
90
104
  location: "in"
@@ -112,8 +126,7 @@ export var BuildingStimulus = /*#__PURE__*/function (_Component) {
112
126
 
113
127
  BuildingStimulus.displayName = "BuildingStimulus";
114
128
  return BuildingStimulus;
115
- }(Component);
116
- BuildingStimulus.propTypes = {
129
+ }(Component), _class2.propTypes = {
117
130
  childEntries: ImmutablePropTypes.listOf(ImmutablePropTypes.record).isRequired,
118
131
  connectDragPreview: PropTypes.func.isRequired,
119
132
  // inserted by React DnD
@@ -135,10 +148,9 @@ BuildingStimulus.propTypes = {
135
148
  draggingAboveHalf: PropTypes.bool.isRequired,
136
149
  draggingOver: PropTypes.bool.isRequired,
137
150
  dropIntoEmptyStimulus: PropTypes.bool
138
- };
139
- BuildingStimulus.defaultProps = {
151
+ }, _class2.defaultProps = {
140
152
  draggingAboveHalf: false,
141
153
  dropIntoEmptyStimulus: false,
142
154
  isOver: false
143
- };
155
+ }, _temp)) || _class);
144
156
  export default BuildingStimulus;
@@ -0,0 +1,3 @@
1
+ export default function generator() {
2
+ return {};
3
+ }
@@ -0,0 +1,38 @@
1
+ import _regeneratorRuntime from "@babel/runtime/regenerator";
2
+ import _asyncToGenerator from "@babel/runtime/helpers/esm/asyncToGenerator";
3
+ export var getItemAnalyses = /*#__PURE__*/function () {
4
+ var _ref = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee(quizId) {
5
+ var response;
6
+ return _regeneratorRuntime.wrap(function _callee$(_context) {
7
+ while (1) {
8
+ switch (_context.prev = _context.next) {
9
+ case 0:
10
+ _context.prev = 0;
11
+ _context.next = 3;
12
+ return fetch("http://".concat(window.ENV.API_HOST, "/api/quizzes/").concat(quizId, "/stats/new_item_analyses"));
13
+
14
+ case 3:
15
+ response = _context.sent;
16
+ _context.next = 6;
17
+ return response.json();
18
+
19
+ case 6:
20
+ return _context.abrupt("return", _context.sent);
21
+
22
+ case 9:
23
+ _context.prev = 9;
24
+ _context.t0 = _context["catch"](0);
25
+ console.error(_context.t0);
26
+
27
+ case 12:
28
+ case "end":
29
+ return _context.stop();
30
+ }
31
+ }
32
+ }, _callee, null, [[0, 9]]);
33
+ }));
34
+
35
+ return function getItemAnalyses(_x) {
36
+ return _ref.apply(this, arguments);
37
+ };
38
+ }();
@@ -0,0 +1,38 @@
1
+ import _regeneratorRuntime from "@babel/runtime/regenerator";
2
+ import _asyncToGenerator from "@babel/runtime/helpers/esm/asyncToGenerator";
3
+ export var getQuizAnalysis = /*#__PURE__*/function () {
4
+ var _ref = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee(quizId) {
5
+ var response;
6
+ return _regeneratorRuntime.wrap(function _callee$(_context) {
7
+ while (1) {
8
+ switch (_context.prev = _context.next) {
9
+ case 0:
10
+ _context.prev = 0;
11
+ _context.next = 3;
12
+ return fetch("http://".concat(window.ENV.API_HOST, "/api/quizzes/").concat(quizId, "/stats/new_quiz_analysis"));
13
+
14
+ case 3:
15
+ response = _context.sent;
16
+ _context.next = 6;
17
+ return response.json();
18
+
19
+ case 6:
20
+ return _context.abrupt("return", _context.sent);
21
+
22
+ case 9:
23
+ _context.prev = 9;
24
+ _context.t0 = _context["catch"](0);
25
+ console.error(_context.t0);
26
+
27
+ case 12:
28
+ case "end":
29
+ return _context.stop();
30
+ }
31
+ }
32
+ }, _callee, null, [[0, 9]]);
33
+ }));
34
+
35
+ return function getQuizAnalysis(_x) {
36
+ return _ref.apply(this, arguments);
37
+ };
38
+ }();
@@ -1,14 +1,12 @@
1
1
  import { NewQuizAndItemAnalysis as NewQuizAndItemAnalysisPresenter } from "./presenter.js";
2
2
  import { connect } from "../../../../common/react-redux.js";
3
- import { getActiveQuiz } from "../../../../common/selectors/quizzes.js";
4
- import { getExistingQuiz } from "../../../../common/api/quizzes.js";
5
- export function mapStateToProps(state) {
6
- var activeQuiz = getActiveQuiz(state);
3
+ import { getQuizAnalysis } from "../../../api/newQuizAnalysis.js";
4
+ import { getItemAnalyses } from "../../../api/newItemAnalyses.js";
5
+ export function mapStateToProps(_state) {
7
6
  return {
8
- quiz: activeQuiz
7
+ getQuizAnalysis: getQuizAnalysis,
8
+ getItemAnalyses: getItemAnalyses
9
9
  };
10
10
  }
11
- export var NewQuizAndItemAnalysis = connect(mapStateToProps, {
12
- getExistingQuiz: getExistingQuiz
13
- })(NewQuizAndItemAnalysisPresenter);
11
+ export var NewQuizAndItemAnalysis = connect(mapStateToProps)(NewQuizAndItemAnalysisPresenter);
14
12
  export default NewQuizAndItemAnalysis;
@@ -1,79 +1,150 @@
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';
1
+ import _regeneratorRuntime from "@babel/runtime/regenerator";
2
+ import _asyncToGenerator from "@babel/runtime/helpers/esm/asyncToGenerator";
3
+ import _slicedToArray from "@babel/runtime/helpers/esm/slicedToArray";
4
+ import React, { useEffect, useState } from 'react';
6
5
  import PropTypes from 'prop-types';
7
- import ImmutablePropTypes from 'react-immutable-proptypes';
8
6
  import { Heading } from '@instructure/ui-heading';
9
7
  import { Metric, MetricGroup } from '@instructure/ui-metric';
10
8
  import Spinner from "../../../../common/components/shared/spinner/Spinner.js";
11
- import { withI18nSupport } from '@instructure/quiz-common';
12
9
 
13
- var _ref = /*#__PURE__*/React.createElement(MetricGroup, null, /*#__PURE__*/React.createElement(Metric, {
14
- renderLabel: "Example 1",
15
- renderValue: "80%"
16
- }), /*#__PURE__*/React.createElement(Metric, {
17
- renderLabel: "Example 2",
18
- renderValue: "5"
19
- }), /*#__PURE__*/React.createElement(Metric, {
20
- renderLabel: "Example 3",
21
- renderValue: "Good"
22
- }));
10
+ var _ref4 = /*#__PURE__*/React.createElement(Heading, {
11
+ level: "h3",
12
+ color: "primary"
13
+ }, "Quiz analysis");
23
14
 
24
- var _ref2 = /*#__PURE__*/React.createElement(Spinner, null);
15
+ var _ref5 = /*#__PURE__*/React.createElement(Heading, {
16
+ level: "h3",
17
+ color: "primary"
18
+ }, "Item analysis");
25
19
 
26
- export var NewQuizAndItemAnalysis = /*#__PURE__*/function (_withI18nSupport) {
27
- _inherits(NewQuizAndItemAnalysis, _withI18nSupport);
20
+ var _ref6 = /*#__PURE__*/React.createElement(Spinner, null);
28
21
 
29
- var _super = _createSuper(NewQuizAndItemAnalysis);
22
+ export var NewQuizAndItemAnalysis = function NewQuizAndItemAnalysis(_ref) {
23
+ var activeQuizId = _ref.activeQuizId,
24
+ getQuizAnalysis = _ref.getQuizAnalysis,
25
+ getItemAnalyses = _ref.getItemAnalyses;
30
26
 
31
- function NewQuizAndItemAnalysis() {
32
- _classCallCheck(this, NewQuizAndItemAnalysis);
27
+ var _useState = useState(null),
28
+ _useState2 = _slicedToArray(_useState, 2),
29
+ quizAnalysis = _useState2[0],
30
+ setQuizAnalysis = _useState2[1];
33
31
 
34
- return _super.apply(this, arguments);
35
- }
32
+ var _useState3 = useState(null),
33
+ _useState4 = _slicedToArray(_useState3, 2),
34
+ itemAnalyses = _useState4[0],
35
+ setItemAnalyses = _useState4[1];
36
+
37
+ useEffect(function () {
38
+ var fetch = /*#__PURE__*/function () {
39
+ var _ref2 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee() {
40
+ var quizAnalysis;
41
+ return _regeneratorRuntime.wrap(function _callee$(_context) {
42
+ while (1) {
43
+ switch (_context.prev = _context.next) {
44
+ case 0:
45
+ _context.next = 2;
46
+ return getQuizAnalysis(activeQuizId);
47
+
48
+ case 2:
49
+ quizAnalysis = _context.sent;
50
+ setQuizAnalysis(quizAnalysis);
51
+
52
+ case 4:
53
+ case "end":
54
+ return _context.stop();
55
+ }
56
+ }
57
+ }, _callee);
58
+ }));
59
+
60
+ return function fetch() {
61
+ return _ref2.apply(this, arguments);
62
+ };
63
+ }();
64
+
65
+ fetch();
66
+ }, []);
67
+ useEffect(function () {
68
+ var fetch = /*#__PURE__*/function () {
69
+ var _ref3 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee2() {
70
+ var itemAnalyses;
71
+ return _regeneratorRuntime.wrap(function _callee2$(_context2) {
72
+ while (1) {
73
+ switch (_context2.prev = _context2.next) {
74
+ case 0:
75
+ _context2.next = 2;
76
+ return getItemAnalyses(activeQuizId);
77
+
78
+ case 2:
79
+ itemAnalyses = _context2.sent;
80
+ setItemAnalyses(itemAnalyses);
81
+
82
+ case 4:
83
+ case "end":
84
+ return _context2.stop();
85
+ }
86
+ }
87
+ }, _callee2);
88
+ }));
36
89
 
37
- _createClass(NewQuizAndItemAnalysis, [{
38
- key: "componentDidMount",
39
- value: function componentDidMount() {
40
- this.props.getExistingQuiz(this.props.activeQuizId);
41
- }
42
- }, {
43
- key: "renderContent",
44
- value: function renderContent() {
45
- var quiz = this.props.quiz;
46
- return /*#__PURE__*/React.createElement("div", {
47
- className: "fs-mask"
48
- }, /*#__PURE__*/React.createElement(Heading, {
49
- level: "h3",
50
- color: "primary"
51
- }, quiz.title), _ref);
52
- }
53
- }, {
54
- key: "render",
55
- value: function render() {
56
- if (this.props.quiz.isLoaded()) {
57
- return this.renderContent();
58
- } else {
59
- return _ref2;
60
- }
61
- }
62
- }]);
63
-
64
- NewQuizAndItemAnalysis.displayName = "NewQuizAndItemAnalysis";
65
- return NewQuizAndItemAnalysis;
66
- }(withI18nSupport(Component));
90
+ return function fetch() {
91
+ return _ref3.apply(this, arguments);
92
+ };
93
+ }();
94
+
95
+ fetch();
96
+ }, []);
97
+
98
+ var renderContent = function renderContent() {
99
+ /* eslint-disable react/jsx-no-literals */
100
+ return /*#__PURE__*/React.createElement("div", {
101
+ className: "fs-mask"
102
+ }, /*#__PURE__*/React.createElement(Heading, {
103
+ level: "h2",
104
+ color: "primary"
105
+ }, quizAnalysis.metadata.quiz_title), _ref4, /*#__PURE__*/React.createElement(MetricGroup, null, /*#__PURE__*/React.createElement(Metric, {
106
+ key: "highscore",
107
+ renderLabel: "HIGH SCORE",
108
+ renderValue: quizAnalysis.scores.max_percentage
109
+ }), /*#__PURE__*/React.createElement(Metric, {
110
+ key: "lowscore",
111
+ renderLabel: "LOW SCORE",
112
+ renderValue: quizAnalysis.scores.min_percentage
113
+ }), /*#__PURE__*/React.createElement(Metric, {
114
+ key: "meanscore",
115
+ renderLabel: "MEAN SCORE",
116
+ renderValue: quizAnalysis.scores.mean_percentage
117
+ })), _ref5, itemAnalyses === null || itemAnalyses === void 0 ? void 0 : itemAnalyses.map(function (itemAnalysis) {
118
+ return /*#__PURE__*/React.createElement(MetricGroup, {
119
+ key: itemAnalysis.metadata.item_id
120
+ }, /*#__PURE__*/React.createElement(Metric, {
121
+ key: "itemdifficulty",
122
+ renderLabel: "ITEM DIFFICULTY",
123
+ renderValue: itemAnalysis.scores.difficulty
124
+ }), /*#__PURE__*/React.createElement(Metric, {
125
+ key: "responded",
126
+ renderLabel: "RESPONDED",
127
+ renderValue: itemAnalysis.attempts.students_responded
128
+ }), /*#__PURE__*/React.createElement(Metric, {
129
+ key: "skipped",
130
+ renderLabel: "SKIPPED/NO RESPONSE",
131
+ renderValue: itemAnalysis.attempts.students_without_response
132
+ }));
133
+ }));
134
+ /* eslint-enable react/jsx-no-literals */
135
+ }; // TODO: distinguish between loading and empty item analyses (eg. when there is no items in a quiz)
136
+ // once it is known how will be such a case handled by the backend
137
+
138
+
139
+ if (quizAnalysis && itemAnalyses) {
140
+ return renderContent();
141
+ } else {
142
+ return _ref6;
143
+ }
144
+ };
67
145
  NewQuizAndItemAnalysis.propTypes = {
68
- quiz: ImmutablePropTypes.record.isRequired,
69
146
  activeQuizId: PropTypes.string.isRequired,
70
- getExistingQuiz: PropTypes.func.isRequired,
71
- locale: PropTypes.string
72
- };
73
- NewQuizAndItemAnalysis.defaultProps = {
74
- locale: null
75
- };
76
- NewQuizAndItemAnalysis.contextTypes = {
77
- locale: PropTypes.string
147
+ getQuizAnalysis: PropTypes.func.isRequired,
148
+ getItemAnalyses: PropTypes.func.isRequired
78
149
  };
79
150
  export default NewQuizAndItemAnalysis;
@@ -1,9 +1,9 @@
1
1
  "use strict";
2
2
 
3
- var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard");
4
-
5
3
  var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
6
4
 
5
+ var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard");
6
+
7
7
  Object.defineProperty(exports, "__esModule", {
8
8
  value: true
9
9
  });
@@ -23,6 +23,8 @@ var _propTypes = _interopRequireDefault(require("prop-types"));
23
23
 
24
24
  var _reactImmutableProptypes = _interopRequireDefault(require("react-immutable-proptypes"));
25
25
 
26
+ var _uiThemeable = require("@instructure/ui-themeable");
27
+
26
28
  var _dragAndDropUtils = require("../../../../../common/components/shared/drag_and_drop/dragAndDropUtils.js");
27
29
 
28
30
  var _index = _interopRequireDefault(require("../../../../../common/components/shared/drag_and_drop/DragHandle/index.js"));
@@ -31,7 +33,18 @@ var _index2 = _interopRequireDefault(require("../../../../../common/components/s
31
33
 
32
34
  var _index3 = _interopRequireDefault(require("../../../../../common/components/layout/sidebar/SidebarItem/index.js"));
33
35
 
34
- var BuildingSidebarItem = /*#__PURE__*/function (_Component) {
36
+ var _theme = _interopRequireDefault(require("./theme.js"));
37
+
38
+ var _dec, _class, _class2, _temp;
39
+
40
+ var styles = {
41
+ componentId: 'beYOg',
42
+ template: function template(theme) {
43
+ return "\n\n.beYOg_cpvQ{transform:translateZ(0)}";
44
+ },
45
+ 'sidebarItemWrapper': 'beYOg_cpvQ'
46
+ };
47
+ var BuildingSidebarItem = (_dec = (0, _uiThemeable.themeable)(_theme.default, styles), _dec(_class = (_temp = _class2 = /*#__PURE__*/function (_Component) {
35
48
  (0, _inherits2.default)(BuildingSidebarItem, _Component);
36
49
 
37
50
  var _super = (0, _createSuper2.default)(BuildingSidebarItem);
@@ -90,7 +103,9 @@ var BuildingSidebarItem = /*#__PURE__*/function (_Component) {
90
103
  draggingOver: draggingOver,
91
104
  draggingAboveHalf: draggingAboveHalf
92
105
  };
93
- return /*#__PURE__*/_react.default.createElement("div", null, /*#__PURE__*/_react.default.createElement(_index2.default, Object.assign({}, propsForDnDZone, {
106
+ return /*#__PURE__*/_react.default.createElement("div", {
107
+ className: styles.sidebarItemWrapper
108
+ }, /*#__PURE__*/_react.default.createElement(_index2.default, Object.assign({}, propsForDnDZone, {
94
109
  location: "above"
95
110
  })), /*#__PURE__*/_react.default.createElement(_index3.default, {
96
111
  itemId: this.props.itemId,
@@ -124,10 +139,7 @@ var BuildingSidebarItem = /*#__PURE__*/function (_Component) {
124
139
  }]);
125
140
  BuildingSidebarItem.displayName = "BuildingSidebarItem";
126
141
  return BuildingSidebarItem;
127
- }(_react.Component);
128
-
129
- exports.BuildingSidebarItem = BuildingSidebarItem;
130
- BuildingSidebarItem.propTypes = {
142
+ }(_react.Component), _class2.propTypes = {
131
143
  connectDragSource: _propTypes.default.func.isRequired,
132
144
  // inserted by React DnD
133
145
  connectDragPreview: _propTypes.default.func.isRequired,
@@ -149,11 +161,11 @@ BuildingSidebarItem.propTypes = {
149
161
  // Passed in by connect
150
162
  draggingOver: _propTypes.default.bool.isRequired,
151
163
  draggingAboveHalf: _propTypes.default.bool.isRequired
152
- };
153
- BuildingSidebarItem.defaultProps = {
164
+ }, _class2.defaultProps = {
154
165
  disableDraggingOverride: false,
155
166
  inStimulus: false,
156
167
  itemBody: ''
157
- };
168
+ }, _temp)) || _class);
169
+ exports.BuildingSidebarItem = BuildingSidebarItem;
158
170
  var _default = BuildingSidebarItem;
159
171
  exports.default = _default;
@@ -0,0 +1,10 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = generator;
7
+
8
+ function generator() {
9
+ return {};
10
+ }
@@ -1,9 +1,9 @@
1
1
  "use strict";
2
2
 
3
- var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard");
4
-
5
3
  var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
6
4
 
5
+ var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard");
6
+
7
7
  Object.defineProperty(exports, "__esModule", {
8
8
  value: true
9
9
  });
@@ -23,6 +23,8 @@ var _propTypes = _interopRequireDefault(require("prop-types"));
23
23
 
24
24
  var _reactImmutableProptypes = _interopRequireDefault(require("react-immutable-proptypes"));
25
25
 
26
+ var _uiThemeable = require("@instructure/ui-themeable");
27
+
26
28
  var _dragAndDropUtils = require("../../../../../common/components/shared/drag_and_drop/dragAndDropUtils.js");
27
29
 
28
30
  var _index = _interopRequireDefault(require("../../../../../common/components/shared/drag_and_drop/DragHandle/index.js"));
@@ -31,7 +33,18 @@ var _index2 = _interopRequireDefault(require("../../../../../common/components/s
31
33
 
32
34
  var _index3 = _interopRequireDefault(require("../../../../../common/components/layout/sidebar/Stimulus/index.js"));
33
35
 
34
- var BuildingStimulus = /*#__PURE__*/function (_Component) {
36
+ var _theme = _interopRequireDefault(require("./theme.js"));
37
+
38
+ var _dec, _class, _class2, _temp;
39
+
40
+ var styles = {
41
+ componentId: 'fyovm',
42
+ template: function template(theme) {
43
+ return "\n\n.fyovm_drae{transform:translateZ(0)}";
44
+ },
45
+ 'sidebarStimulusWrapper': 'fyovm_drae'
46
+ };
47
+ var BuildingStimulus = (_dec = (0, _uiThemeable.themeable)(_theme.default, styles), _dec(_class = (_temp = _class2 = /*#__PURE__*/function (_Component) {
35
48
  (0, _inherits2.default)(BuildingStimulus, _Component);
36
49
 
37
50
  var _super = (0, _createSuper2.default)(BuildingStimulus);
@@ -105,7 +118,9 @@ var BuildingStimulus = /*#__PURE__*/function (_Component) {
105
118
  draggingAboveHalf: this.props.draggingAboveHalf,
106
119
  dropIntoEmptyStimulus: this.props.dropIntoEmptyStimulus
107
120
  };
108
- return /*#__PURE__*/_react.default.createElement("div", null, /*#__PURE__*/_react.default.createElement(_index2.default, Object.assign({}, propsForDnDZone, {
121
+ return /*#__PURE__*/_react.default.createElement("div", {
122
+ className: styles.sidebarStimulusWrapper
123
+ }, /*#__PURE__*/_react.default.createElement(_index2.default, Object.assign({}, propsForDnDZone, {
109
124
  location: "above"
110
125
  })), this.renderStimulus(), /*#__PURE__*/_react.default.createElement(_index2.default, Object.assign({}, propsForDnDZone, {
111
126
  location: "in"
@@ -132,10 +147,7 @@ var BuildingStimulus = /*#__PURE__*/function (_Component) {
132
147
  }]);
133
148
  BuildingStimulus.displayName = "BuildingStimulus";
134
149
  return BuildingStimulus;
135
- }(_react.Component);
136
-
137
- exports.BuildingStimulus = BuildingStimulus;
138
- BuildingStimulus.propTypes = {
150
+ }(_react.Component), _class2.propTypes = {
139
151
  childEntries: _reactImmutableProptypes.default.listOf(_reactImmutableProptypes.default.record).isRequired,
140
152
  connectDragPreview: _propTypes.default.func.isRequired,
141
153
  // inserted by React DnD
@@ -157,11 +169,11 @@ BuildingStimulus.propTypes = {
157
169
  draggingAboveHalf: _propTypes.default.bool.isRequired,
158
170
  draggingOver: _propTypes.default.bool.isRequired,
159
171
  dropIntoEmptyStimulus: _propTypes.default.bool
160
- };
161
- BuildingStimulus.defaultProps = {
172
+ }, _class2.defaultProps = {
162
173
  draggingAboveHalf: false,
163
174
  dropIntoEmptyStimulus: false,
164
175
  isOver: false
165
- };
176
+ }, _temp)) || _class);
177
+ exports.BuildingStimulus = BuildingStimulus;
166
178
  var _default = BuildingStimulus;
167
179
  exports.default = _default;
@@ -0,0 +1,10 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = generator;
7
+
8
+ function generator() {
9
+ return {};
10
+ }
@@ -0,0 +1,51 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+
5
+ Object.defineProperty(exports, "__esModule", {
6
+ value: true
7
+ });
8
+ exports.getItemAnalyses = void 0;
9
+
10
+ var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
11
+
12
+ var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
13
+
14
+ var getItemAnalyses = /*#__PURE__*/function () {
15
+ var _ref = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee(quizId) {
16
+ var response;
17
+ return _regenerator.default.wrap(function _callee$(_context) {
18
+ while (1) {
19
+ switch (_context.prev = _context.next) {
20
+ case 0:
21
+ _context.prev = 0;
22
+ _context.next = 3;
23
+ return fetch("http://".concat(window.ENV.API_HOST, "/api/quizzes/").concat(quizId, "/stats/new_item_analyses"));
24
+
25
+ case 3:
26
+ response = _context.sent;
27
+ _context.next = 6;
28
+ return response.json();
29
+
30
+ case 6:
31
+ return _context.abrupt("return", _context.sent);
32
+
33
+ case 9:
34
+ _context.prev = 9;
35
+ _context.t0 = _context["catch"](0);
36
+ console.error(_context.t0);
37
+
38
+ case 12:
39
+ case "end":
40
+ return _context.stop();
41
+ }
42
+ }
43
+ }, _callee, null, [[0, 9]]);
44
+ }));
45
+
46
+ return function getItemAnalyses(_x) {
47
+ return _ref.apply(this, arguments);
48
+ };
49
+ }();
50
+
51
+ exports.getItemAnalyses = getItemAnalyses;
@@ -0,0 +1,51 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+
5
+ Object.defineProperty(exports, "__esModule", {
6
+ value: true
7
+ });
8
+ exports.getQuizAnalysis = void 0;
9
+
10
+ var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
11
+
12
+ var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
13
+
14
+ var getQuizAnalysis = /*#__PURE__*/function () {
15
+ var _ref = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee(quizId) {
16
+ var response;
17
+ return _regenerator.default.wrap(function _callee$(_context) {
18
+ while (1) {
19
+ switch (_context.prev = _context.next) {
20
+ case 0:
21
+ _context.prev = 0;
22
+ _context.next = 3;
23
+ return fetch("http://".concat(window.ENV.API_HOST, "/api/quizzes/").concat(quizId, "/stats/new_quiz_analysis"));
24
+
25
+ case 3:
26
+ response = _context.sent;
27
+ _context.next = 6;
28
+ return response.json();
29
+
30
+ case 6:
31
+ return _context.abrupt("return", _context.sent);
32
+
33
+ case 9:
34
+ _context.prev = 9;
35
+ _context.t0 = _context["catch"](0);
36
+ console.error(_context.t0);
37
+
38
+ case 12:
39
+ case "end":
40
+ return _context.stop();
41
+ }
42
+ }
43
+ }, _callee, null, [[0, 9]]);
44
+ }));
45
+
46
+ return function getQuizAnalysis(_x) {
47
+ return _ref.apply(this, arguments);
48
+ };
49
+ }();
50
+
51
+ exports.getQuizAnalysis = getQuizAnalysis;
@@ -10,20 +10,18 @@ var _presenter = require("./presenter.js");
10
10
 
11
11
  var _reactRedux = require("../../../../common/react-redux.js");
12
12
 
13
- var _quizzes = require("../../../../common/selectors/quizzes.js");
13
+ var _newQuizAnalysis = require("../../../api/newQuizAnalysis.js");
14
14
 
15
- var _quizzes2 = require("../../../../common/api/quizzes.js");
15
+ var _newItemAnalyses = require("../../../api/newItemAnalyses.js");
16
16
 
17
- function mapStateToProps(state) {
18
- var activeQuiz = (0, _quizzes.getActiveQuiz)(state);
17
+ function mapStateToProps(_state) {
19
18
  return {
20
- quiz: activeQuiz
19
+ getQuizAnalysis: _newQuizAnalysis.getQuizAnalysis,
20
+ getItemAnalyses: _newItemAnalyses.getItemAnalyses
21
21
  };
22
22
  }
23
23
 
24
- var NewQuizAndItemAnalysis = (0, _reactRedux.connect)(mapStateToProps, {
25
- getExistingQuiz: _quizzes2.getExistingQuiz
26
- })(_presenter.NewQuizAndItemAnalysis);
24
+ var NewQuizAndItemAnalysis = (0, _reactRedux.connect)(mapStateToProps)(_presenter.NewQuizAndItemAnalysis);
27
25
  exports.NewQuizAndItemAnalysis = NewQuizAndItemAnalysis;
28
26
  var _default = NewQuizAndItemAnalysis;
29
27
  exports.default = _default;
@@ -9,93 +9,163 @@ Object.defineProperty(exports, "__esModule", {
9
9
  });
10
10
  exports.default = exports.NewQuizAndItemAnalysis = void 0;
11
11
 
12
- var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
12
+ var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
13
13
 
14
- var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
14
+ var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
15
15
 
16
- var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
17
-
18
- var _createSuper2 = _interopRequireDefault(require("@babel/runtime/helpers/createSuper"));
16
+ var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
19
17
 
20
18
  var _react = _interopRequireWildcard(require("react"));
21
19
 
22
20
  var _propTypes = _interopRequireDefault(require("prop-types"));
23
21
 
24
- var _reactImmutableProptypes = _interopRequireDefault(require("react-immutable-proptypes"));
25
-
26
22
  var _uiHeading = require("@instructure/ui-heading");
27
23
 
28
24
  var _uiMetric = require("@instructure/ui-metric");
29
25
 
30
26
  var _Spinner = _interopRequireDefault(require("../../../../common/components/shared/spinner/Spinner.js"));
31
27
 
32
- var _quizCommon = require("@instructure/quiz-common");
33
-
34
- var _ref = /*#__PURE__*/_react.default.createElement(_uiMetric.MetricGroup, null, /*#__PURE__*/_react.default.createElement(_uiMetric.Metric, {
35
- renderLabel: "Example 1",
36
- renderValue: "80%"
37
- }), /*#__PURE__*/_react.default.createElement(_uiMetric.Metric, {
38
- renderLabel: "Example 2",
39
- renderValue: "5"
40
- }), /*#__PURE__*/_react.default.createElement(_uiMetric.Metric, {
41
- renderLabel: "Example 3",
42
- renderValue: "Good"
43
- }));
44
-
45
- var _ref2 = /*#__PURE__*/_react.default.createElement(_Spinner.default, null);
46
-
47
- var NewQuizAndItemAnalysis = /*#__PURE__*/function (_withI18nSupport) {
48
- (0, _inherits2.default)(NewQuizAndItemAnalysis, _withI18nSupport);
49
-
50
- var _super = (0, _createSuper2.default)(NewQuizAndItemAnalysis);
51
-
52
- function NewQuizAndItemAnalysis() {
53
- (0, _classCallCheck2.default)(this, NewQuizAndItemAnalysis);
54
- return _super.apply(this, arguments);
28
+ var _ref4 = /*#__PURE__*/_react.default.createElement(_uiHeading.Heading, {
29
+ level: "h3",
30
+ color: "primary"
31
+ }, "Quiz analysis");
32
+
33
+ var _ref5 = /*#__PURE__*/_react.default.createElement(_uiHeading.Heading, {
34
+ level: "h3",
35
+ color: "primary"
36
+ }, "Item analysis");
37
+
38
+ var _ref6 = /*#__PURE__*/_react.default.createElement(_Spinner.default, null);
39
+
40
+ var NewQuizAndItemAnalysis = function NewQuizAndItemAnalysis(_ref) {
41
+ var activeQuizId = _ref.activeQuizId,
42
+ getQuizAnalysis = _ref.getQuizAnalysis,
43
+ getItemAnalyses = _ref.getItemAnalyses;
44
+
45
+ var _useState = (0, _react.useState)(null),
46
+ _useState2 = (0, _slicedToArray2.default)(_useState, 2),
47
+ quizAnalysis = _useState2[0],
48
+ setQuizAnalysis = _useState2[1];
49
+
50
+ var _useState3 = (0, _react.useState)(null),
51
+ _useState4 = (0, _slicedToArray2.default)(_useState3, 2),
52
+ itemAnalyses = _useState4[0],
53
+ setItemAnalyses = _useState4[1];
54
+
55
+ (0, _react.useEffect)(function () {
56
+ var fetch = /*#__PURE__*/function () {
57
+ var _ref2 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee() {
58
+ var quizAnalysis;
59
+ return _regenerator.default.wrap(function _callee$(_context) {
60
+ while (1) {
61
+ switch (_context.prev = _context.next) {
62
+ case 0:
63
+ _context.next = 2;
64
+ return getQuizAnalysis(activeQuizId);
65
+
66
+ case 2:
67
+ quizAnalysis = _context.sent;
68
+ setQuizAnalysis(quizAnalysis);
69
+
70
+ case 4:
71
+ case "end":
72
+ return _context.stop();
73
+ }
74
+ }
75
+ }, _callee);
76
+ }));
77
+
78
+ return function fetch() {
79
+ return _ref2.apply(this, arguments);
80
+ };
81
+ }();
82
+
83
+ fetch();
84
+ }, []);
85
+ (0, _react.useEffect)(function () {
86
+ var fetch = /*#__PURE__*/function () {
87
+ var _ref3 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee2() {
88
+ var itemAnalyses;
89
+ return _regenerator.default.wrap(function _callee2$(_context2) {
90
+ while (1) {
91
+ switch (_context2.prev = _context2.next) {
92
+ case 0:
93
+ _context2.next = 2;
94
+ return getItemAnalyses(activeQuizId);
95
+
96
+ case 2:
97
+ itemAnalyses = _context2.sent;
98
+ setItemAnalyses(itemAnalyses);
99
+
100
+ case 4:
101
+ case "end":
102
+ return _context2.stop();
103
+ }
104
+ }
105
+ }, _callee2);
106
+ }));
107
+
108
+ return function fetch() {
109
+ return _ref3.apply(this, arguments);
110
+ };
111
+ }();
112
+
113
+ fetch();
114
+ }, []);
115
+
116
+ var renderContent = function renderContent() {
117
+ /* eslint-disable react/jsx-no-literals */
118
+ return /*#__PURE__*/_react.default.createElement("div", {
119
+ className: "fs-mask"
120
+ }, /*#__PURE__*/_react.default.createElement(_uiHeading.Heading, {
121
+ level: "h2",
122
+ color: "primary"
123
+ }, quizAnalysis.metadata.quiz_title), _ref4, /*#__PURE__*/_react.default.createElement(_uiMetric.MetricGroup, null, /*#__PURE__*/_react.default.createElement(_uiMetric.Metric, {
124
+ key: "highscore",
125
+ renderLabel: "HIGH SCORE",
126
+ renderValue: quizAnalysis.scores.max_percentage
127
+ }), /*#__PURE__*/_react.default.createElement(_uiMetric.Metric, {
128
+ key: "lowscore",
129
+ renderLabel: "LOW SCORE",
130
+ renderValue: quizAnalysis.scores.min_percentage
131
+ }), /*#__PURE__*/_react.default.createElement(_uiMetric.Metric, {
132
+ key: "meanscore",
133
+ renderLabel: "MEAN SCORE",
134
+ renderValue: quizAnalysis.scores.mean_percentage
135
+ })), _ref5, itemAnalyses === null || itemAnalyses === void 0 ? void 0 : itemAnalyses.map(function (itemAnalysis) {
136
+ return /*#__PURE__*/_react.default.createElement(_uiMetric.MetricGroup, {
137
+ key: itemAnalysis.metadata.item_id
138
+ }, /*#__PURE__*/_react.default.createElement(_uiMetric.Metric, {
139
+ key: "itemdifficulty",
140
+ renderLabel: "ITEM DIFFICULTY",
141
+ renderValue: itemAnalysis.scores.difficulty
142
+ }), /*#__PURE__*/_react.default.createElement(_uiMetric.Metric, {
143
+ key: "responded",
144
+ renderLabel: "RESPONDED",
145
+ renderValue: itemAnalysis.attempts.students_responded
146
+ }), /*#__PURE__*/_react.default.createElement(_uiMetric.Metric, {
147
+ key: "skipped",
148
+ renderLabel: "SKIPPED/NO RESPONSE",
149
+ renderValue: itemAnalysis.attempts.students_without_response
150
+ }));
151
+ }));
152
+ /* eslint-enable react/jsx-no-literals */
153
+ }; // TODO: distinguish between loading and empty item analyses (eg. when there is no items in a quiz)
154
+ // once it is known how will be such a case handled by the backend
155
+
156
+
157
+ if (quizAnalysis && itemAnalyses) {
158
+ return renderContent();
159
+ } else {
160
+ return _ref6;
55
161
  }
56
-
57
- (0, _createClass2.default)(NewQuizAndItemAnalysis, [{
58
- key: "componentDidMount",
59
- value: function componentDidMount() {
60
- this.props.getExistingQuiz(this.props.activeQuizId);
61
- }
62
- }, {
63
- key: "renderContent",
64
- value: function renderContent() {
65
- var quiz = this.props.quiz;
66
- return /*#__PURE__*/_react.default.createElement("div", {
67
- className: "fs-mask"
68
- }, /*#__PURE__*/_react.default.createElement(_uiHeading.Heading, {
69
- level: "h3",
70
- color: "primary"
71
- }, quiz.title), _ref);
72
- }
73
- }, {
74
- key: "render",
75
- value: function render() {
76
- if (this.props.quiz.isLoaded()) {
77
- return this.renderContent();
78
- } else {
79
- return _ref2;
80
- }
81
- }
82
- }]);
83
- NewQuizAndItemAnalysis.displayName = "NewQuizAndItemAnalysis";
84
- return NewQuizAndItemAnalysis;
85
- }((0, _quizCommon.withI18nSupport)(_react.Component));
162
+ };
86
163
 
87
164
  exports.NewQuizAndItemAnalysis = NewQuizAndItemAnalysis;
88
165
  NewQuizAndItemAnalysis.propTypes = {
89
- quiz: _reactImmutableProptypes.default.record.isRequired,
90
166
  activeQuizId: _propTypes.default.string.isRequired,
91
- getExistingQuiz: _propTypes.default.func.isRequired,
92
- locale: _propTypes.default.string
93
- };
94
- NewQuizAndItemAnalysis.defaultProps = {
95
- locale: null
96
- };
97
- NewQuizAndItemAnalysis.contextTypes = {
98
- locale: _propTypes.default.string
167
+ getQuizAnalysis: _propTypes.default.func.isRequired,
168
+ getItemAnalyses: _propTypes.default.func.isRequired
99
169
  };
100
170
  var _default = NewQuizAndItemAnalysis;
101
171
  exports.default = _default;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@instructure/quiz-core",
3
- "version": "17.50.2-rc.2+d049180db",
3
+ "version": "17.50.2-rc.4+76b30427e",
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.2",
44
- "@instructure/quiz-common": "17.50.2-rc.2+d049180db",
45
- "@instructure/quiz-i18n": "17.50.2-rc.2+d049180db",
46
- "@instructure/quiz-interactions": "17.50.2-rc.2+d049180db",
47
- "@instructure/quiz-number-input": "17.50.2-rc.2+d049180db",
48
- "@instructure/quiz-rce": "17.50.2-rc.2+d049180db",
44
+ "@instructure/quiz-common": "17.50.2-rc.4+76b30427e",
45
+ "@instructure/quiz-i18n": "17.50.2-rc.4+76b30427e",
46
+ "@instructure/quiz-interactions": "17.50.2-rc.4+76b30427e",
47
+ "@instructure/quiz-number-input": "17.50.2-rc.4+76b30427e",
48
+ "@instructure/quiz-rce": "17.50.2-rc.4+76b30427e",
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.50.2-rc.2+d049180db",
109
+ "instructure-validations": "17.50.2-rc.4+76b30427e",
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.50.2-rc.2+d049180db",
159
+ "quiz-presets": "17.50.2-rc.4+76b30427e",
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": "d049180db6fd8dcffe1ae4f30fa80bda64ae0dd4"
175
+ "gitHead": "76b30427eba0ae9274af07b949123c13101adc6b"
176
176
  }