@instructure/quiz-core 18.5.1-rc.1 → 18.5.1-rc.11

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 (71) hide show
  1. package/es/common/util/Fetcher.js +15 -3
  2. package/es/reporting/api/getAnalysesExport.js +1 -0
  3. package/es/reporting/components/resources/NewQuizAndItemAnalysis/AnalysisMetric/presenter.js +8 -5
  4. package/es/reporting/components/resources/NewQuizAndItemAnalysis/AnswerFrequencySummary/AggregationType/index.js +1 -0
  5. package/es/reporting/components/resources/NewQuizAndItemAnalysis/AnswerFrequencySummary/AggregationType/presenter.js +46 -0
  6. package/es/reporting/components/resources/NewQuizAndItemAnalysis/AnswerFrequencySummary/ChoiceType/presenter.js +10 -19
  7. package/es/reporting/components/resources/NewQuizAndItemAnalysis/AnswerFrequencySummary/MatchingType/MatchingType.js +57 -0
  8. package/es/reporting/components/resources/NewQuizAndItemAnalysis/AnswerFrequencySummary/MatchingType/MatchingTypeTable/index.js +1 -0
  9. package/es/reporting/components/resources/NewQuizAndItemAnalysis/AnswerFrequencySummary/MatchingType/MatchingTypeTable/presenter.js +183 -0
  10. package/es/reporting/components/resources/NewQuizAndItemAnalysis/AnswerFrequencySummary/MatchingType/MatchingTypeTable/theme.js +7 -0
  11. package/es/reporting/components/resources/NewQuizAndItemAnalysis/AnswerFrequencySummary/MatchingType/OrderingType.js +87 -0
  12. package/es/reporting/components/resources/NewQuizAndItemAnalysis/AnswerFrequencySummary/MatchingType/index.js +2 -0
  13. package/es/reporting/components/resources/NewQuizAndItemAnalysis/AnswerFrequencySummary/MatchingType/utils/matchingTypeOrderer.js +42 -0
  14. package/es/reporting/components/resources/NewQuizAndItemAnalysis/AnswerFrequencySummary/presenter.js +21 -4
  15. package/es/reporting/components/resources/NewQuizAndItemAnalysis/AnswerFrequencySummary/shared/AfsPartsContainer/index.js +1 -0
  16. package/es/reporting/components/resources/NewQuizAndItemAnalysis/AnswerFrequencySummary/shared/AfsPartsContainer/presenter.js +73 -0
  17. package/es/reporting/components/resources/NewQuizAndItemAnalysis/AnswerFrequencySummary/shared/AfsTableWrapper/index.js +1 -0
  18. package/es/reporting/components/resources/NewQuizAndItemAnalysis/AnswerFrequencySummary/shared/AfsTableWrapper/presenter.js +58 -0
  19. package/es/reporting/components/resources/NewQuizAndItemAnalysis/AnswerFrequencySummary/shared/AfsTableWrapper/theme.js +5 -0
  20. package/es/reporting/components/resources/NewQuizAndItemAnalysis/AnswerFrequencySummary/shared/AggregationTable/index.js +1 -0
  21. package/es/reporting/components/resources/NewQuizAndItemAnalysis/AnswerFrequencySummary/shared/AggregationTable/presenter.js +186 -0
  22. package/es/reporting/components/resources/NewQuizAndItemAnalysis/AnswerFrequencySummary/shared/AggregationTable/theme.js +10 -0
  23. package/es/reporting/components/resources/NewQuizAndItemAnalysis/NewItemAnalysis/index.js +3 -1
  24. package/es/reporting/components/resources/NewQuizAndItemAnalysis/NewItemAnalysis/presenter.js +5 -7
  25. package/es/reporting/components/resources/NewQuizAndItemAnalysis/NewQuizAnalysis/presenter.js +20 -1
  26. package/es/reporting/components/resources/NewQuizAndItemAnalysis/ReportCard/presenter.js +9 -9
  27. package/es/reporting/components/resources/NewQuizAndItemAnalysis/ReportCard/theme.js +1 -1
  28. package/es/reporting/components/resources/NewQuizAndItemAnalysis/charts/ScoreDistribution/presenter.js +16 -3
  29. package/es/reporting/components/resources/NewQuizAndItemAnalysis/errorMessages.js +3 -0
  30. package/es/reporting/components/resources/NewQuizAndItemAnalysis/exportReports.js +65 -0
  31. package/es/reporting/components/resources/NewQuizAndItemAnalysis/propTypes.js +33 -8
  32. package/es/reporting/components/resources/NewQuizAndItemAnalysis/utils.js +4 -0
  33. package/es/reporting/components/resources/NewQuizAndItemAnalysis/withAnalysisState.js +2 -0
  34. package/es/reporting/components/resources/NewQuizAndItemAnalysis/withAnalysisStatePresenter.js +41 -1
  35. package/es/reporting/components/resources/ReportCard/theme.js +1 -1
  36. package/lib/common/util/Fetcher.js +15 -2
  37. package/lib/reporting/api/getAnalysesExport.js +1 -0
  38. package/lib/reporting/components/resources/NewQuizAndItemAnalysis/AnalysisMetric/presenter.js +8 -5
  39. package/lib/reporting/components/resources/NewQuizAndItemAnalysis/AnswerFrequencySummary/AggregationType/index.js +13 -0
  40. package/lib/reporting/components/resources/NewQuizAndItemAnalysis/AnswerFrequencySummary/AggregationType/presenter.js +68 -0
  41. package/lib/reporting/components/resources/NewQuizAndItemAnalysis/AnswerFrequencySummary/ChoiceType/presenter.js +12 -21
  42. package/lib/reporting/components/resources/NewQuizAndItemAnalysis/AnswerFrequencySummary/MatchingType/MatchingType.js +83 -0
  43. package/lib/reporting/components/resources/NewQuizAndItemAnalysis/AnswerFrequencySummary/MatchingType/MatchingTypeTable/index.js +13 -0
  44. package/lib/reporting/components/resources/NewQuizAndItemAnalysis/AnswerFrequencySummary/MatchingType/MatchingTypeTable/presenter.js +209 -0
  45. package/lib/reporting/components/resources/NewQuizAndItemAnalysis/AnswerFrequencySummary/MatchingType/MatchingTypeTable/theme.js +14 -0
  46. package/lib/reporting/components/resources/NewQuizAndItemAnalysis/AnswerFrequencySummary/MatchingType/OrderingType.js +115 -0
  47. package/lib/reporting/components/resources/NewQuizAndItemAnalysis/AnswerFrequencySummary/MatchingType/index.js +21 -0
  48. package/lib/reporting/components/resources/NewQuizAndItemAnalysis/AnswerFrequencySummary/MatchingType/utils/matchingTypeOrderer.js +52 -0
  49. package/lib/reporting/components/resources/NewQuizAndItemAnalysis/AnswerFrequencySummary/presenter.js +26 -7
  50. package/lib/reporting/components/resources/NewQuizAndItemAnalysis/AnswerFrequencySummary/shared/AfsPartsContainer/index.js +13 -0
  51. package/lib/reporting/components/resources/NewQuizAndItemAnalysis/AnswerFrequencySummary/shared/AfsPartsContainer/presenter.js +92 -0
  52. package/lib/reporting/components/resources/NewQuizAndItemAnalysis/AnswerFrequencySummary/shared/AfsTableWrapper/index.js +13 -0
  53. package/lib/reporting/components/resources/NewQuizAndItemAnalysis/AnswerFrequencySummary/shared/AfsTableWrapper/presenter.js +79 -0
  54. package/lib/reporting/components/resources/NewQuizAndItemAnalysis/AnswerFrequencySummary/shared/AfsTableWrapper/theme.js +12 -0
  55. package/lib/reporting/components/resources/NewQuizAndItemAnalysis/AnswerFrequencySummary/shared/AggregationTable/index.js +13 -0
  56. package/lib/reporting/components/resources/NewQuizAndItemAnalysis/AnswerFrequencySummary/shared/AggregationTable/presenter.js +212 -0
  57. package/lib/reporting/components/resources/NewQuizAndItemAnalysis/AnswerFrequencySummary/shared/AggregationTable/theme.js +17 -0
  58. package/lib/reporting/components/resources/NewQuizAndItemAnalysis/NewItemAnalysis/index.js +3 -1
  59. package/lib/reporting/components/resources/NewQuizAndItemAnalysis/NewItemAnalysis/presenter.js +6 -8
  60. package/lib/reporting/components/resources/NewQuizAndItemAnalysis/NewQuizAnalysis/presenter.js +20 -1
  61. package/lib/reporting/components/resources/NewQuizAndItemAnalysis/ReportCard/presenter.js +9 -9
  62. package/lib/reporting/components/resources/NewQuizAndItemAnalysis/ReportCard/theme.js +1 -1
  63. package/lib/reporting/components/resources/NewQuizAndItemAnalysis/charts/ScoreDistribution/presenter.js +16 -3
  64. package/lib/reporting/components/resources/NewQuizAndItemAnalysis/errorMessages.js +7 -1
  65. package/lib/reporting/components/resources/NewQuizAndItemAnalysis/exportReports.js +80 -0
  66. package/lib/reporting/components/resources/NewQuizAndItemAnalysis/propTypes.js +44 -9
  67. package/lib/reporting/components/resources/NewQuizAndItemAnalysis/utils.js +10 -2
  68. package/lib/reporting/components/resources/NewQuizAndItemAnalysis/withAnalysisState.js +3 -0
  69. package/lib/reporting/components/resources/NewQuizAndItemAnalysis/withAnalysisStatePresenter.js +43 -1
  70. package/lib/reporting/components/resources/ReportCard/theme.js +1 -1
  71. package/package.json +10 -9
@@ -1,5 +1,6 @@
1
1
  import _regeneratorRuntime from "@babel/runtime/regenerator";
2
2
  import _asyncToGenerator from "@babel/runtime/helpers/esm/asyncToGenerator";
3
+ import _objectSpread from "@babel/runtime/helpers/esm/objectSpread2";
3
4
  import _classCallCheck from "@babel/runtime/helpers/esm/classCallCheck";
4
5
  import _createClass from "@babel/runtime/helpers/esm/createClass";
5
6
  import { decamelizeKeys } from 'humps';
@@ -7,7 +8,7 @@ import queryString from 'query-string';
7
8
  import fetch from 'isomorphic-fetch';
8
9
  import t from '@instructure/quiz-i18n/es/format-message';
9
10
  import jsonify from "./jsonify.js";
10
- import { httpHeaders } from "./httpHeaders.js";
11
+ import { httpHeaders, jwtHeader } from "./httpHeaders.js";
11
12
  import store from "../../reduxStore.js";
12
13
  import { callbacksCompleteForCall, errorCallFor, startCallFor, successCallFor } from "./callHelpers.js";
13
14
  import { addError, addSuccess } from "../actions/alerts.js";
@@ -33,7 +34,8 @@ export var Fetcher = /*#__PURE__*/function () {
33
34
  successMessage = _ref.successMessage,
34
35
  onError = _ref.onError,
35
36
  cloneResponseForError = _ref.cloneResponseForError,
36
- asyncResponseHandler = _ref.asyncResponseHandler;
37
+ asyncResponseHandler = _ref.asyncResponseHandler,
38
+ injectMissingUserToken = _ref.injectMissingUserToken;
37
39
 
38
40
  _classCallCheck(this, Fetcher);
39
41
 
@@ -43,6 +45,7 @@ export var Fetcher = /*#__PURE__*/function () {
43
45
  this.cloneResponseForError = cloneResponseForError || false;
44
46
  this.callType = callType;
45
47
  this.headers = headers;
48
+ this.injectMissingUserToken = injectMissingUserToken || false;
46
49
  this.successMessage = successMessage;
47
50
  this.onError = onError;
48
51
  this.asyncResponseHandler = asyncResponseHandler || jsonify;
@@ -91,7 +94,16 @@ export var Fetcher = /*#__PURE__*/function () {
91
94
  }, {
92
95
  key: "callHeaders",
93
96
  value: function callHeaders() {
94
- return this.headers || httpHeaders(this.getState().getIn(['config', 'userToken']));
97
+ if (!this.headers) {
98
+ return httpHeaders(this.getState().getIn(['config', 'userToken']));
99
+ }
100
+
101
+ if (!this.injectMissingUserToken) {
102
+ return this.headers;
103
+ }
104
+
105
+ var userToken = this.getState().getIn(['config', 'userToken']);
106
+ return _objectSpread(_objectSpread({}, jwtHeader(userToken)), this.headers);
95
107
  }
96
108
  }, {
97
109
  key: "handleSuccess",
@@ -13,6 +13,7 @@ var getFetcher = function getFetcher(format) {
13
13
  headers: {
14
14
  'Accept': mimeType
15
15
  },
16
+ injectUserToken: true,
16
17
  asyncResponseHandler: function asyncResponseHandler(response) {
17
18
  return response;
18
19
  }
@@ -8,11 +8,12 @@ var _dec, _class, _class2, _temp;
8
8
  import { themeable } from '@instructure/ui-themeable';
9
9
  import theme from "./theme.js";
10
10
  var styles = {
11
- componentId: 'ethsC',
11
+ componentId: 'fKESK',
12
12
  template: function template(theme) {
13
- return "\n\n.ethsC_eckF{margin:0;max-width:159px;text-transform:capitalize}";
13
+ return "\n\n.fKESK_eckF{margin:0;max-width:159px;text-transform:capitalize}\n\n.fKESK_CIyo{width:90px}";
14
14
  },
15
- 'metricLabel': 'ethsC_eckF'
15
+ 'metricLabel': 'fKESK_eckF',
16
+ 'metricWrapper': 'fKESK_CIyo'
16
17
  };
17
18
  import React, { Component } from 'react';
18
19
  import { getSanitizedMetricValue } from "../utils.js";
@@ -37,7 +38,9 @@ export var AnalysisMetric = (_dec = themeable(theme, styles), _dec(_class = (_te
37
38
  label = _this$props.label,
38
39
  value = _this$props.value,
39
40
  suffix = _this$props.suffix;
40
- return /*#__PURE__*/React.createElement(Metric, {
41
+ return /*#__PURE__*/React.createElement("div", {
42
+ className: styles.metricWrapper
43
+ }, /*#__PURE__*/React.createElement(Metric, {
41
44
  theme: {
42
45
  valueFontWeight: 500,
43
46
  padding: '0'
@@ -48,7 +51,7 @@ export var AnalysisMetric = (_dec = themeable(theme, styles), _dec(_class = (_te
48
51
  className: styles.metricLabel
49
52
  }, label),
50
53
  renderValue: getSanitizedMetricValue(value, suffix)
51
- });
54
+ }));
52
55
  }
53
56
  }]);
54
57
 
@@ -0,0 +1 @@
1
+ export { AggregationType as default } from "./presenter.js";
@@ -0,0 +1,46 @@
1
+ import _classCallCheck from "@babel/runtime/helpers/esm/classCallCheck";
2
+ import _inherits from "@babel/runtime/helpers/esm/inherits";
3
+ import _createSuper from "@babel/runtime/helpers/esm/createSuper";
4
+ import React, { Component } from 'react';
5
+ import PropTypes from 'prop-types';
6
+ import AggregationTable from "../shared/AggregationTable/index.js";
7
+ import { onlyAggregatePropType } from "../../propTypes.js";
8
+ import { AfsTableWrapper } from "../shared/AfsTableWrapper/presenter.js";
9
+ import { AfsPartsContainer } from "../shared/AfsPartsContainer/presenter.js";
10
+ export var AggregationType = /*#__PURE__*/function (_Component) {
11
+ _inherits(AggregationType, _Component);
12
+
13
+ var _super = _createSuper(AggregationType);
14
+
15
+ function AggregationType() {
16
+ var _this;
17
+
18
+ _classCallCheck(this, AggregationType);
19
+
20
+ for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
21
+ args[_key] = arguments[_key];
22
+ }
23
+
24
+ _this = _super.call.apply(_super, [this].concat(args));
25
+
26
+ _this.render = function () {
27
+ var _this$props = _this.props,
28
+ answerSummary = _this$props.answerSummary,
29
+ itemId = _this$props.itemId;
30
+ return /*#__PURE__*/React.createElement(AfsTableWrapper, null, /*#__PURE__*/React.createElement(AfsPartsContainer, {
31
+ aggregationTable: /*#__PURE__*/React.createElement(AggregationTable, {
32
+ itemId: itemId,
33
+ answerSummary: answerSummary
34
+ })
35
+ }));
36
+ };
37
+
38
+ return _this;
39
+ }
40
+
41
+ return AggregationType;
42
+ }(Component);
43
+ AggregationType.propTypes = {
44
+ itemId: PropTypes.number.isRequired,
45
+ answerSummary: onlyAggregatePropType
46
+ }.isRequired;
@@ -8,21 +8,22 @@ var _dec, _class, _class2, _temp;
8
8
  import React, { Component } from 'react';
9
9
  import t from '@instructure/quiz-i18n/es/format-message';
10
10
  import { Table } from '@instructure/ui-table';
11
- import { Flex } from '@instructure/ui-flex';
12
- import { Heading } from '@instructure/ui-heading';
13
11
  import { themeable } from '@instructure/ui-themeable';
14
12
  import { ScreenReaderContent } from '@instructure/ui-a11y-content';
15
13
  import PropTypes from 'prop-types';
16
14
  import ChoiceTypeTableRow from "./ChoiceTypeTableRow/index.js";
17
15
  import { choiceTypeAnswerSummaryPropType } from "../../propTypes.js";
18
16
  var styles = {
19
- componentId: 'ZuPLN',
17
+ componentId: 'dCEWT',
20
18
  template: function template(theme) {
21
- return "\n\n.ZuPLN_rMrG{display:flex;flex-basis:100%;flex-direction:column;padding-bottom:".concat(theme.tableBottomPadding || 'inherit', "}");
19
+ return "\n\n.dCEWT_rMrG{display:flex;flex-basis:100%;flex-direction:column;padding-bottom:".concat(theme.tableBottomPadding || 'inherit', "}\n\n.dCEWT_SVtU{max-width:100%;width:calc(25% + 350px)}");
22
20
  },
23
- 'tableWrapper': 'ZuPLN_rMrG'
21
+ 'tableWrapper': 'dCEWT_rMrG',
22
+ 'tableContainer': 'dCEWT_SVtU'
24
23
  };
25
24
  import theme from "./theme.js";
25
+ import AfsTableWrapper from "../shared/AfsTableWrapper/index.js";
26
+ import classNames from 'classnames';
26
27
  export var ChoiceType = (_dec = themeable(theme, styles), _dec(_class = (_temp = _class2 = /*#__PURE__*/function (_Component) {
27
28
  _inherits(ChoiceType, _Component);
28
29
 
@@ -77,19 +78,9 @@ export var ChoiceType = (_dec = themeable(theme, styles), _dec(_class = (_temp =
77
78
  var answerHeaderId = "answer-frequency-summary-answer-".concat(itemId);
78
79
  var respondentsHeaderId = "answer-frequency-summary-respondents-".concat(itemId);
79
80
  var percentageHeaderId = "answer-frequency-summary-percentage-".concat(itemId);
80
- return /*#__PURE__*/React.createElement("div", null, /*#__PURE__*/React.createElement(Flex, {
81
- direction: "row"
82
- }, /*#__PURE__*/React.createElement(Flex.Item, {
83
- shouldGrow: true
84
- }, /*#__PURE__*/React.createElement("div", {
85
- className: styles.tableWrapper
86
- }, /*#__PURE__*/React.createElement(Heading, {
87
- margin: "large 0 small 0",
88
- level: "h4",
89
- theme: {
90
- h4FontWeight: 'normal'
91
- }
92
- }, t('Answer Frequency Summary')), /*#__PURE__*/React.createElement(Table, {
81
+ return /*#__PURE__*/React.createElement(AfsTableWrapper, null, /*#__PURE__*/React.createElement("div", {
82
+ className: classNames(styles.tableContainer)
83
+ }, /*#__PURE__*/React.createElement(Table, {
93
84
  caption: t('Answer Frequency Summary')
94
85
  }, /*#__PURE__*/React.createElement(Table.Head, null, /*#__PURE__*/React.createElement(Table.Row, null, /*#__PURE__*/React.createElement(Table.ColHeader, {
95
86
  id: spacingHeaderId,
@@ -104,7 +95,7 @@ export var ChoiceType = (_dec = themeable(theme, styles), _dec(_class = (_temp =
104
95
  id: percentageHeaderId,
105
96
  height: "47px",
106
97
  textAlign: "center"
107
- }, t('%')))), /*#__PURE__*/React.createElement(Table.Body, null, choices.map(this.renderRow), this.renderNoAnswer(noAnswer, numberOfChoices)))))));
98
+ }, t('%')))), /*#__PURE__*/React.createElement(Table.Body, null, choices.map(this.renderRow), this.renderNoAnswer(noAnswer, numberOfChoices)))));
108
99
  }
109
100
  }]);
110
101
 
@@ -0,0 +1,57 @@
1
+ import _classCallCheck from "@babel/runtime/helpers/esm/classCallCheck";
2
+ import _inherits from "@babel/runtime/helpers/esm/inherits";
3
+ import _createSuper from "@babel/runtime/helpers/esm/createSuper";
4
+ import React, { Component } from 'react';
5
+ import AfsTableWrapper from "../shared/AfsTableWrapper/index.js";
6
+ import MatchingTypeTable from "./MatchingTypeTable/index.js";
7
+ import PropTypes from 'prop-types';
8
+ import { matchingTypeAnswerSummaryPropType } from "../../propTypes.js";
9
+ import MatchingTypeOrderer from "./utils/matchingTypeOrderer.js";
10
+ import { AfsPartsContainer } from "../shared/AfsPartsContainer/presenter.js";
11
+ export var MatchingType = /*#__PURE__*/function (_Component) {
12
+ _inherits(MatchingType, _Component);
13
+
14
+ var _super = _createSuper(MatchingType);
15
+
16
+ function MatchingType() {
17
+ var _this;
18
+
19
+ _classCallCheck(this, MatchingType);
20
+
21
+ for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
22
+ args[_key] = arguments[_key];
23
+ }
24
+
25
+ _this = _super.call.apply(_super, [this].concat(args));
26
+
27
+ _this.render = function () {
28
+ var _this$props = _this.props,
29
+ itemId = _this$props.itemId,
30
+ answerSummary = _this$props.answerSummary;
31
+ var questions = answerSummary.questions;
32
+ var questionKeys = Object.keys(questions);
33
+ var exampleAnswers = questions[questionKeys[0]].answers;
34
+ var answerKeys = Object.keys(exampleAnswers);
35
+ var orderedAnswerKeys = MatchingTypeOrderer.orderAnswerKeysForDiagonal(answerSummary, answerKeys);
36
+ var orderedQuestionKeys = MatchingTypeOrderer.orderQuestionKeysForDiagonal(answerSummary, questionKeys, orderedAnswerKeys);
37
+ var tableHalfWidth = orderedAnswerKeys.length <= 3;
38
+ return /*#__PURE__*/React.createElement(AfsTableWrapper, null, /*#__PURE__*/React.createElement(AfsPartsContainer, {
39
+ tableHalfWidth: tableHalfWidth,
40
+ afsTable: /*#__PURE__*/React.createElement(MatchingTypeTable, {
41
+ itemId: itemId,
42
+ answerSummary: answerSummary,
43
+ orderedAnswerKeys: orderedAnswerKeys,
44
+ orderedQuestionKeys: orderedQuestionKeys
45
+ })
46
+ }));
47
+ };
48
+
49
+ return _this;
50
+ }
51
+
52
+ return MatchingType;
53
+ }(Component);
54
+ MatchingType.propTypes = {
55
+ itemId: PropTypes.number,
56
+ answerSummary: matchingTypeAnswerSummaryPropType
57
+ }.isRequired;
@@ -0,0 +1 @@
1
+ export { MatchingTypeTable as default } from "./presenter.js";
@@ -0,0 +1,183 @@
1
+ import _defineProperty from "@babel/runtime/helpers/esm/defineProperty";
2
+ import _classCallCheck from "@babel/runtime/helpers/esm/classCallCheck";
3
+ import _inherits from "@babel/runtime/helpers/esm/inherits";
4
+ import _createSuper from "@babel/runtime/helpers/esm/createSuper";
5
+
6
+ var _dec, _class, _class2, _temp;
7
+
8
+ import React, { Component } from 'react';
9
+ import { Flex } from '@instructure/ui-flex';
10
+ var styles = {
11
+ componentId: 'daSNV',
12
+ template: function template(theme) {
13
+ return "\n\n.daSNV_rMrG{display:flex;flex-basis:100%;flex-direction:column;padding-bottom:".concat(theme.tableBottomPadding || 'inherit', "}\n\n.daSNV_cvRx{align-items:center;display:flex;height:48px;justify-content:center;width:46px}\n\n.daSNV_EKAb{background-color:").concat(theme.colorGreen || 'inherit', "}\n\n.daSNV_EKAb svg{fill:#fff}\n\n.daSNV_tnta{border-color:").concat(theme.colorGreen || 'inherit', ";border-style:solid;border-width:2px 0}\n\n.daSNV_fvqY{border-radius:4px 4px 4px 4px;border-width:2px 2px 2px 2px}\n\n.daSNV_cVld{max-width:100%;width:calc(25% + 350px)}");
14
+ },
15
+ 'tableWrapper': 'daSNV_rMrG',
16
+ 'iconWrapper': 'daSNV_cvRx',
17
+ 'iconCorrect': 'daSNV_EKAb',
18
+ 'correctRowBorder': 'daSNV_tnta',
19
+ 'correctRowBorderRadius': 'daSNV_fvqY',
20
+ 'answerFrequencySummaryContainer': 'daSNV_cVld'
21
+ };
22
+ import t from '@instructure/quiz-i18n/es/format-message';
23
+ import { Table } from '@instructure/ui-table';
24
+ import { themeable } from '@instructure/ui-themeable';
25
+ import PropTypes from 'prop-types';
26
+ import { IconCheckSolid } from '@instructure/ui-icons';
27
+ import { matchingTypeAnswerSummaryPropType } from "../../../propTypes.js";
28
+ import classNames from 'classnames';
29
+ import theme from "./theme.js";
30
+ import { extractTextFromHtml } from '@instructure/quiz-interactions';
31
+
32
+ var _ref = /*#__PURE__*/React.createElement(IconCheckSolid, null);
33
+
34
+ var _ref2 = /*#__PURE__*/React.createElement(Flex.Item, {
35
+ width: "46px",
36
+ textAlign: "center"
37
+ });
38
+
39
+ export var MatchingTypeTable = (_dec = themeable(theme, styles), _dec(_class = (_temp = _class2 = /*#__PURE__*/function (_Component) {
40
+ _inherits(MatchingTypeTable, _Component);
41
+
42
+ var _super = _createSuper(MatchingTypeTable);
43
+
44
+ function MatchingTypeTable() {
45
+ var _this;
46
+
47
+ _classCallCheck(this, MatchingTypeTable);
48
+
49
+ for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
50
+ args[_key] = arguments[_key];
51
+ }
52
+
53
+ _this = _super.call.apply(_super, [this].concat(args));
54
+
55
+ _this.renderIcon = function () {
56
+ var classes = classNames(styles.iconWrapper, styles.iconCorrect);
57
+ return /*#__PURE__*/React.createElement("div", {
58
+ className: classes
59
+ }, _ref);
60
+ };
61
+
62
+ _this.renderHeaderCell = function (key) {
63
+ var _this$props = _this.props,
64
+ answerSummary = _this$props.answerSummary,
65
+ itemId = _this$props.itemId;
66
+ var questions = answerSummary.questions;
67
+ var questionKeys = Object.keys(questions);
68
+ var exampleAnswers = questions[questionKeys[0]].answers;
69
+ var answer = exampleAnswers[key];
70
+ var answerNumberHeaderId = "answer-number-header-".concat(key, "-").concat(itemId);
71
+ return /*#__PURE__*/React.createElement(Table.ColHeader, {
72
+ id: answerNumberHeaderId,
73
+ key: answerNumberHeaderId,
74
+ theme: {
75
+ padding: '0 0 15px 0'
76
+ },
77
+ textAlign: "center"
78
+ }, /*#__PURE__*/React.createElement(Flex, {
79
+ direction: "row"
80
+ }, _ref2, /*#__PURE__*/React.createElement(Flex.Item, {
81
+ shouldShrink: true,
82
+ shouldGrow: true,
83
+ textAlign: "center"
84
+ }, answer.body)));
85
+ };
86
+
87
+ _this.renderCell = function (questionKey, answerKey) {
88
+ var _classNames;
89
+
90
+ var _this$props2 = _this.props,
91
+ answerSummary = _this$props2.answerSummary,
92
+ itemId = _this$props2.itemId;
93
+ var questions = answerSummary.questions;
94
+ var question = questions[questionKey];
95
+ var answer = question.answers[answerKey];
96
+ var correct = answer.correct,
97
+ count = answer.count;
98
+ var answerNumberCellId = "answer-number-cell-".concat(questionKey, "-").concat(answerKey, "-").concat(itemId);
99
+ var containerClassNames = classNames((_classNames = {}, _defineProperty(_classNames, styles.correctRowBorder, answer.correct), _defineProperty(_classNames, styles.correctRowBorderRadius, answer.correct), _classNames));
100
+ return /*#__PURE__*/React.createElement(Table.Cell, {
101
+ id: answerNumberCellId,
102
+ key: answerNumberCellId,
103
+ theme: {
104
+ padding: '0 0 0 0'
105
+ }
106
+ }, /*#__PURE__*/React.createElement("div", {
107
+ className: containerClassNames
108
+ }, /*#__PURE__*/React.createElement(Flex, {
109
+ direction: "row"
110
+ }, /*#__PURE__*/React.createElement(Flex.Item, {
111
+ width: "46px",
112
+ textAlign: "center"
113
+ }, correct && _this.renderIcon()), /*#__PURE__*/React.createElement(Flex.Item, {
114
+ shouldShrink: true,
115
+ shouldGrow: true,
116
+ width: "46px",
117
+ textAlign: "center"
118
+ }, count))));
119
+ };
120
+
121
+ _this.renderHeaderRow = function (orderedAnswerKeys) {
122
+ var itemId = _this.props.itemId;
123
+ var headerCells = orderedAnswerKeys.map(_this.renderHeaderCell);
124
+ var categoryHeaderId = "category-header-".concat(itemId);
125
+ var rowKey = "header-row-".concat(itemId);
126
+ return /*#__PURE__*/React.createElement(Table.Row, {
127
+ key: rowKey
128
+ }, /*#__PURE__*/React.createElement(Table.ColHeader, {
129
+ id: categoryHeaderId,
130
+ key: categoryHeaderId,
131
+ theme: {
132
+ padding: '0 0 15px 0'
133
+ },
134
+ textAlign: "start",
135
+ width: "250px"
136
+ }, t('Question')), headerCells);
137
+ };
138
+
139
+ _this.renderRow = function (orderedQuestionKey, orderedAnswerKeys) {
140
+ var _this$props3 = _this.props,
141
+ answerSummary = _this$props3.answerSummary,
142
+ itemId = _this$props3.itemId;
143
+ var questions = answerSummary.questions;
144
+ var question = questions[orderedQuestionKey];
145
+ var answerCells = orderedAnswerKeys.map(function (answerKey) {
146
+ return _this.renderCell(orderedQuestionKey, answerKey);
147
+ });
148
+ var questionRowHeaderId = "question-row-header-id-".concat(orderedQuestionKey, "-").concat(itemId);
149
+ var rowKey = "row-".concat(orderedQuestionKey, "-").concat(itemId);
150
+ var extractedQuestionBody = extractTextFromHtml(question.body);
151
+ var questionBody = extractedQuestionBody.trim().length > 0 ? extractedQuestionBody : question.body;
152
+ return /*#__PURE__*/React.createElement(Table.Row, {
153
+ key: rowKey
154
+ }, /*#__PURE__*/React.createElement(Table.Cell, {
155
+ id: questionRowHeaderId,
156
+ key: questionRowHeaderId,
157
+ theme: {
158
+ padding: '0 0 1px 0'
159
+ }
160
+ }, questionBody), answerCells);
161
+ };
162
+
163
+ _this.render = function () {
164
+ var _this$props4 = _this.props,
165
+ orderedAnswerKeys = _this$props4.orderedAnswerKeys,
166
+ orderedQuestionKeys = _this$props4.orderedQuestionKeys;
167
+ return /*#__PURE__*/React.createElement(Table, {
168
+ caption: t('Answer Frequency Summary')
169
+ }, /*#__PURE__*/React.createElement(Table.Head, null, _this.renderHeaderRow(orderedAnswerKeys)), /*#__PURE__*/React.createElement(Table.Body, null, orderedQuestionKeys.map(function (orderedQuestionKey) {
170
+ return _this.renderRow(orderedQuestionKey, orderedAnswerKeys);
171
+ })));
172
+ };
173
+
174
+ return _this;
175
+ }
176
+
177
+ return MatchingTypeTable;
178
+ }(Component), _class2.propTypes = {
179
+ itemId: PropTypes.number,
180
+ answerSummary: matchingTypeAnswerSummaryPropType,
181
+ orderedAnswerKeys: PropTypes.array.isRequired,
182
+ orderedQuestionKeys: PropTypes.array.isRequired
183
+ }.isRequired, _temp)) || _class);
@@ -0,0 +1,7 @@
1
+ export default function generator(_ref) {
2
+ var spacing = _ref.spacing;
3
+ return {
4
+ tableBottomPadding: spacing.medium,
5
+ colorGreen: '#0b874b'
6
+ };
7
+ }
@@ -0,0 +1,87 @@
1
+ import _objectSpread from "@babel/runtime/helpers/esm/objectSpread2";
2
+ import _classCallCheck from "@babel/runtime/helpers/esm/classCallCheck";
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 MatchingTypeOrderer from "./utils/matchingTypeOrderer.js";
7
+ import AfsTableWrapper from "../shared/AfsTableWrapper/index.js";
8
+ import MatchingTypeTable from "./MatchingTypeTable/index.js";
9
+ import PropTypes from 'prop-types';
10
+ import { matchingTypeAnswerSummaryPropType } from "../../propTypes.js";
11
+ import t from '@instructure/quiz-i18n/es/format-message';
12
+ import AggregationTable from "../shared/AggregationTable/index.js";
13
+ import { AfsPartsContainer } from "../shared/AfsPartsContainer/presenter.js";
14
+ export var OrderingType = /*#__PURE__*/function (_Component) {
15
+ _inherits(OrderingType, _Component);
16
+
17
+ var _super = _createSuper(OrderingType);
18
+
19
+ function OrderingType() {
20
+ var _this;
21
+
22
+ _classCallCheck(this, OrderingType);
23
+
24
+ for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
25
+ args[_key] = arguments[_key];
26
+ }
27
+
28
+ _this = _super.call.apply(_super, [this].concat(args));
29
+
30
+ _this.updateAnswerBody = function (answerSummary) {
31
+ var translateBody = function translateBody(index) {
32
+ return "".concat(t('Order'), " ").concat(index);
33
+ };
34
+
35
+ var answerSummaryCopy = _objectSpread({}, answerSummary);
36
+
37
+ Object.keys(answerSummaryCopy.questions).forEach(function (questionKey) {
38
+ Object.keys(answerSummaryCopy.questions[questionKey].answers).forEach(function (answerKey) {
39
+ var detail = answerSummaryCopy.questions[questionKey].answers[answerKey];
40
+ answerSummaryCopy.questions[questionKey].answers[answerKey] = _objectSpread(_objectSpread({}, detail), {}, {
41
+ // Body cannot be used because because re-render of the component add Order
42
+ // as many time we have to re-render. Only re-assignment works.
43
+ body: translateBody(Number(answerKey) + 1)
44
+ });
45
+ });
46
+ });
47
+ return answerSummaryCopy;
48
+ };
49
+
50
+ _this.render = function () {
51
+ var _this$props = _this.props,
52
+ itemId = _this$props.itemId,
53
+ answerSummary = _this$props.answerSummary;
54
+
55
+ var updatedAnswerSummary = _this.updateAnswerBody(answerSummary);
56
+
57
+ var questions = updatedAnswerSummary.questions;
58
+ var questionKeys = Object.keys(questions);
59
+ var exampleAnswers = questions[questionKeys[0]].answers;
60
+ var answerKeys = Object.keys(exampleAnswers).sort();
61
+ var orderedAnswerKeys = MatchingTypeOrderer.orderAnswerKeysForDiagonal(updatedAnswerSummary, answerKeys);
62
+ var orderedQuestionKeys = MatchingTypeOrderer.orderQuestionKeysForDiagonal(updatedAnswerSummary, questionKeys, orderedAnswerKeys);
63
+ var tableHalfWidth = orderedAnswerKeys.length <= 3;
64
+ return /*#__PURE__*/React.createElement(AfsTableWrapper, null, /*#__PURE__*/React.createElement(AfsPartsContainer, {
65
+ tableHalfWidth: tableHalfWidth,
66
+ afsTable: /*#__PURE__*/React.createElement(MatchingTypeTable, {
67
+ itemId: itemId,
68
+ answerSummary: updatedAnswerSummary,
69
+ orderedAnswerKeys: orderedAnswerKeys,
70
+ orderedQuestionKeys: orderedQuestionKeys
71
+ }),
72
+ aggregationTable: /*#__PURE__*/React.createElement(AggregationTable, {
73
+ itemId: itemId,
74
+ answerSummary: updatedAnswerSummary
75
+ })
76
+ }));
77
+ };
78
+
79
+ return _this;
80
+ }
81
+
82
+ return OrderingType;
83
+ }(Component);
84
+ OrderingType.propTypes = {
85
+ itemId: PropTypes.number,
86
+ answerSummary: matchingTypeAnswerSummaryPropType
87
+ }.isRequired;
@@ -0,0 +1,2 @@
1
+ export { MatchingType } from "./MatchingType.js";
2
+ export { OrderingType } from "./OrderingType.js";
@@ -0,0 +1,42 @@
1
+ import _toConsumableArray from "@babel/runtime/helpers/esm/toConsumableArray";
2
+ import _classCallCheck from "@babel/runtime/helpers/esm/classCallCheck";
3
+
4
+ var MatchingTypeOrderer = function MatchingTypeOrderer() {
5
+ _classCallCheck(this, MatchingTypeOrderer);
6
+
7
+ this.orderAnswerKeysForDiagonal = function (answerSummary, answerKeys) {
8
+ var questions = answerSummary.questions;
9
+ var questionKeys = Object.keys(questions);
10
+
11
+ var orderedKeys = _toConsumableArray(answerKeys);
12
+
13
+ answerKeys.forEach(function (answerKey) {
14
+ questionKeys.forEach(function (questionKey) {
15
+ var question = questions[questionKey];
16
+
17
+ if (question.answers[answerKey].distractor) {
18
+ orderedKeys.splice(orderedKeys.indexOf(answerKey), 1);
19
+ orderedKeys.push(answerKey);
20
+ }
21
+ });
22
+ });
23
+ return orderedKeys;
24
+ };
25
+
26
+ this.orderQuestionKeysForDiagonal = function (answerSummary, questionKeys, orderedAnswerKeys) {
27
+ var questions = answerSummary.questions;
28
+ var orderedQuestionKeys = [];
29
+ orderedAnswerKeys.forEach(function (orderedAnswerKey) {
30
+ questionKeys.forEach(function (questionKey) {
31
+ var question = questions[questionKey];
32
+
33
+ if (question.answers[orderedAnswerKey].correct) {
34
+ orderedQuestionKeys.push(questionKey);
35
+ }
36
+ });
37
+ });
38
+ return orderedQuestionKeys;
39
+ };
40
+ };
41
+
42
+ export default new MatchingTypeOrderer();
@@ -3,7 +3,9 @@ import _inherits from "@babel/runtime/helpers/esm/inherits";
3
3
  import _createSuper from "@babel/runtime/helpers/esm/createSuper";
4
4
  import React, { Component } from 'react';
5
5
  import { PropTypes } from '@instructure/quiz-interactions';
6
- import { ChoiceType } from "./ChoiceType/presenter.js";
6
+ import ChoiceType from "./ChoiceType/index.js";
7
+ import AggregationType from "./AggregationType/index.js";
8
+ import { MatchingType, OrderingType } from "./MatchingType/index.js";
7
9
  import { answerSummaryPropType } from "../propTypes.js";
8
10
  export var AnswerFrequencySummary = /*#__PURE__*/function (_Component) {
9
11
  _inherits(AnswerFrequencySummary, _Component);
@@ -23,7 +25,20 @@ export var AnswerFrequencySummary = /*#__PURE__*/function (_Component) {
23
25
  _this.afsTableComponentMap = new Map();
24
26
 
25
27
  _this.addAfsComponentsByFlags = function (afsFlags) {
26
- if (afsFlags.formulaEnabled) {// this.afsTableComponentMap.set('formula', Formula)
28
+ if (afsFlags.formulaEnabled) {
29
+ _this.afsTableComponentMap.set('formula', AggregationType);
30
+ }
31
+
32
+ if (afsFlags.hotSpotEnabled) {
33
+ _this.afsTableComponentMap.set('hot-spot', AggregationType);
34
+ }
35
+
36
+ if (afsFlags.matchingEnabled) {
37
+ _this.afsTableComponentMap.set('matching', MatchingType);
38
+ }
39
+
40
+ if (afsFlags.orderingEnabled) {
41
+ _this.afsTableComponentMap.set('ordering', OrderingType);
27
42
  }
28
43
  };
29
44
 
@@ -37,7 +52,7 @@ export var AnswerFrequencySummary = /*#__PURE__*/function (_Component) {
37
52
 
38
53
  var AfsTableComponent = _this.afsTableComponentMap.get(interactionType);
39
54
 
40
- if (!AfsTableComponent) {
55
+ if (!AfsTableComponent || !answerSummary) {
41
56
  return /*#__PURE__*/React.createElement(React.Fragment, null);
42
57
  }
43
58
 
@@ -64,6 +79,8 @@ AnswerFrequencySummary.propTypes = {
64
79
  interactionType: PropTypes.string.isRequired,
65
80
  afsFlags: PropTypes.shape({
66
81
  formulaEnabled: PropTypes.bool.isRequired,
67
- matchingEnabled: PropTypes.bool.isRequired
82
+ matchingEnabled: PropTypes.bool.isRequired,
83
+ hotSpotEnabled: PropTypes.bool.isRequired,
84
+ orderingEnabled: PropTypes.bool.isRequired
68
85
  })
69
86
  }.isRequired;
@@ -0,0 +1 @@
1
+ export { AfsPartsContainer as default } from "./presenter.js";