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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (47) hide show
  1. package/es/reporting/components/resources/NewQuizAndItemAnalysis/AnswerFrequencySummary/ChoiceType/presenter.js +2 -2
  2. package/es/reporting/components/resources/NewQuizAndItemAnalysis/AnswerFrequencySummary/MatchingType/MatchingTypeTable/presenter.js +1 -0
  3. package/es/reporting/components/resources/NewQuizAndItemAnalysis/AnswerFrequencySummary/RichFillBlankType/index.js +1 -0
  4. package/es/reporting/components/resources/NewQuizAndItemAnalysis/AnswerFrequencySummary/RichFillBlankType/presenter.js +92 -0
  5. package/es/reporting/components/resources/NewQuizAndItemAnalysis/AnswerFrequencySummary/RichFillBlankType/styles.js +10 -0
  6. package/es/reporting/components/resources/NewQuizAndItemAnalysis/AnswerFrequencySummary/RichFillBlankType/theme.js +8 -0
  7. package/es/reporting/components/resources/NewQuizAndItemAnalysis/AnswerFrequencySummary/presenter.js +5 -0
  8. package/es/reporting/components/resources/NewQuizAndItemAnalysis/AnswerFrequencySummary/shared/AggregationTable/presenter.js +1 -2
  9. package/es/reporting/components/resources/NewQuizAndItemAnalysis/AnswerFrequencySummary/shared/ChoiceGroupTypeTable/index.js +1 -0
  10. package/es/reporting/components/resources/NewQuizAndItemAnalysis/AnswerFrequencySummary/shared/ChoiceGroupTypeTable/presenter.js +165 -0
  11. package/es/reporting/components/resources/NewQuizAndItemAnalysis/AnswerFrequencySummary/shared/ChoiceGroupTypeTable/styles.js +15 -0
  12. package/es/reporting/components/resources/NewQuizAndItemAnalysis/AnswerFrequencySummary/shared/ChoiceGroupTypeTable/theme.js +9 -0
  13. package/es/reporting/components/resources/NewQuizAndItemAnalysis/AnswerFrequencySummary/{ChoiceType → shared}/ChoiceTypeTable/presenter.js +23 -20
  14. package/es/reporting/components/resources/NewQuizAndItemAnalysis/NewItemAnalysis/BlankIcon/index.js +1 -0
  15. package/es/reporting/components/resources/NewQuizAndItemAnalysis/NewItemAnalysis/BlankIcon/presenter.js +40 -0
  16. package/es/reporting/components/resources/NewQuizAndItemAnalysis/NewItemAnalysis/BlankIcon/styles.js +17 -0
  17. package/es/reporting/components/resources/NewQuizAndItemAnalysis/NewItemAnalysis/BlankIcon/theme.js +11 -0
  18. package/es/reporting/components/resources/NewQuizAndItemAnalysis/NewItemAnalysis/index.js +2 -1
  19. package/es/reporting/components/resources/NewQuizAndItemAnalysis/NewItemAnalysis/presenter.js +59 -17
  20. package/es/reporting/components/resources/NewQuizAndItemAnalysis/NewItemAnalysis/theme.js +7 -2
  21. package/es/reporting/components/resources/NewQuizAndItemAnalysis/propTypes.js +31 -12
  22. package/lib/reporting/components/resources/NewQuizAndItemAnalysis/AnswerFrequencySummary/ChoiceType/presenter.js +2 -2
  23. package/lib/reporting/components/resources/NewQuizAndItemAnalysis/AnswerFrequencySummary/MatchingType/MatchingTypeTable/presenter.js +1 -0
  24. package/lib/reporting/components/resources/NewQuizAndItemAnalysis/AnswerFrequencySummary/RichFillBlankType/index.js +13 -0
  25. package/lib/reporting/components/resources/NewQuizAndItemAnalysis/AnswerFrequencySummary/RichFillBlankType/presenter.js +115 -0
  26. package/lib/reporting/components/resources/NewQuizAndItemAnalysis/AnswerFrequencySummary/RichFillBlankType/styles.js +18 -0
  27. package/lib/reporting/components/resources/NewQuizAndItemAnalysis/AnswerFrequencySummary/RichFillBlankType/theme.js +16 -0
  28. package/lib/reporting/components/resources/NewQuizAndItemAnalysis/AnswerFrequencySummary/presenter.js +13 -7
  29. package/lib/reporting/components/resources/NewQuizAndItemAnalysis/AnswerFrequencySummary/shared/AggregationTable/presenter.js +1 -3
  30. package/lib/reporting/components/resources/NewQuizAndItemAnalysis/AnswerFrequencySummary/shared/ChoiceGroupTypeTable/index.js +13 -0
  31. package/lib/reporting/components/resources/NewQuizAndItemAnalysis/AnswerFrequencySummary/shared/ChoiceGroupTypeTable/presenter.js +189 -0
  32. package/lib/reporting/components/resources/NewQuizAndItemAnalysis/AnswerFrequencySummary/shared/ChoiceGroupTypeTable/styles.js +23 -0
  33. package/lib/reporting/components/resources/NewQuizAndItemAnalysis/AnswerFrequencySummary/shared/ChoiceGroupTypeTable/theme.js +17 -0
  34. package/lib/reporting/components/resources/NewQuizAndItemAnalysis/AnswerFrequencySummary/{ChoiceType → shared}/ChoiceTypeTable/presenter.js +22 -19
  35. package/lib/reporting/components/resources/NewQuizAndItemAnalysis/NewItemAnalysis/BlankIcon/index.js +13 -0
  36. package/lib/reporting/components/resources/NewQuizAndItemAnalysis/NewItemAnalysis/BlankIcon/presenter.js +55 -0
  37. package/lib/reporting/components/resources/NewQuizAndItemAnalysis/NewItemAnalysis/BlankIcon/styles.js +25 -0
  38. package/lib/reporting/components/resources/NewQuizAndItemAnalysis/NewItemAnalysis/BlankIcon/theme.js +19 -0
  39. package/lib/reporting/components/resources/NewQuizAndItemAnalysis/NewItemAnalysis/index.js +2 -1
  40. package/lib/reporting/components/resources/NewQuizAndItemAnalysis/NewItemAnalysis/presenter.js +60 -17
  41. package/lib/reporting/components/resources/NewQuizAndItemAnalysis/NewItemAnalysis/theme.js +7 -2
  42. package/lib/reporting/components/resources/NewQuizAndItemAnalysis/propTypes.js +40 -11
  43. package/package.json +9 -9
  44. /package/es/reporting/components/resources/NewQuizAndItemAnalysis/AnswerFrequencySummary/{ChoiceType → shared}/ChoiceTypeTable/index.js +0 -0
  45. /package/es/reporting/components/resources/NewQuizAndItemAnalysis/AnswerFrequencySummary/{ChoiceType → shared}/ChoiceTypeTable/theme.js +0 -0
  46. /package/lib/reporting/components/resources/NewQuizAndItemAnalysis/AnswerFrequencySummary/{ChoiceType → shared}/ChoiceTypeTable/index.js +0 -0
  47. /package/lib/reporting/components/resources/NewQuizAndItemAnalysis/AnswerFrequencySummary/{ChoiceType → shared}/ChoiceTypeTable/theme.js +0 -0
@@ -0,0 +1,189 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+
5
+ Object.defineProperty(exports, "__esModule", {
6
+ value: true
7
+ });
8
+ exports.ChoiceGroupTypeTable = void 0;
9
+
10
+ var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
11
+
12
+ var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
13
+
14
+ var _createSuper2 = _interopRequireDefault(require("@babel/runtime/helpers/createSuper"));
15
+
16
+ var _react = require("react");
17
+
18
+ var _propTypes = _interopRequireDefault(require("prop-types"));
19
+
20
+ var _propTypes2 = require("../../../propTypes.js");
21
+
22
+ var _uiFlex = require("@instructure/ui-flex");
23
+
24
+ var _uiText = require("@instructure/ui-text");
25
+
26
+ var _index = _interopRequireDefault(require("../../../../../../../common/components/shared/ExpandButton/index.js"));
27
+
28
+ var _formatMessage = _interopRequireDefault(require("@instructure/quiz-i18n/es/format-message"));
29
+
30
+ var _index2 = _interopRequireDefault(require("../../../../../../../common/components/shared/Card/index.js"));
31
+
32
+ var _index3 = _interopRequireDefault(require("../ChoiceTypeTable/index.js"));
33
+
34
+ var _index4 = _interopRequireDefault(require("../../../NewItemAnalysis/BlankIcon/index.js"));
35
+
36
+ var _emotion = require("@instructure/emotion");
37
+
38
+ var _styles = _interopRequireDefault(require("./styles.js"));
39
+
40
+ var _theme = _interopRequireDefault(require("./theme.js"));
41
+
42
+ var _dec, _class, _class2, _temp;
43
+
44
+ var ChoiceGroupTypeTable = (_dec = (0, _emotion.withStyle)(_styles.default, _theme.default), _dec(_class = (_temp = _class2 = /*#__PURE__*/function (_Component) {
45
+ (0, _inherits2.default)(ChoiceGroupTypeTable, _Component);
46
+
47
+ var _super = (0, _createSuper2.default)(ChoiceGroupTypeTable);
48
+
49
+ function ChoiceGroupTypeTable() {
50
+ var _this;
51
+
52
+ (0, _classCallCheck2.default)(this, ChoiceGroupTypeTable);
53
+
54
+ for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
55
+ args[_key] = arguments[_key];
56
+ }
57
+
58
+ _this = _super.call.apply(_super, [this].concat(args));
59
+ _this.state = {
60
+ bodyExpanded: false
61
+ };
62
+
63
+ _this.getTranslatedBlankType = function (blank_type) {
64
+ switch (blank_type) {
65
+ case 'openEntry':
66
+ return (0, _formatMessage.default)('Open Entry');
67
+
68
+ case 'wordbank':
69
+ return (0, _formatMessage.default)('Word Bank');
70
+
71
+ case 'dropdown':
72
+ return (0, _formatMessage.default)('Dropdown');
73
+
74
+ default:
75
+ return blank_type;
76
+ }
77
+ };
78
+
79
+ _this.handleBodyToggle = function () {
80
+ _this.setState({
81
+ bodyExpanded: !_this.state.bodyExpanded
82
+ });
83
+ };
84
+
85
+ _this.renderTable = function () {
86
+ var _this$props = _this.props,
87
+ itemId = _this$props.itemId,
88
+ blank = _this$props.blank,
89
+ index = _this$props.index;
90
+ var choices = blank.choices;
91
+ var tableId = "".concat(itemId, "_").concat(index, "_choiceGroup");
92
+ var tableContainerSizeClass = '';
93
+ return (0, _emotion.jsx)(_index3.default, {
94
+ itemId: tableId,
95
+ choices: choices,
96
+ tableContainerSizeClass: tableContainerSizeClass
97
+ });
98
+ };
99
+
100
+ _this.renderBlankIcon = function () {
101
+ var index = _this.props.index;
102
+ var blankIconKey = "blank_icon_".concat(index);
103
+ return (0, _emotion.jsx)(_index4.default, {
104
+ key: blankIconKey,
105
+ number: index + 1
106
+ });
107
+ };
108
+
109
+ _this.renderHeadLine = function () {
110
+ var _this$props2 = _this.props,
111
+ blank = _this$props2.blank,
112
+ blankInfo = _this$props2.blankInfo;
113
+ var blank_text = blank.blank_text,
114
+ blank_type = blank.blank_type;
115
+ var blankTextAndType = "".concat(blank_text, " (").concat(_this.getTranslatedBlankType(blank_type), ")");
116
+ return (0, _emotion.jsx)(_uiFlex.Flex, {
117
+ overflowY: "visible",
118
+ direction: "row",
119
+ alignItems: "start",
120
+ wrap: "wrap"
121
+ }, (0, _emotion.jsx)(_uiFlex.Flex.Item, null, _this.renderBlankIcon()), (0, _emotion.jsx)(_uiFlex.Flex.Item, {
122
+ margin: "xxx-small medium small x-small"
123
+ }, (0, _emotion.jsx)(_uiText.Text, {
124
+ weight: "bold"
125
+ }, blankTextAndType)), (0, _emotion.jsx)(_uiFlex.Flex.Item, {
126
+ shouldShrink: true,
127
+ margin: "xxx-small none small none"
128
+ }, blankInfo));
129
+ };
130
+
131
+ _this.renderGroup = function () {
132
+ return (0, _emotion.jsx)(_uiFlex.Flex, {
133
+ direction: "row",
134
+ alignItems: "start"
135
+ }, (0, _emotion.jsx)(_uiFlex.Flex.Item, {
136
+ shouldShrink: true,
137
+ shouldGrow: true,
138
+ margin: "xx-small none none none"
139
+ }, _this.renderHeadLine()), (0, _emotion.jsx)(_uiFlex.Flex.Item, {
140
+ margin: "none none none x-small"
141
+ }, (0, _emotion.jsx)(_index.default, {
142
+ onClick: _this.handleBodyToggle,
143
+ title: _this.state.bodyExpanded ? (0, _formatMessage.default)('collapse group result') : (0, _formatMessage.default)('expand group result'),
144
+ isExpanded: _this.state.bodyExpanded
145
+ })));
146
+ };
147
+
148
+ _this.render = function () {
149
+ return (0, _emotion.jsx)("div", {
150
+ css: _this.props.styles.groupWrapper
151
+ }, (0, _emotion.jsx)(_index2.default, {
152
+ css: _this.props.styles.cardWrapper
153
+ }, (0, _emotion.jsx)(_uiFlex.Flex, {
154
+ direction: "column",
155
+ justifyItems: "start"
156
+ }, (0, _emotion.jsx)(_uiFlex.Flex.Item, {
157
+ overflowY: "visible"
158
+ }, (0, _emotion.jsx)(_uiFlex.Flex.Item, {
159
+ shouldGrow: true,
160
+ shouldShrink: true
161
+ }, (0, _emotion.jsx)(_uiFlex.Flex, {
162
+ direction: "column",
163
+ justifyItems: "start"
164
+ }, (0, _emotion.jsx)(_uiFlex.Flex.Item, {
165
+ shouldShrink: true,
166
+ padding: "x-small small x-small medium",
167
+ overflowY: "hidden"
168
+ }, _this.renderGroup()), _this.state.bodyExpanded && (0, _emotion.jsx)(_uiFlex.Flex.Item, {
169
+ shouldShrink: true,
170
+ padding: "x-small small x-small small"
171
+ }, _this.renderTable())))))));
172
+ };
173
+
174
+ return _this;
175
+ }
176
+
177
+ return ChoiceGroupTypeTable;
178
+ }(_react.Component), _class2.propTypes = {
179
+ itemId: _propTypes.default.number.isRequired,
180
+ blank: _propTypes.default.shape({
181
+ choices: _propTypes.default.arrayOf(_propTypes2.choiceTypeObject).isRequired,
182
+ blank_text: _propTypes.default.string.isRequired,
183
+ blank_type: _propTypes.default.string.isRequired
184
+ }).isRequired,
185
+ blankInfo: _propTypes.default.node.isRequired,
186
+ index: _propTypes.default.number.isRequired,
187
+ styles: _propTypes.default.object
188
+ }.isRequired, _temp)) || _class);
189
+ exports.ChoiceGroupTypeTable = ChoiceGroupTypeTable;
@@ -0,0 +1,23 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = void 0;
7
+
8
+ var generateStyle = function generateStyle(componentTheme) {
9
+ return {
10
+ groupWrapper: {
11
+ padding: '0',
12
+ width: 'calc(25% + 350px)',
13
+ minWidth: componentTheme.cardMinWidth,
14
+ maxWidth: '100%'
15
+ },
16
+ cardWrapper: {
17
+ margin: "0 0 ".concat(componentTheme.cardBottomMargin, " 0")
18
+ }
19
+ };
20
+ };
21
+
22
+ var _default = generateStyle;
23
+ exports.default = _default;
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = void 0;
7
+
8
+ var generateComponentTheme = function generateComponentTheme(_ref) {
9
+ var spacing = _ref.spacing;
10
+ return {
11
+ cardBottomMargin: spacing.xSmall,
12
+ cardMinWidth: '500px'
13
+ };
14
+ };
15
+
16
+ var _default = generateComponentTheme;
17
+ exports.default = _default;
@@ -48,19 +48,20 @@ var _uiText = require("@instructure/ui-text");
48
48
  var _rowStyleMap, _dec, _class, _class2, _temp;
49
49
 
50
50
  var styles = {
51
- componentId: 'elvBp',
51
+ componentId: 'cYrxJ',
52
52
  template: function template(theme) {
53
- return "\n\n.elvBp_rMrG{display:flex;flex-basis:100%;flex-direction:column;padding-bottom:".concat(theme.tableBottomPadding || 'inherit', "}\n\n.elvBp_SVtU{max-width:100%;width:calc(25% + 350px)}\n\n.elvBp_SVtU table{border-collapse:separate;border-spacing:0 1px}\n\n.elvBp_eviJ table thead tr td,.elvBp_eviJ table thead tr th{border-bottom:solid 0.0625rem ").concat(theme.colorGray || 'inherit', "}\n\n.elvBp_SVtU table tbody tr th{font-weight:400;width:33.33%}\n\n.elvBp_SVtU table tbody tr td{width:33.33%}\n\n.elvBp_cvRx{align-items:center;display:flex;height:100%;justify-content:center;min-height:47px;width:46px}\n\n.elvBp_EKAb{background-color:").concat(theme.colorGreen || 'inherit', "}\n\n.elvBp_EKAb svg{fill:#fff}\n\n.elvBp_cCmC{align-items:center;display:flex;height:calc(100% - 4px);justify-content:center}\n\n.elvBp_dJVn{padding:").concat(theme.cellPadding || 'inherit', "}\n\n.elvBp_eEOp td,.elvBp_eEOp th{border-bottom:solid 0.0625rem ").concat(theme.colorGray || 'inherit', "}\n\n.elvBp_UAZE td{border-width:2px 0 2px 0}\n\n.elvBp_UAZE td,.elvBp_UAZE th:first-child{border-color:").concat(theme.colorGreen || 'inherit', ";border-style:solid}\n\n.elvBp_UAZE th:first-child{border-radius:4px 0 0 4px;border-width:2px 0 2px 2px}\n\n.elvBp_UAZE td:last-child{border-color:").concat(theme.colorGreen || 'inherit', ";border-radius:0 4px 4px 0;border-style:solid;border-width:2px 2px 2px 0}");
53
+ return "\n\n.cYrxJ_rMrG{display:flex;flex-basis:100%;flex-direction:column;padding-bottom:".concat(theme.tableBottomPadding || 'inherit', "}\n\n.cYrxJ_fgIl{max-width:100%;width:calc(25% + 350px)}\n\n.cYrxJ_SVtU table{border-collapse:separate;border-spacing:0 1px}\n\n.cYrxJ_eviJ table thead tr td,.cYrxJ_eviJ table thead tr th{border-bottom:solid 0.0625rem ").concat(theme.colorGray || 'inherit', "}\n\n.cYrxJ_SVtU table tbody tr th{font-weight:400;width:33.33%}\n\n.cYrxJ_SVtU table tbody tr td{width:33.33%}\n\n.cYrxJ_cvRx{align-items:center;display:flex;height:100%;justify-content:center;min-height:47px;width:46px}\n\n.cYrxJ_EKAb{background-color:").concat(theme.colorGreen || 'inherit', "}\n\n.cYrxJ_EKAb svg{fill:#fff}\n\n.cYrxJ_cCmC{align-items:center;display:flex;height:calc(100% - 4px);justify-content:center}\n\n.cYrxJ_dJVn{padding:").concat(theme.cellPadding || 'inherit', "}\n\n.cYrxJ_eEOp td,.cYrxJ_eEOp th{border-bottom:solid 0.0625rem ").concat(theme.colorGray || 'inherit', "}\n\n.cYrxJ_UAZE td{border-width:2px 0 2px 0}\n\n.cYrxJ_UAZE td,.cYrxJ_UAZE th:first-child{border-color:").concat(theme.colorGreen || 'inherit', ";border-style:solid}\n\n.cYrxJ_UAZE th:first-child{border-radius:4px 0 0 4px;border-width:2px 0 2px 2px}\n\n.cYrxJ_UAZE td:last-child{border-color:").concat(theme.colorGreen || 'inherit', ";border-radius:0 4px 4px 0;border-style:solid;border-width:2px 2px 2px 0}");
54
54
  },
55
- 'tableWrapper': 'elvBp_rMrG',
56
- 'tableContainer': 'elvBp_SVtU',
57
- 'headerGrayBottomBorder': 'elvBp_eviJ',
58
- 'iconWrapper': 'elvBp_cvRx',
59
- 'iconCorrect': 'elvBp_EKAb',
60
- 'textContainer': 'elvBp_cCmC',
61
- 'firstTextContainer': 'elvBp_dJVn',
62
- 'incorrectRow': 'elvBp_eEOp',
63
- 'correctRow': 'elvBp_UAZE'
55
+ 'tableWrapper': 'cYrxJ_rMrG',
56
+ 'tableWidthMax': 'cYrxJ_fgIl',
57
+ 'tableContainer': 'cYrxJ_SVtU',
58
+ 'headerGrayBottomBorder': 'cYrxJ_eviJ',
59
+ 'iconWrapper': 'cYrxJ_cvRx',
60
+ 'iconCorrect': 'cYrxJ_EKAb',
61
+ 'textContainer': 'cYrxJ_cCmC',
62
+ 'firstTextContainer': 'cYrxJ_dJVn',
63
+ 'incorrectRow': 'cYrxJ_eEOp',
64
+ 'correctRow': 'cYrxJ_UAZE'
64
65
  };
65
66
  var correctAttribute = 'correct';
66
67
  var incorrectAttribute = 'incorrect';
@@ -124,8 +125,7 @@ var ChoiceTypeTable = (_dec = (0, _uiThemeable.themeable)(_theme.default, styles
124
125
  };
125
126
 
126
127
  _this.getDataIconAttribute = function (correct, choiceIndex) {
127
- var answerSummary = _this.props.answerSummary;
128
- var choices = answerSummary.choices;
128
+ var choices = _this.props.choices;
129
129
 
130
130
  if (_this.nextChoiceIsCorrect(choices, choiceIndex + 1) && !correct) {
131
131
  return '';
@@ -199,13 +199,13 @@ var ChoiceTypeTable = (_dec = (0, _uiThemeable.themeable)(_theme.default, styles
199
199
 
200
200
  _this.render = function () {
201
201
  var _this$props = _this.props,
202
- answerSummary = _this$props.answerSummary,
203
- itemId = _this$props.itemId;
204
- var choices = answerSummary.choices;
202
+ choices = _this$props.choices,
203
+ itemId = _this$props.itemId,
204
+ tableContainerSizeClass = _this$props.tableContainerSizeClass;
205
205
  var answerHeaderId = "answer-frequency-summary-answer-".concat(itemId);
206
206
  var respondentsHeaderId = "answer-frequency-summary-respondents-".concat(itemId);
207
207
  var percentageHeaderId = "answer-frequency-summary-percentage-".concat(itemId);
208
- var containerClasses = (0, _classnames.default)(styles.tableContainer, (0, _defineProperty2.default)({}, styles.headerGrayBottomBorder, !_this.nextChoiceIsCorrect(choices, 0)));
208
+ var containerClasses = (0, _classnames.default)(tableContainerSizeClass, styles.tableContainer, (0, _defineProperty2.default)({}, styles.headerGrayBottomBorder, !_this.nextChoiceIsCorrect(choices, 0)));
209
209
  return /*#__PURE__*/_react.default.createElement("div", {
210
210
  className: containerClasses
211
211
  }, /*#__PURE__*/_react.default.createElement(_uiTable.Table, {
@@ -234,6 +234,9 @@ var ChoiceTypeTable = (_dec = (0, _uiThemeable.themeable)(_theme.default, styles
234
234
  return ChoiceTypeTable;
235
235
  }(_react.Component), _class2.propTypes = {
236
236
  itemId: _propTypes.default.number,
237
- answerSummary: _propTypes2.choiceTypeAnswerSummaryPropType
238
- }.isRequired, _temp)) || _class);
237
+ choices: _propTypes.default.arrayOf(_propTypes2.choiceTypeObject),
238
+ tableContainerClass: _propTypes.default.string
239
+ }.isRequired, _class2.defaultProps = {
240
+ tableContainerSizeClass: styles.tableWidthMax
241
+ }, _temp)) || _class);
239
242
  exports.ChoiceTypeTable = ChoiceTypeTable;
@@ -0,0 +1,13 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ Object.defineProperty(exports, "default", {
7
+ enumerable: true,
8
+ get: function get() {
9
+ return _presenter.BlankIcon;
10
+ }
11
+ });
12
+
13
+ var _presenter = require("./presenter.js");
@@ -0,0 +1,55 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+
5
+ Object.defineProperty(exports, "__esModule", {
6
+ value: true
7
+ });
8
+ exports.BlankIcon = void 0;
9
+
10
+ var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
11
+
12
+ var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
13
+
14
+ var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
15
+
16
+ var _createSuper2 = _interopRequireDefault(require("@babel/runtime/helpers/createSuper"));
17
+
18
+ var _react = require("react");
19
+
20
+ var _emotion = require("@instructure/emotion");
21
+
22
+ var _styles = _interopRequireDefault(require("./styles.js"));
23
+
24
+ var _theme = _interopRequireDefault(require("./theme.js"));
25
+
26
+ var _propTypes = _interopRequireDefault(require("prop-types"));
27
+
28
+ var _dec, _class, _class2, _temp;
29
+
30
+ var BlankIcon = (_dec = (0, _emotion.withStyle)(_styles.default, _theme.default), _dec(_class = (_temp = _class2 = /*#__PURE__*/function (_Component) {
31
+ (0, _inherits2.default)(BlankIcon, _Component);
32
+
33
+ var _super = (0, _createSuper2.default)(BlankIcon);
34
+
35
+ function BlankIcon() {
36
+ (0, _classCallCheck2.default)(this, BlankIcon);
37
+ return _super.apply(this, arguments);
38
+ }
39
+
40
+ (0, _createClass2.default)(BlankIcon, [{
41
+ key: "render",
42
+ value: function render() {
43
+ var number = this.props.number;
44
+ return (0, _emotion.jsx)("span", {
45
+ css: this.props.styles.blankSpace
46
+ }, number);
47
+ }
48
+ }]);
49
+ BlankIcon.displayName = "BlankIcon";
50
+ return BlankIcon;
51
+ }(_react.Component), _class2.propTypes = {
52
+ number: _propTypes.default.number.isRequired,
53
+ styles: _propTypes.default.object
54
+ }.isRequired, _temp)) || _class);
55
+ exports.BlankIcon = BlankIcon;
@@ -0,0 +1,25 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = void 0;
7
+
8
+ var generateStyle = function generateStyle(componentTheme) {
9
+ return {
10
+ blankSpace: {
11
+ display: 'inline-flex',
12
+ justifyContent: 'center',
13
+ alignItems: 'center',
14
+ height: componentTheme.blankHeight,
15
+ minWidth: componentTheme.blankMinWidth,
16
+ verticalAlign: 'middle',
17
+ border: "1px solid ".concat(componentTheme.blankBorderColor),
18
+ borderRadius: componentTheme.blankBorderRadius,
19
+ padding: '2px 2px'
20
+ }
21
+ };
22
+ };
23
+
24
+ var _default = generateStyle;
25
+ exports.default = _default;
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = void 0;
7
+
8
+ var generateComponentTheme = function generateComponentTheme(_ref) {
9
+ var colors = _ref.colors;
10
+ return {
11
+ blankBorderColor: colors.tiara,
12
+ blankBorderRadius: '14px',
13
+ blankMinWidth: '20px',
14
+ blankHeight: '20px'
15
+ };
16
+ };
17
+
18
+ var _default = generateComponentTheme;
19
+ exports.default = _default;
@@ -23,7 +23,8 @@ function mapStateToProps(_state) {
23
23
  categorizationEnabled: (0, _featureCheck.featureOn)('ia_categorization_afs'),
24
24
  trueFalseEnabled: (0, _featureCheck.featureOn)('ia_true_false_afs'),
25
25
  choiceEnabled: (0, _featureCheck.featureOn)('ia_choice_afs'),
26
- multiAnswerEnabled: (0, _featureCheck.featureOn)('ia_multi_answer_afs')
26
+ multiAnswerEnabled: (0, _featureCheck.featureOn)('ia_multi_answer_afs'),
27
+ fillInTheBlankEnabled: (0, _featureCheck.featureOn)('ia_rich_fill_blank_afs')
27
28
  }
28
29
  };
29
30
  }
@@ -59,24 +59,30 @@ var _rceChecker = require("../../../../../common/util/rceChecker.js");
59
59
 
60
60
  var _quizInteractions = require("@instructure/quiz-interactions");
61
61
 
62
+ var _quizCommon = require("@instructure/quiz-common");
63
+
62
64
  var _dec, _class, _class2, _temp;
63
65
 
64
66
  var styles = {
65
- componentId: 'ewlJT',
67
+ componentId: 'eObAE',
66
68
  template: function template(theme) {
67
- return "\n\n.ewlJT_eKXQ{padding:".concat(theme.cardWrapperPadding || 'inherit', "}\n\n.ewlJT_bwlc{gap:24px;justify-content:space-between;position:relative;row-gap:32px}\n\n.ewlJT_bwlc,.ewlJT_bqdH{align-items:flex-start;display:flex;flex-direction:row;flex-wrap:wrap}\n\n.ewlJT_bqdH{row-gap:24px}\n\n.ewlJT_NpIG{position:absolute;right:").concat(theme.viewPaddingRight || 'inherit', ";top:0}\n\n.ewlJT_eoBe{font-size:").concat(theme.metricNumberContextFontSize || 'inherit', ";font-weight:").concat(theme.metricNumberContextFontWeight || 'inherit', "}\n\n.ewlJT_fFDJ{display:none}\n\n.ewlJT_fxkJ{margin-top:-8px}\n\n.ewlJT_esVF{min-height:48px}\n\n.ewlJT_eTZq{position:relative}\n\n.ewlJT_eTZq:after{background:linear-gradient(180deg,hsla(0,0%,100%,0),#fff);content:\"\";height:48px;left:0;position:absolute;top:0;width:100%}\n\n.ewlJT_cVld{max-width:100%;width:calc(25% + 350px)}");
69
+ return "\n\n.eObAE_eKXQ{padding:".concat(theme.cardWrapperPadding || 'inherit', "}\n\n.eObAE_bwlc{gap:24px;justify-content:space-between;position:relative;row-gap:32px}\n\n.eObAE_bwlc,.eObAE_bqdH{align-items:flex-start;display:flex;flex-direction:row;flex-wrap:wrap}\n\n.eObAE_bqdH{row-gap:24px}\n\n.eObAE_eTaq{align-items:center;border:1px solid ").concat(theme.blankBorderColor || 'inherit', ";border-radius:").concat(theme.blankBorderRadius || 'inherit', ";display:inline-flex;height:").concat(theme.blankHeight || 'inherit', ";justify-content:center;min-width:").concat(theme.blankMinWidth || 'inherit', ";padding:2px 2px;vertical-align:middle}\n\n.eObAE_NpIG{position:absolute;right:").concat(theme.viewPaddingRight || 'inherit', ";top:0}\n\n.eObAE_eoBe{font-size:").concat(theme.metricNumberContextFontSize || 'inherit', ";font-weight:").concat(theme.metricNumberContextFontWeight || 'inherit', "}\n\n.eObAE_fFDJ{display:none}\n\n.eObAE_fxkJ{margin-top:-8px}\n\n.eObAE_esVF{min-height:48px}\n\n.eObAE_eTZq{position:relative}\n\n.eObAE_eTZq:after{background:linear-gradient(180deg,hsla(0,0%,100%,0),#fff);content:\"\";height:48px;left:0;position:absolute;top:0;width:100%}\n\n.eObAE_cVld{max-width:100%;width:calc(25% + 350px)}");
68
70
  },
69
- 'cardWrapper': 'ewlJT_eKXQ',
70
- 'itemCardInnerContainer': 'ewlJT_bwlc',
71
- 'metricsContainer': 'ewlJT_bqdH',
72
- 'itemCardToggleButtonWrapper': 'ewlJT_NpIG',
73
- 'metricNumberContext': 'ewlJT_eoBe',
74
- 'hiddenMetrics': 'ewlJT_fFDJ',
75
- 'itemBodyToggleButtonWrapper': 'ewlJT_fxkJ',
76
- 'itemBody': 'ewlJT_esVF',
77
- 'hiddenItemBody': 'ewlJT_eTZq',
78
- 'answerFrequencySummaryContainer': 'ewlJT_cVld'
71
+ 'cardWrapper': 'eObAE_eKXQ',
72
+ 'itemCardInnerContainer': 'eObAE_bwlc',
73
+ 'metricsContainer': 'eObAE_bqdH',
74
+ 'blankSpace': 'eObAE_eTaq',
75
+ 'itemCardToggleButtonWrapper': 'eObAE_NpIG',
76
+ 'metricNumberContext': 'eObAE_eoBe',
77
+ 'hiddenMetrics': 'eObAE_fFDJ',
78
+ 'itemBodyToggleButtonWrapper': 'eObAE_fxkJ',
79
+ 'itemBody': 'eObAE_esVF',
80
+ 'hiddenItemBody': 'eObAE_eTZq',
81
+ 'answerFrequencySummaryContainer': 'eObAE_cVld'
79
82
  };
83
+ var parser = new DOMParser();
84
+ var parsererrorElement = 'parsererror';
85
+ var parseType = 'text/html';
80
86
  var NewItemAnalysis = (_dec = (0, _uiThemeable.themeable)(_theme.default, styles), _dec(_class = (_temp = _class2 = /*#__PURE__*/function (_Component) {
81
87
  (0, _inherits2.default)(NewItemAnalysis, _Component);
82
88
 
@@ -148,6 +154,34 @@ var NewItemAnalysis = (_dec = (0, _uiThemeable.themeable)(_theme.default, styles
148
154
  }, _this.mapInteractionTypeToTranslation(interactionType));
149
155
  };
150
156
 
157
+ _this.isBlank = function (element) {
158
+ if (element.textContent) return false;
159
+ if (!element.hasAttribute('id')) return false;
160
+ var regex = new RegExp('^blank_.+$');
161
+ return regex.test(element.getAttribute('id'));
162
+ };
163
+
164
+ _this.enhanceItemBody = function (itemBody) {
165
+ var tempDoc = parser.parseFromString(itemBody, parseType);
166
+ var errorNode = tempDoc.querySelector(parsererrorElement);
167
+
168
+ if (errorNode) {
169
+ // eslint-disable-next-line no-console
170
+ console.error('Parsing failed: ', errorNode);
171
+ return itemBody;
172
+ }
173
+
174
+ Array.from(tempDoc.querySelectorAll('span')).filter(function (span) {
175
+ return _this.isBlank(span);
176
+ }).forEach(function (span, index) {
177
+ var newSpan = span.cloneNode();
178
+ newSpan.setAttribute('class', styles.blankSpace);
179
+ newSpan.innerHTML = "".concat(index + 1);
180
+ span.replaceWith(newSpan);
181
+ });
182
+ return tempDoc.querySelector('body').innerHTML;
183
+ };
184
+
151
185
  _this.renderRichContent = function (itemBody, itemBodyClass, itemId) {
152
186
  return /*#__PURE__*/_react.default.createElement(_uiFlex.Flex, {
153
187
  direction: "row",
@@ -238,6 +272,14 @@ var NewItemAnalysis = (_dec = (0, _uiThemeable.themeable)(_theme.default, styles
238
272
  })));
239
273
  };
240
274
 
275
+ _this.shouldEnhanceItemBody = function () {
276
+ var _this$props = _this.props,
277
+ itemAnalysis = _this$props.itemAnalysis,
278
+ afsFlags = _this$props.afsFlags;
279
+ var metadata = itemAnalysis.metadata;
280
+ return afsFlags.fillInTheBlankEnabled && metadata.interaction_type === _quizCommon.RICH_FILL_BLANK_SLUG && metadata.item_body;
281
+ };
282
+
241
283
  return _this;
242
284
  }
243
285
 
@@ -278,10 +320,10 @@ var NewItemAnalysis = (_dec = (0, _uiThemeable.themeable)(_theme.default, styles
278
320
  value: function render() {
279
321
  var _metadata$item_title;
280
322
 
281
- var _this$props = this.props,
282
- showFrequencyTable = _this$props.showFrequencyTable,
283
- itemAnalysis = _this$props.itemAnalysis,
284
- afsFlags = _this$props.afsFlags;
323
+ var _this$props2 = this.props,
324
+ showFrequencyTable = _this$props2.showFrequencyTable,
325
+ itemAnalysis = _this$props2.itemAnalysis,
326
+ afsFlags = _this$props2.afsFlags;
285
327
  var answer_summary = itemAnalysis.answer_summary,
286
328
  metadata = itemAnalysis.metadata,
287
329
  scores = itemAnalysis.scores;
@@ -290,6 +332,7 @@ var NewItemAnalysis = (_dec = (0, _uiThemeable.themeable)(_theme.default, styles
290
332
  var metricsClass = (0, _classnames3.default)((0, _defineProperty2.default)({}, styles.hiddenMetrics, !this.state.metricsExpanded));
291
333
  var itemBodyClass = (0, _classnames3.default)(styles.itemBody, (0, _defineProperty2.default)({}, styles.hiddenItemBody, this.isBodyHigherThanContainer() && !this.state.bodyExpanded));
292
334
  var title = (_metadata$item_title = metadata.item_title) !== null && _metadata$item_title !== void 0 ? _metadata$item_title : (0, _formatMessage.default)('Untitled item');
335
+ var itemBodyEnhanced = this.shouldEnhanceItemBody() ? this.enhanceItemBody(metadata.item_body) : metadata.item_body;
293
336
  return /*#__PURE__*/_react.default.createElement(_index2.default, {
294
337
  className: styles.cardWrapper
295
338
  }, /*#__PURE__*/_react.default.createElement(_uiFlex.Flex, {
@@ -310,7 +353,7 @@ var NewItemAnalysis = (_dec = (0, _uiThemeable.themeable)(_theme.default, styles
310
353
  padding: "small xx-small none none",
311
354
  overflowY: "hidden",
312
355
  size: !this.state.bodyExpanded ? '60px' : void 0
313
- }, this.renderRichContent(metadata.item_body, itemBodyClass, itemId)))), /*#__PURE__*/_react.default.createElement(_uiFlex.Flex.Item, null, this.renderMetrics(scores, metricsClass)))), showFrequencyTable && this.renderAnswerSummaryTable(itemId, answer_summary, metricsClass, interactionType, afsFlags)));
356
+ }, this.renderRichContent(itemBodyEnhanced, itemBodyClass, itemId)))), /*#__PURE__*/_react.default.createElement(_uiFlex.Flex.Item, null, this.renderMetrics(scores, metricsClass)))), showFrequencyTable && this.renderAnswerSummaryTable(itemId, answer_summary, metricsClass, interactionType, afsFlags)));
314
357
  }
315
358
  }]);
316
359
  NewItemAnalysis.displayName = "NewItemAnalysis";
@@ -8,12 +8,17 @@ exports.default = generator;
8
8
  function generator(_ref) {
9
9
  var spacing = _ref.spacing,
10
10
  breakpoints = _ref.breakpoints,
11
- typography = _ref.typography;
11
+ typography = _ref.typography,
12
+ colors = _ref.colors;
12
13
  return {
13
14
  tabletBreakPoint: "max-width: ".concat(breakpoints.large),
14
15
  cardWrapperPadding: spacing.medium,
15
16
  viewPaddingRight: spacing.xxSmall,
16
17
  metricNumberContextFontSize: typography.fontSizeMedium,
17
- metricNumberContextFontWeight: typography.fontWeightNormal
18
+ metricNumberContextFontWeight: typography.fontWeightNormal,
19
+ blankBorderColor: colors.tiara,
20
+ blankBorderRadius: '14px',
21
+ blankMinWidth: '20px',
22
+ blankHeight: '20px'
18
23
  };
19
24
  }