@instructure/quiz-core 20.7.1-rc.7 → 20.8.0

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 (50) hide show
  1. package/CHANGELOG.md +18 -0
  2. package/es/reporting/components/resources/NewQuizAndItemAnalysis/AnswerFrequencySummary/NumericType/ChoiceTypeWithInfo/index.js +1 -0
  3. package/es/reporting/components/resources/NewQuizAndItemAnalysis/AnswerFrequencySummary/NumericType/ChoiceTypeWithInfo/presenter.js +90 -0
  4. package/es/reporting/components/resources/NewQuizAndItemAnalysis/AnswerFrequencySummary/NumericType/index.js +1 -0
  5. package/es/reporting/components/resources/NewQuizAndItemAnalysis/AnswerFrequencySummary/NumericType/presenter.js +255 -0
  6. package/es/reporting/components/resources/NewQuizAndItemAnalysis/AnswerFrequencySummary/{shared/ChoiceGroupTypeTable → NumericType}/theme.js +1 -2
  7. package/es/reporting/components/resources/NewQuizAndItemAnalysis/AnswerFrequencySummary/{shared → RichFillBlankType}/ChoiceGroupTypeTable/presenter.js +23 -59
  8. package/es/reporting/components/resources/NewQuizAndItemAnalysis/AnswerFrequencySummary/RichFillBlankType/ChoiceGroupTypeTable/styles.js +10 -0
  9. package/es/reporting/components/resources/NewQuizAndItemAnalysis/AnswerFrequencySummary/RichFillBlankType/presenter.js +11 -35
  10. package/es/reporting/components/resources/NewQuizAndItemAnalysis/AnswerFrequencySummary/ScoreDistributionType/Table/index.js +120 -0
  11. package/es/reporting/components/resources/NewQuizAndItemAnalysis/AnswerFrequencySummary/ScoreDistributionType/Table/styles.js +38 -0
  12. package/es/reporting/components/resources/NewQuizAndItemAnalysis/AnswerFrequencySummary/ScoreDistributionType/Table/theme.js +11 -0
  13. package/es/reporting/components/resources/NewQuizAndItemAnalysis/AnswerFrequencySummary/ScoreDistributionType/index.js +55 -0
  14. package/es/reporting/components/resources/NewQuizAndItemAnalysis/AnswerFrequencySummary/presenter.js +14 -0
  15. package/es/reporting/components/resources/NewQuizAndItemAnalysis/AnswerFrequencySummary/shared/AfsTableWrapper/presenter.js +8 -2
  16. package/es/reporting/components/resources/NewQuizAndItemAnalysis/AnswerFrequencySummary/shared/AggregationTable/presenter.js +34 -39
  17. package/es/reporting/components/resources/NewQuizAndItemAnalysis/AnswerFrequencySummary/shared/ExpandableCard/index.js +1 -0
  18. package/es/reporting/components/resources/NewQuizAndItemAnalysis/AnswerFrequencySummary/shared/ExpandableCard/presenter.js +104 -0
  19. package/es/reporting/components/resources/NewQuizAndItemAnalysis/AnswerFrequencySummary/shared/{ChoiceGroupTypeTable → ExpandableCard}/styles.js +3 -2
  20. package/es/reporting/components/resources/NewQuizAndItemAnalysis/AnswerFrequencySummary/shared/ExpandableCard/theme.js +7 -0
  21. package/es/reporting/components/resources/NewQuizAndItemAnalysis/NewItemAnalysis/index.js +4 -1
  22. package/es/reporting/components/resources/NewQuizAndItemAnalysis/propTypes.js +54 -4
  23. package/lib/reporting/components/resources/NewQuizAndItemAnalysis/AnswerFrequencySummary/NumericType/ChoiceTypeWithInfo/index.js +13 -0
  24. package/lib/reporting/components/resources/NewQuizAndItemAnalysis/AnswerFrequencySummary/NumericType/ChoiceTypeWithInfo/presenter.js +113 -0
  25. package/lib/reporting/components/resources/NewQuizAndItemAnalysis/AnswerFrequencySummary/NumericType/index.js +13 -0
  26. package/lib/reporting/components/resources/NewQuizAndItemAnalysis/AnswerFrequencySummary/NumericType/presenter.js +281 -0
  27. package/lib/reporting/components/resources/NewQuizAndItemAnalysis/AnswerFrequencySummary/{shared/ChoiceGroupTypeTable → NumericType}/theme.js +1 -2
  28. package/lib/reporting/components/resources/NewQuizAndItemAnalysis/AnswerFrequencySummary/{shared → RichFillBlankType}/ChoiceGroupTypeTable/presenter.js +27 -64
  29. package/lib/reporting/components/resources/NewQuizAndItemAnalysis/AnswerFrequencySummary/RichFillBlankType/ChoiceGroupTypeTable/styles.js +18 -0
  30. package/lib/reporting/components/resources/NewQuizAndItemAnalysis/AnswerFrequencySummary/RichFillBlankType/presenter.js +15 -39
  31. package/lib/reporting/components/resources/NewQuizAndItemAnalysis/AnswerFrequencySummary/ScoreDistributionType/Table/index.js +140 -0
  32. package/lib/reporting/components/resources/NewQuizAndItemAnalysis/AnswerFrequencySummary/ScoreDistributionType/Table/styles.js +46 -0
  33. package/lib/reporting/components/resources/NewQuizAndItemAnalysis/AnswerFrequencySummary/ScoreDistributionType/Table/theme.js +19 -0
  34. package/lib/reporting/components/resources/NewQuizAndItemAnalysis/AnswerFrequencySummary/ScoreDistributionType/index.js +80 -0
  35. package/lib/reporting/components/resources/NewQuizAndItemAnalysis/AnswerFrequencySummary/presenter.js +20 -4
  36. package/lib/reporting/components/resources/NewQuizAndItemAnalysis/AnswerFrequencySummary/shared/AfsTableWrapper/presenter.js +8 -2
  37. package/lib/reporting/components/resources/NewQuizAndItemAnalysis/AnswerFrequencySummary/shared/AggregationTable/presenter.js +33 -38
  38. package/lib/reporting/components/resources/NewQuizAndItemAnalysis/AnswerFrequencySummary/shared/ExpandableCard/index.js +13 -0
  39. package/lib/reporting/components/resources/NewQuizAndItemAnalysis/AnswerFrequencySummary/shared/ExpandableCard/presenter.js +124 -0
  40. package/lib/reporting/components/resources/NewQuizAndItemAnalysis/AnswerFrequencySummary/shared/{ChoiceGroupTypeTable → ExpandableCard}/styles.js +3 -2
  41. package/lib/reporting/components/resources/NewQuizAndItemAnalysis/AnswerFrequencySummary/shared/ExpandableCard/theme.js +15 -0
  42. package/lib/reporting/components/resources/NewQuizAndItemAnalysis/NewItemAnalysis/index.js +4 -1
  43. package/lib/reporting/components/resources/NewQuizAndItemAnalysis/propTypes.js +70 -5
  44. package/package.json +10 -10
  45. /package/es/reporting/components/resources/NewQuizAndItemAnalysis/AnswerFrequencySummary/{RichFillBlankType → NumericType}/styles.js +0 -0
  46. /package/es/reporting/components/resources/NewQuizAndItemAnalysis/AnswerFrequencySummary/{shared → RichFillBlankType}/ChoiceGroupTypeTable/index.js +0 -0
  47. /package/es/reporting/components/resources/NewQuizAndItemAnalysis/AnswerFrequencySummary/RichFillBlankType/{theme.js → ChoiceGroupTypeTable/theme.js} +0 -0
  48. /package/lib/reporting/components/resources/NewQuizAndItemAnalysis/AnswerFrequencySummary/{RichFillBlankType → NumericType}/styles.js +0 -0
  49. /package/lib/reporting/components/resources/NewQuizAndItemAnalysis/AnswerFrequencySummary/{shared → RichFillBlankType}/ChoiceGroupTypeTable/index.js +0 -0
  50. /package/lib/reporting/components/resources/NewQuizAndItemAnalysis/AnswerFrequencySummary/RichFillBlankType/{theme.js → ChoiceGroupTypeTable/theme.js} +0 -0
@@ -0,0 +1,120 @@
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
+
6
+ var _dec, _class, _class2, _temp;
7
+
8
+ /** @jsx jsx */
9
+ import { scoreDistributionType } from "../../../propTypes.js";
10
+ import { Component } from 'react';
11
+ import t from '@instructure/quiz-i18n/es/format-message';
12
+ import { Table } from '@instructure/ui-table';
13
+ import PropTypes from 'prop-types';
14
+ import { withStyle, jsx } from '@instructure/emotion';
15
+ import generateStyle from "./styles.js";
16
+ import generateComponentTheme from "./theme.js";
17
+ export var ScoreDistributionTypeTable = (_dec = withStyle(generateStyle, generateComponentTheme), _dec(_class = (_temp = _class2 = /*#__PURE__*/function (_Component) {
18
+ _inherits(ScoreDistributionTypeTable, _Component);
19
+
20
+ var _super = _createSuper(ScoreDistributionTypeTable);
21
+
22
+ function ScoreDistributionTypeTable() {
23
+ var _this;
24
+
25
+ _classCallCheck(this, ScoreDistributionTypeTable);
26
+
27
+ for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
28
+ args[_key] = arguments[_key];
29
+ }
30
+
31
+ _this = _super.call.apply(_super, [this].concat(args));
32
+
33
+ _this.renderFirstCell = function (content) {
34
+ return jsx("div", {
35
+ css: _this.props.styles.firstTextContainer
36
+ }, content);
37
+ };
38
+
39
+ _this.renderCell = function (content) {
40
+ return jsx("div", {
41
+ css: _this.props.styles.textContainer
42
+ }, content);
43
+ };
44
+
45
+ _this.renderRow = function (choice, choiceIndex) {
46
+ var count = choice.count,
47
+ score = choice.score,
48
+ percentage = choice.percentage;
49
+ return jsx(Table.Row, {
50
+ key: choiceIndex
51
+ }, jsx(Table.Cell, {
52
+ themeOverride: {
53
+ padding: '0'
54
+ }
55
+ }, _this.renderFirstCell(score)), jsx(Table.Cell, {
56
+ themeOverride: {
57
+ padding: '0'
58
+ }
59
+ }, _this.renderCell(count)), jsx(Table.Cell, {
60
+ themeOverride: {
61
+ padding: '0'
62
+ },
63
+ textAlign: "center"
64
+ }, _this.renderCell("".concat(percentage, "%"))));
65
+ };
66
+
67
+ return _this;
68
+ }
69
+
70
+ _createClass(ScoreDistributionTypeTable, [{
71
+ key: "componentDidMount",
72
+ value: function componentDidMount() {
73
+ this.props.makeStyles();
74
+ }
75
+ }, {
76
+ key: "componentDidUpdate",
77
+ value: function componentDidUpdate() {
78
+ this.props.makeStyles();
79
+ }
80
+ }, {
81
+ key: "render",
82
+ value: function render() {
83
+ var _this$props = this.props,
84
+ scores = _this$props.scores,
85
+ itemId = _this$props.itemId,
86
+ styles = _this$props.styles;
87
+ var pointsHeaderId = "answer-frequency-summary-points-".concat(itemId);
88
+ var respondentsHeaderId = "answer-frequency-summary-respondents-".concat(itemId);
89
+ var percentageHeaderId = "answer-frequency-summary-percentage-".concat(itemId);
90
+ return jsx("div", {
91
+ css: styles.tableContainer
92
+ }, jsx(Table, {
93
+ caption: t('Score Frequency Summary'),
94
+ elementRef: this.setTableRef
95
+ }, jsx(Table.Head, null, jsx(Table.Row, null, jsx(Table.ColHeader, {
96
+ id: pointsHeaderId,
97
+ height: "47px"
98
+ }, t('Points')), jsx(Table.ColHeader, {
99
+ id: respondentsHeaderId,
100
+ height: "47px",
101
+ textAlign: "center"
102
+ }, t('Respondents')), jsx(Table.ColHeader, {
103
+ id: percentageHeaderId,
104
+ height: "47px",
105
+ textAlign: "center"
106
+ }, t('%')))), jsx(Table.Body, null, scores.map(this.renderRow))));
107
+ }
108
+ }]);
109
+
110
+ ScoreDistributionTypeTable.displayName = "ScoreDistributionTypeTable";
111
+ return ScoreDistributionTypeTable;
112
+ }(Component), _class2.propTypes = {
113
+ itemId: PropTypes.number.isRequired,
114
+ scores: PropTypes.arrayOf(scoreDistributionType).isRequired,
115
+ // eslint-disable-next-line react/require-default-props
116
+ makeStyles: PropTypes.func,
117
+ // eslint-disable-next-line react/require-default-props,react/forbid-prop-types
118
+ styles: PropTypes.object
119
+ }, _temp)) || _class);
120
+ export default ScoreDistributionTypeTable;
@@ -0,0 +1,38 @@
1
+ var generateStyle = function generateStyle(componentTheme) {
2
+ var borderBottom = "solid 0.0625rem ".concat(componentTheme.colorGray);
3
+ return {
4
+ tableContainer: {
5
+ width: 'calc(25% + 350px)',
6
+ maxWidth: '100%',
7
+ '& table': {
8
+ borderCollapse: 'separate',
9
+ borderSpacing: '0 1px',
10
+ '& thead tr': {
11
+ '& th, & td': {
12
+ borderBottom: borderBottom
13
+ }
14
+ },
15
+ '& tbody tr': {
16
+ '& th, & td': {
17
+ width: '33.33%',
18
+ borderBottom: borderBottom
19
+ },
20
+ '& th': {
21
+ fontWeight: 400
22
+ }
23
+ }
24
+ }
25
+ },
26
+ textContainer: {
27
+ height: 'calc(100% - 4px)',
28
+ display: 'flex',
29
+ alignItems: 'center',
30
+ justifyContent: 'center'
31
+ },
32
+ firstTextContainer: {
33
+ padding: componentTheme.cellPadding
34
+ }
35
+ };
36
+ };
37
+
38
+ export default generateStyle;
@@ -0,0 +1,11 @@
1
+ var generateComponentTheme = function generateComponentTheme(_ref) {
2
+ var spacing = _ref.spacing,
3
+ colors = _ref.colors;
4
+ return {
5
+ tableBottomPadding: spacing === null || spacing === void 0 ? void 0 : spacing.medium,
6
+ colorGray: colors === null || colors === void 0 ? void 0 : colors.tiara,
7
+ cellPadding: "".concat(spacing === null || spacing === void 0 ? void 0 : spacing.small, " ").concat(spacing === null || spacing === void 0 ? void 0 : spacing.small)
8
+ };
9
+ };
10
+
11
+ export default generateComponentTheme;
@@ -0,0 +1,55 @@
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 ScoreDistributionTypeTable from "./Table/index.js";
7
+ import { scoreDistributionTypeAnswerSummaryPropType } from "../../propTypes.js";
8
+ import AggregationTable from "../shared/AggregationTable/index.js";
9
+ import { AfsPartsContainer } from "../shared/AfsPartsContainer/presenter.js";
10
+ import AfsTableWrapper from "../shared/AfsTableWrapper/index.js";
11
+ import t from '@instructure/quiz-i18n/es/format-message';
12
+ export var ScoreDistributionType = /*#__PURE__*/function (_Component) {
13
+ _inherits(ScoreDistributionType, _Component);
14
+
15
+ var _super = _createSuper(ScoreDistributionType);
16
+
17
+ function ScoreDistributionType() {
18
+ var _this;
19
+
20
+ _classCallCheck(this, ScoreDistributionType);
21
+
22
+ for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
23
+ args[_key] = arguments[_key];
24
+ }
25
+
26
+ _this = _super.call.apply(_super, [this].concat(args));
27
+
28
+ _this.render = function () {
29
+ var _this$props = _this.props,
30
+ answerSummary = _this$props.answerSummary,
31
+ itemId = _this$props.itemId;
32
+ return /*#__PURE__*/React.createElement(AfsTableWrapper, {
33
+ tableHeader: t('Score Frequency Summary')
34
+ }, /*#__PURE__*/React.createElement(AfsPartsContainer, {
35
+ afsTable: /*#__PURE__*/React.createElement(ScoreDistributionTypeTable, {
36
+ itemId: itemId,
37
+ scores: answerSummary.score_distribution
38
+ }),
39
+ aggregationTable: /*#__PURE__*/React.createElement(AggregationTable, {
40
+ itemId: itemId,
41
+ answerSummary: answerSummary
42
+ })
43
+ }));
44
+ };
45
+
46
+ return _this;
47
+ }
48
+
49
+ return ScoreDistributionType;
50
+ }(Component);
51
+ ScoreDistributionType.propTypes = {
52
+ itemId: PropTypes.number,
53
+ answerSummary: scoreDistributionTypeAnswerSummaryPropType
54
+ }.isRequired;
55
+ export default ScoreDistributionType;
@@ -7,7 +7,9 @@ import LegacyChoiceType from "./LegacyChoiceType/index.js";
7
7
  import ChoiceType from "./ChoiceType/index.js";
8
8
  import RichFillBlankType from "./RichFillBlankType/index.js";
9
9
  import AggregationType from "./AggregationType/index.js";
10
+ import NumericType from "./NumericType/index.js";
10
11
  import { MatchingType, OrderingType, CategorizationType } from "./MatchingType/index.js";
12
+ import { ScoreDistributionType } from "./ScoreDistributionType/index.js";
11
13
  import { afsFlags, answerSummaryPropType } from "../propTypes.js";
12
14
  export var AnswerFrequencySummary = /*#__PURE__*/function (_Component) {
13
15
  _inherits(AnswerFrequencySummary, _Component);
@@ -62,6 +64,18 @@ export var AnswerFrequencySummary = /*#__PURE__*/function (_Component) {
62
64
  if (afsFlags.fillInTheBlankEnabled) {
63
65
  _this.afsTableComponentMap.set('rich-fill-blank', RichFillBlankType);
64
66
  }
67
+
68
+ if (afsFlags.numericEnabled) {
69
+ _this.afsTableComponentMap.set('numeric', NumericType);
70
+ }
71
+
72
+ if (afsFlags.essayEnabled) {
73
+ _this.afsTableComponentMap.set('essay', ScoreDistributionType);
74
+ }
75
+
76
+ if (afsFlags.fileUploadEnabled) {
77
+ _this.afsTableComponentMap.set('file-upload', ScoreDistributionType);
78
+ }
65
79
  };
66
80
 
67
81
  _this.render = function () {
@@ -28,6 +28,11 @@ export var AfsTableWrapper = (_dec = withStyle(generateStyle, null), _dec(_class
28
28
 
29
29
  _this = _super.call.apply(_super, [this].concat(args));
30
30
 
31
+ _this.getHeader = function () {
32
+ var tableHeader = _this.props.tableHeader;
33
+ return tableHeader || t('Answer Frequency Summary');
34
+ };
35
+
31
36
  _this.render = function () {
32
37
  return jsx(Flex, {
33
38
  direction: "row",
@@ -41,7 +46,7 @@ export var AfsTableWrapper = (_dec = withStyle(generateStyle, null), _dec(_class
41
46
  level: "h3",
42
47
  weight: "bold",
43
48
  color: "primary"
44
- }, t('Answer Frequency Summary')), _this.props.children)));
49
+ }, _this.getHeader()), _this.props.children)));
45
50
  };
46
51
 
47
52
  return _this;
@@ -50,5 +55,6 @@ export var AfsTableWrapper = (_dec = withStyle(generateStyle, null), _dec(_class
50
55
  return AfsTableWrapper;
51
56
  }(Component), _class2.propTypes = {
52
57
  children: PropTypes.node.isRequired,
53
- styles: PropTypes.object
58
+ styles: PropTypes.object,
59
+ tableHeader: PropTypes.string
54
60
  }, _temp)) || _class);
@@ -9,28 +9,28 @@ import t from '@instructure/quiz-i18n/es/format-message';
9
9
  import { Table } from '@instructure/ui-table';
10
10
  import { onlyAggregatePropType } from "../../../propTypes.js";
11
11
  import PropTypes from 'prop-types';
12
- import { IconCheckSolid, IconXSolid, IconNoSolid, IconOvalHalfSolid } from '@instructure/ui-icons';
12
+ import { IconCheckSolid, IconXSolid, IconNoSolid, IconGradebookSolid } from '@instructure/ui-icons';
13
13
  import { themeable } from '@instructure/ui-themeable';
14
14
  import theme from "./theme.js";
15
15
  var styles = {
16
- componentId: 'fSsSV',
16
+ componentId: 'fMmrG',
17
17
  template: function template(theme) {
18
- return "\n\n.fSsSV_cvRx{align-items:center;display:flex;height:100%;justify-content:center;min-height:47px;width:46px}\n\n.fSsSV_fPIL{min-width:500px}\n\n.fSsSV_fPIL table{border-collapse:separate;border-spacing:0 12px}\n\n.fSsSV_fPIL thead th{border-color:".concat(theme.colorHeaderBottomBorder || 'inherit', ";border-style:solid;border-width:0 0 1px 0}\n\n.fSsSV_fPIL table tbody tr td{border-style:solid;border-width:2px 0 2px 0;width:33.33%}\n\n.fSsSV_fPIL table tbody tr th:first-child{border-radius:4px 0 0 4px;border-style:solid;border-width:2px 0 2px 2px;font-weight:400}\n\n.fSsSV_fPIL table tbody tr td:last-child{border-radius:0 4px 4px 0;border-style:solid;border-width:2px 2px 2px 0}\n\n.fSsSV_dzqP table tbody tr:first-child td,.fSsSV_dzqP table tbody tr:first-child th{border-color:").concat(theme.colorGrey || 'inherit', "}\n\n.fSsSV_fZpZ table tbody tr:first-child td,.fSsSV_fZpZ table tbody tr:first-child th{border-color:").concat(theme.colorGreen || 'inherit', "}\n\n.fSsSV_fZpZ table tbody tr:nth-child(2) td,.fSsSV_fZpZ table tbody tr:nth-child(2) th{border-color:").concat(theme.colorRed || 'inherit', "}\n\n.fSsSV_dgTJ table tbody tr:first-child td,.fSsSV_dgTJ table tbody tr:first-child th{border-color:").concat(theme.colorGreen || 'inherit', "}\n\n.fSsSV_dgTJ table tbody tr:nth-child(2) td,.fSsSV_dgTJ table tbody tr:nth-child(2) th{border-color:").concat(theme.colorRed || 'inherit', "}\n\n.fSsSV_dgTJ table tbody tr:nth-child(3) td,.fSsSV_dgTJ table tbody tr:nth-child(3) th{border-color:").concat(theme.colorGrey || 'inherit', "}\n\n.fSsSV_bUPM table tbody tr:first-child td,.fSsSV_bUPM table tbody tr:first-child th{border-color:").concat(theme.colorGreen || 'inherit', "}\n\n.fSsSV_bUPM table tbody tr:nth-child(2) td,.fSsSV_bUPM table tbody tr:nth-child(2) th{border-color:").concat(theme.colorBlue || 'inherit', "}\n\n.fSsSV_bUPM table tbody tr:nth-child(3) td,.fSsSV_bUPM table tbody tr:nth-child(3) th{border-color:").concat(theme.colorRed || 'inherit', "}\n\n.fSsSV_bUPM table tbody tr:nth-child(4) td,.fSsSV_bUPM table tbody tr:nth-child(4) th{border-color:").concat(theme.colorGrey || 'inherit', "}\n\n.fSsSV_bvau{background-color:").concat(theme.colorGreen || 'inherit', "}\n\n.fSsSV_cxOH{background-color:").concat(theme.colorRed || 'inherit', "}\n\n.fSsSV_eRkO{background-color:").concat(theme.colorBlue || 'inherit', "}\n\n.fSsSV_eKcq{background-color:").concat(theme.colorGrey || 'inherit', "}\n\n.fSsSV_euQM{padding:12px 0 12px 10px}\n\n.fSsSV_fuuc{padding-left:45px}\n\n.fSsSV_vDgC svg{fill:#fff}\n\n.fSsSV_fHMm{border-color:").concat(theme.colorHeaderBottomBorder || 'inherit', ";border-style:solid;border-width:0 0 1px 0}");
18
+ return "\n\n.fMmrG_cvRx{align-items:center;display:flex;height:100%;justify-content:center;min-height:47px;width:46px}\n\n.fMmrG_fPIL{min-width:500px}\n\n.fMmrG_fPIL table{border-collapse:separate;border-spacing:0 12px}\n\n.fMmrG_fPIL thead th{border-color:".concat(theme.colorHeaderBottomBorder || 'inherit', ";border-style:solid;border-width:0 0 1px 0}\n\n.fMmrG_fPIL table tbody tr td{border-style:solid;border-width:2px 0 2px 0;width:33.33%}\n\n.fMmrG_fPIL table tbody tr th:first-child{border-radius:4px 0 0 4px;border-style:solid;border-width:2px 0 2px 2px;font-weight:400}\n\n.fMmrG_fPIL table tbody tr td:last-child{border-radius:0 4px 4px 0;border-style:solid;border-width:2px 2px 2px 0}\n\n.fMmrG_dzqP table tbody tr:first-child td,.fMmrG_dzqP table tbody tr:first-child th{border-color:").concat(theme.colorGrey || 'inherit', "}\n\n.fMmrG_fZpZ table tbody tr:first-child td,.fMmrG_fZpZ table tbody tr:first-child th{border-color:").concat(theme.colorGreen || 'inherit', "}\n\n.fMmrG_fZpZ table tbody tr:nth-child(2) td,.fMmrG_fZpZ table tbody tr:nth-child(2) th{border-color:").concat(theme.colorRed || 'inherit', "}\n\n.fMmrG_dgTJ table tbody tr:first-child td,.fMmrG_dgTJ table tbody tr:first-child th{border-color:").concat(theme.colorGreen || 'inherit', "}\n\n.fMmrG_dgTJ table tbody tr:nth-child(2) td,.fMmrG_dgTJ table tbody tr:nth-child(2) th{border-color:").concat(theme.colorRed || 'inherit', "}\n\n.fMmrG_dgTJ table tbody tr:nth-child(3) td,.fMmrG_dgTJ table tbody tr:nth-child(3) th{border-color:").concat(theme.colorGrey || 'inherit', "}\n\n.fMmrG_bYLj table tbody tr:first-child td,.fMmrG_bYLj table tbody tr:first-child th{border-color:").concat(theme.colorGreen || 'inherit', "}\n\n.fMmrG_bYLj table tbody tr:nth-child(2) td,.fMmrG_bYLj table tbody tr:nth-child(2) th{border-color:").concat(theme.colorBlue || 'inherit', "}\n\n.fMmrG_bYLj table tbody tr:nth-child(3) td,.fMmrG_bYLj table tbody tr:nth-child(3) th{border-color:").concat(theme.colorRed || 'inherit', "}\n\n.fMmrG_bYLj table tbody tr:nth-child(4) td,.fMmrG_bYLj table tbody tr:nth-child(4) th{border-color:").concat(theme.colorGrey || 'inherit', "}\n\n.fMmrG_bvau{background-color:").concat(theme.colorGreen || 'inherit', "}\n\n.fMmrG_cxOH{background-color:").concat(theme.colorRed || 'inherit', "}\n\n.fMmrG_dsqS{background-color:").concat(theme.colorBlue || 'inherit', "}\n\n.fMmrG_eKcq{background-color:").concat(theme.colorGrey || 'inherit', "}\n\n.fMmrG_euQM{padding:12px 0 12px 10px}\n\n.fMmrG_fuuc{padding-left:45px}\n\n.fMmrG_vDgC svg{fill:#fff}\n\n.fMmrG_fHMm{border-color:").concat(theme.colorHeaderBottomBorder || 'inherit', ";border-style:solid;border-width:0 0 1px 0}");
19
19
  },
20
- 'iconWrapper': 'fSsSV_cvRx',
21
- 'collapsingTable': 'fSsSV_fPIL',
22
- 'onlyNoanswer': 'fSsSV_dzqP',
23
- 'correctIncorrect': 'fSsSV_fZpZ',
24
- 'correctIncorrectNoanswer': 'fSsSV_dgTJ',
25
- 'correctIncorrectNoanswerPartial': 'fSsSV_bUPM',
26
- 'correctBackground': 'fSsSV_bvau',
27
- 'incorrectBackground': 'fSsSV_cxOH',
28
- 'partialCorrectBackground': 'fSsSV_eRkO',
29
- 'noAnswerBackground': 'fSsSV_eKcq',
30
- 'labelWrapper': 'fSsSV_euQM',
31
- 'firstHeaderCell': 'fSsSV_fuuc',
32
- 'iconWhite': 'fSsSV_vDgC',
33
- 'headerCell': 'fSsSV_fHMm'
20
+ 'iconWrapper': 'fMmrG_cvRx',
21
+ 'collapsingTable': 'fMmrG_fPIL',
22
+ 'onlyNoanswer': 'fMmrG_dzqP',
23
+ 'correctIncorrect': 'fMmrG_fZpZ',
24
+ 'correctIncorrectNoanswer': 'fMmrG_dgTJ',
25
+ 'correctIncorrectNoanswerGraded': 'fMmrG_bYLj',
26
+ 'correctBackground': 'fMmrG_bvau',
27
+ 'incorrectBackground': 'fMmrG_cxOH',
28
+ 'gradedBackground': 'fMmrG_dsqS',
29
+ 'noAnswerBackground': 'fMmrG_eKcq',
30
+ 'labelWrapper': 'fMmrG_euQM',
31
+ 'firstHeaderCell': 'fMmrG_fuuc',
32
+ 'iconWhite': 'fMmrG_vDgC',
33
+ 'headerCell': 'fMmrG_fHMm'
34
34
  };
35
35
  import { Flex } from '@instructure/ui-flex';
36
36
  import classNames from 'classnames';
@@ -40,11 +40,11 @@ import { noAnswerMissing } from "./popoverContent.js";
40
40
  var noAnswerKey = 'noAnswer';
41
41
  var incorrectKey = 'incorrect';
42
42
  var correctKey = 'correct';
43
- var partialCorrectKey = 'partialCorrect';
43
+ var gradedKey = 'graded';
44
44
 
45
45
  var _ref = /*#__PURE__*/React.createElement(IconCheckSolid, null);
46
46
 
47
- var _ref2 = /*#__PURE__*/React.createElement(IconOvalHalfSolid, null);
47
+ var _ref2 = /*#__PURE__*/React.createElement(IconGradebookSolid, null);
48
48
 
49
49
  var _ref3 = /*#__PURE__*/React.createElement(IconXSolid, null);
50
50
 
@@ -122,9 +122,9 @@ export var AggregationTable = (_dec = themeable(theme, styles), _dec(_class = (_
122
122
  }, /*#__PURE__*/React.createElement(Text, null, concatenatedPercentage)));
123
123
  };
124
124
 
125
- _this.partialCorrectExist = function () {
126
- var aggregate = _this.props.answerSummary.aggregate;
127
- return !!(aggregate === null || aggregate === void 0 ? void 0 : aggregate.partial_correct);
125
+ _this.gradedExist = function () {
126
+ var graded = _this.props.answerSummary.graded;
127
+ return !!graded;
128
128
  };
129
129
 
130
130
  _this.correctExist = function () {
@@ -142,24 +142,19 @@ export var AggregationTable = (_dec = themeable(theme, styles), _dec(_class = (_
142
142
  return !!no_answer;
143
143
  };
144
144
 
145
- _this.getCorrectLabel = function () {
146
- return _this.partialCorrectExist() ? t('Fully correct') : t('Correct');
147
- };
148
-
149
145
  _this.renderCorrect = function () {
150
146
  var aggregate = _this.props.answerSummary.aggregate;
151
147
  var correct = aggregate.correct;
152
148
  var correctCount = correct.count || 0;
153
149
  var correctPercentage = correct.percentage || 0;
154
- return _this.renderRow(correctKey, _ref, _this.getCorrectLabel(), correctCount, correctPercentage);
150
+ return _this.renderRow(correctKey, _ref, t('Correct'), correctCount, correctPercentage);
155
151
  };
156
152
 
157
- _this.renderPartialCorrect = function () {
158
- var aggregate = _this.props.answerSummary.aggregate;
159
- var partial_correct = aggregate.partial_correct;
160
- var partialCorrectCount = partial_correct.count || 0;
161
- var partialCorrectPercentage = partial_correct.percentage || 0;
162
- return _this.renderRow(partialCorrectKey, _ref2, t('Partially correct'), partialCorrectCount, partialCorrectPercentage);
153
+ _this.renderGraded = function () {
154
+ var graded = _this.props.answerSummary.graded;
155
+ var gradedCount = graded.count || 0;
156
+ var gradedPercentage = graded.percentage || 0;
157
+ return _this.renderRow(gradedKey, _ref2, t('Graded'), gradedCount, gradedPercentage);
163
158
  };
164
159
 
165
160
  _this.renderIncorrect = function () {
@@ -180,16 +175,16 @@ export var AggregationTable = (_dec = themeable(theme, styles), _dec(_class = (_
180
175
  _this.getColorProfile = function () {
181
176
  var colorProfile;
182
177
 
183
- var correctIncorrectNoAnswerPartial = _this.partialCorrectExist() && _this.noAnswerExist() && _this.correctExist() && _this.incorrectExist();
178
+ var correctIncorrectNoAnswerGraded = _this.gradedExist() && _this.noAnswerExist() && _this.correctExist() && _this.incorrectExist();
184
179
 
185
- var correctIncorrectNoAnswer = !_this.partialCorrectExist() && _this.noAnswerExist() && _this.correctExist() && _this.incorrectExist();
180
+ var correctIncorrectNoAnswer = !_this.gradedExist() && _this.noAnswerExist() && _this.correctExist() && _this.incorrectExist();
186
181
 
187
- var onlyNoAnswer = _this.noAnswerExist() && !_this.partialCorrectExist() && !_this.correctExist() && !_this.incorrectExist();
182
+ var onlyNoAnswer = _this.noAnswerExist() && !_this.gradedExist() && !_this.correctExist() && !_this.incorrectExist();
188
183
 
189
184
  if (correctIncorrectNoAnswer) {
190
185
  colorProfile = 'correctIncorrectNoanswer';
191
- } else if (correctIncorrectNoAnswerPartial) {
192
- colorProfile = 'correctIncorrectNoanswerPartial';
186
+ } else if (correctIncorrectNoAnswerGraded) {
187
+ colorProfile = 'correctIncorrectNoanswerGraded';
193
188
  } else if (onlyNoAnswer) {
194
189
  colorProfile = 'onlyNoanswer';
195
190
  } else {
@@ -205,7 +200,7 @@ export var AggregationTable = (_dec = themeable(theme, styles), _dec(_class = (_
205
200
  className: classNames(styles.collapsingTable, styles[_this.getColorProfile()])
206
201
  }, /*#__PURE__*/React.createElement(Table, {
207
202
  caption: t('Answer Frequency Summary Aggregates')
208
- }, _this.renderHeaderRow(popover), /*#__PURE__*/React.createElement(Table.Body, null, _this.correctExist() && _this.renderCorrect(), _this.partialCorrectExist() && _this.renderPartialCorrect(), _this.incorrectExist() && _this.renderIncorrect(), _this.noAnswerExist() && _this.renderNoAnswer())));
203
+ }, _this.renderHeaderRow(popover), /*#__PURE__*/React.createElement(Table.Body, null, _this.correctExist() && _this.renderCorrect(), _this.gradedExist() && _this.renderGraded(), _this.incorrectExist() && _this.renderIncorrect(), _this.noAnswerExist() && _this.renderNoAnswer())));
209
204
  };
210
205
 
211
206
  return _this;
@@ -0,0 +1 @@
1
+ export { ExpandableCard as default } from "./presenter.js";
@@ -0,0 +1,104 @@
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
+
5
+ var _dec, _class, _class2, _temp;
6
+
7
+ /** @jsx jsx */
8
+ import { Component } from 'react';
9
+ import Card from "../../../../../../../common/components/shared/Card/index.js";
10
+ import { Flex } from '@instructure/ui-flex';
11
+ import { jsx, withStyle } from '@instructure/emotion';
12
+ import ExpandButton from "../../../../../../../common/components/shared/ExpandButton/index.js";
13
+ import t from '@instructure/quiz-i18n/es/format-message';
14
+ import generateStyle from "./styles.js";
15
+ import generateComponentTheme from "./theme.js";
16
+ import PropTypes from 'prop-types';
17
+ export var ExpandableCard = (_dec = withStyle(generateStyle, generateComponentTheme), _dec(_class = (_temp = _class2 = /*#__PURE__*/function (_Component) {
18
+ _inherits(ExpandableCard, _Component);
19
+
20
+ var _super = _createSuper(ExpandableCard);
21
+
22
+ function ExpandableCard() {
23
+ var _this;
24
+
25
+ _classCallCheck(this, ExpandableCard);
26
+
27
+ for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
28
+ args[_key] = arguments[_key];
29
+ }
30
+
31
+ _this = _super.call.apply(_super, [this].concat(args));
32
+ _this.state = {
33
+ bodyExpanded: false
34
+ };
35
+
36
+ _this.handleBodyToggle = function () {
37
+ _this.setState({
38
+ bodyExpanded: !_this.state.bodyExpanded
39
+ });
40
+ };
41
+
42
+ _this.renderGroup = function () {
43
+ var headLine = _this.props.headLine;
44
+ return jsx(Flex, {
45
+ direction: "row",
46
+ alignItems: "start"
47
+ }, jsx(Flex.Item, {
48
+ shouldShrink: true,
49
+ shouldGrow: true,
50
+ margin: "xx-small none none none"
51
+ }, headLine), jsx(Flex.Item, {
52
+ margin: "none none none x-small"
53
+ }, jsx(ExpandButton, {
54
+ onClick: _this.handleBodyToggle,
55
+ title: _this.state.bodyExpanded ? t('collapse group result') : t('expand group result'),
56
+ isExpanded: _this.state.bodyExpanded
57
+ })));
58
+ };
59
+
60
+ _this.renderBody = function () {
61
+ var _this$props = _this.props,
62
+ content = _this$props.content,
63
+ styles = _this$props.styles;
64
+ var bodyContainer = styles.bodyContainer;
65
+ return jsx(Flex.Item, {
66
+ shouldShrink: true,
67
+ padding: "x-small small x-small small"
68
+ }, jsx("div", {
69
+ css: bodyContainer
70
+ }, content));
71
+ };
72
+
73
+ _this.render = function () {
74
+ var styles = _this.props.styles;
75
+ var groupWrapper = styles.groupWrapper;
76
+ var bodyExpanded = _this.state.bodyExpanded;
77
+ return jsx("div", {
78
+ css: groupWrapper
79
+ }, jsx(Card, null, jsx(Flex, {
80
+ direction: "column",
81
+ justifyItems: "start"
82
+ }, jsx(Flex.Item, {
83
+ shouldGrow: true,
84
+ shouldShrink: true,
85
+ overflowY: "visible"
86
+ }, jsx(Flex, {
87
+ direction: "column",
88
+ justifyItems: "start"
89
+ }, jsx(Flex.Item, {
90
+ shouldShrink: true,
91
+ padding: "x-small small x-small small",
92
+ overflowY: "hidden"
93
+ }, _this.renderGroup()), bodyExpanded && _this.renderBody())))));
94
+ };
95
+
96
+ return _this;
97
+ }
98
+
99
+ return ExpandableCard;
100
+ }(Component), _class2.propTypes = {
101
+ headLine: PropTypes.node,
102
+ content: PropTypes.node,
103
+ styles: PropTypes.object
104
+ }.isRequired, _temp)) || _class);
@@ -6,8 +6,9 @@ var generateStyle = function generateStyle(componentTheme) {
6
6
  minWidth: componentTheme.cardMinWidth,
7
7
  maxWidth: '100%'
8
8
  },
9
- cardWrapper: {
10
- margin: "0 0 ".concat(componentTheme.cardBottomMargin, " 0")
9
+ bodyContainer: {
10
+ overflow: 'auto',
11
+ maxHeight: '600px'
11
12
  }
12
13
  };
13
14
  };
@@ -0,0 +1,7 @@
1
+ var generateComponentTheme = function generateComponentTheme() {
2
+ return {
3
+ cardMinWidth: '500px'
4
+ };
5
+ };
6
+
7
+ export default generateComponentTheme;
@@ -13,7 +13,10 @@ function mapStateToProps(_state) {
13
13
  trueFalseEnabled: featureOn('ia_true_false_afs'),
14
14
  choiceEnabled: featureOn('ia_choice_afs'),
15
15
  multiAnswerEnabled: featureOn('ia_multi_answer_afs'),
16
- fillInTheBlankEnabled: featureOn('ia_rich_fill_blank_afs')
16
+ fillInTheBlankEnabled: featureOn('ia_rich_fill_blank_afs'),
17
+ essayEnabled: featureOn('ia_essay_afs'),
18
+ fileUploadEnabled: featureOn('ia_file_upload_afs'),
19
+ numericEnabled: featureOn('ia_numeric_afs')
17
20
  }
18
21
  };
19
22
  }
@@ -32,11 +32,11 @@ export var aggregateDetailPropType = PropTypes.shape({
32
32
  });
33
33
  export var aggregatePropType = PropTypes.shape({
34
34
  correct: aggregateDetailPropType.isRequired,
35
- incorrect: aggregateDetailPropType.isRequired,
36
- partial_correct: aggregateDetailPropType
35
+ incorrect: aggregateDetailPropType.isRequired
37
36
  });
38
37
  export var onlyAggregatePropType = PropTypes.shape({
39
38
  no_answer: aggregateDetailPropType,
39
+ graded: aggregateDetailPropType,
40
40
  aggregate: aggregatePropType
41
41
  });
42
42
  export var choiceTypeObject = PropTypes.shape({
@@ -50,6 +50,17 @@ export var choiceTypeAnswerSummaryPropType = PropTypes.shape({
50
50
  no_answer: aggregateDetailPropType,
51
51
  aggregate: aggregatePropType
52
52
  });
53
+ export var scoreDistributionTypeAnswerSummaryPropType = PropTypes.shape({
54
+ no_answer: aggregateDetailPropType.isRequired,
55
+ aggregate: aggregatePropType.isRequired,
56
+ graded: aggregateDetailPropType.isRequired,
57
+ score_distribution: PropTypes.arrayOf(scoreDistributionType).isRequired
58
+ });
59
+ export var scoreDistributionType = PropTypes.shape({
60
+ count: PropTypes.number.isRequired,
61
+ score: PropTypes.number.isRequired,
62
+ percentage: PropTypes.number.isRequired
63
+ });
53
64
  export var matchingTypeAnswerSummaryPropType = PropTypes.shape({
54
65
  questions: PropTypes.objectOf(PropTypes.shape({
55
66
  body: PropTypes.string,
@@ -77,7 +88,43 @@ export var richFillBlankTypeAnswerSummaryPropType = PropTypes.shape({
77
88
  no_answer: aggregateDetailPropType,
78
89
  aggregate: aggregatePropType
79
90
  });
80
- export var answerSummaryPropType = PropTypes.oneOfType([choiceTypeAnswerSummaryPropType, onlyAggregatePropType, matchingTypeAnswerSummaryPropType, richFillBlankTypeAnswerSummaryPropType]);
91
+ var withinARangeTypeObject = PropTypes.shape({
92
+ end: PropTypes.string.isRequired,
93
+ start: PropTypes.string.isRequired,
94
+ choices: PropTypes.arrayOf(choiceTypeObject).isRequired,
95
+ type: PropTypes.string.isRequired
96
+ });
97
+ var marginOfErrorTypeObject = PropTypes.shape({
98
+ margin: PropTypes.string.isRequired,
99
+ margin_type: PropTypes.string.isRequired,
100
+ value: PropTypes.string.isRequired,
101
+ type: PropTypes.string.isRequired,
102
+ choices: PropTypes.arrayOf(choiceTypeObject).isRequired
103
+ });
104
+ var exactResponseTypeObject = PropTypes.shape({
105
+ value: PropTypes.string.isRequired,
106
+ type: PropTypes.string.isRequired,
107
+ choices: PropTypes.arrayOf(choiceTypeObject).isRequired
108
+ });
109
+ var preciseResponseTypeObject = PropTypes.shape({
110
+ value: PropTypes.string.isRequired,
111
+ precision: PropTypes.string.isRequired,
112
+ precision_type: PropTypes.string.isRequired,
113
+ type: PropTypes.string.isRequired,
114
+ choices: PropTypes.arrayOf(choiceTypeObject).isRequired
115
+ });
116
+ var uncategorizedTypeObject = PropTypes.shape({
117
+ type: PropTypes.string.isRequired,
118
+ choices: PropTypes.arrayOf(choiceTypeObject).isRequired
119
+ });
120
+ var numericRequirementTypeObject = PropTypes.oneOfType([withinARangeTypeObject, marginOfErrorTypeObject, exactResponseTypeObject, preciseResponseTypeObject, uncategorizedTypeObject]);
121
+ export var numericTypeAnswerSummaryPropType = PropTypes.shape({
122
+ requirement: PropTypes.shape({
123
+ correct_answers: PropTypes.arrayOf(numericRequirementTypeObject).isRequired,
124
+ incorrect_answer_choices: PropTypes.arrayOf(choiceTypeObject).isRequired
125
+ })
126
+ });
127
+ export var answerSummaryPropType = PropTypes.oneOfType([choiceTypeAnswerSummaryPropType, onlyAggregatePropType, matchingTypeAnswerSummaryPropType, richFillBlankTypeAnswerSummaryPropType, scoreDistributionTypeAnswerSummaryPropType]);
81
128
  export var itemAnalysisPropType = PropTypes.shape({
82
129
  attempts: PropTypes.shape({
83
130
  students_responded: PropTypes.number,
@@ -109,5 +156,8 @@ export var afsFlags = PropTypes.shape({
109
156
  trueFalseEnabled: PropTypes.bool.isRequired,
110
157
  choiceEnabled: PropTypes.bool.isRequired,
111
158
  multiAnswerEnabled: PropTypes.bool.isRequired,
112
- fillInTheBlankEnabled: PropTypes.bool.isRequired
159
+ fillInTheBlankEnabled: PropTypes.bool.isRequired,
160
+ numericEnabled: PropTypes.bool.isRequired,
161
+ essayEnabled: PropTypes.bool.isRequired,
162
+ fileUploadEnabled: PropTypes.bool.isRequired
113
163
  });