@instructure/quiz-core 18.5.1-rc.4 → 18.5.1-rc.7
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.
- package/es/common/util/Fetcher.js +15 -3
- package/es/reporting/api/getAnalysesExport.js +1 -0
- package/es/reporting/components/resources/NewQuizAndItemAnalysis/AnswerFrequencySummary/AggregationType/presenter.js +19 -6
- package/es/reporting/components/resources/NewQuizAndItemAnalysis/AnswerFrequencySummary/ChoiceType/presenter.js +9 -5
- package/es/reporting/components/resources/NewQuizAndItemAnalysis/AnswerFrequencySummary/MatchingType/MatchingType.js +67 -0
- package/es/reporting/components/resources/NewQuizAndItemAnalysis/AnswerFrequencySummary/MatchingType/MatchingTypeTable/index.js +1 -0
- package/es/reporting/components/resources/NewQuizAndItemAnalysis/AnswerFrequencySummary/MatchingType/MatchingTypeTable/presenter.js +180 -0
- package/es/reporting/components/resources/NewQuizAndItemAnalysis/AnswerFrequencySummary/MatchingType/MatchingTypeTable/theme.js +7 -0
- package/es/reporting/components/resources/NewQuizAndItemAnalysis/AnswerFrequencySummary/MatchingType/index.js +1 -0
- package/es/reporting/components/resources/NewQuizAndItemAnalysis/AnswerFrequencySummary/MatchingType/utils/matchingTypeOrderer.js +42 -0
- package/es/reporting/components/resources/NewQuizAndItemAnalysis/AnswerFrequencySummary/presenter.js +5 -0
- package/es/reporting/components/resources/NewQuizAndItemAnalysis/AnswerFrequencySummary/shared/AfsTableWrapper/presenter.js +9 -6
- package/es/reporting/components/resources/NewQuizAndItemAnalysis/AnswerFrequencySummary/shared/AggregationTable/presenter.js +19 -19
- package/es/reporting/components/resources/NewQuizAndItemAnalysis/NewItemAnalysis/presenter.js +1 -3
- package/es/reporting/components/resources/NewQuizAndItemAnalysis/propTypes.js +12 -1
- package/lib/common/util/Fetcher.js +15 -2
- package/lib/reporting/api/getAnalysesExport.js +1 -0
- package/lib/reporting/components/resources/NewQuizAndItemAnalysis/AnswerFrequencySummary/AggregationType/presenter.js +23 -10
- package/lib/reporting/components/resources/NewQuizAndItemAnalysis/AnswerFrequencySummary/ChoiceType/presenter.js +10 -5
- package/lib/reporting/components/resources/NewQuizAndItemAnalysis/AnswerFrequencySummary/MatchingType/MatchingType.js +93 -0
- package/lib/reporting/components/resources/NewQuizAndItemAnalysis/AnswerFrequencySummary/MatchingType/MatchingTypeTable/index.js +13 -0
- package/lib/reporting/components/resources/NewQuizAndItemAnalysis/AnswerFrequencySummary/MatchingType/MatchingTypeTable/presenter.js +205 -0
- package/lib/reporting/components/resources/NewQuizAndItemAnalysis/AnswerFrequencySummary/MatchingType/MatchingTypeTable/theme.js +14 -0
- package/lib/reporting/components/resources/NewQuizAndItemAnalysis/AnswerFrequencySummary/MatchingType/index.js +13 -0
- package/lib/reporting/components/resources/NewQuizAndItemAnalysis/AnswerFrequencySummary/MatchingType/utils/matchingTypeOrderer.js +52 -0
- package/lib/reporting/components/resources/NewQuizAndItemAnalysis/AnswerFrequencySummary/presenter.js +6 -0
- package/lib/reporting/components/resources/NewQuizAndItemAnalysis/AnswerFrequencySummary/shared/AfsTableWrapper/presenter.js +10 -6
- package/lib/reporting/components/resources/NewQuizAndItemAnalysis/AnswerFrequencySummary/shared/AggregationTable/presenter.js +19 -19
- package/lib/reporting/components/resources/NewQuizAndItemAnalysis/NewItemAnalysis/presenter.js +1 -3
- package/lib/reporting/components/resources/NewQuizAndItemAnalysis/propTypes.js +16 -2
- package/package.json +9 -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
|
-
|
|
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",
|
|
@@ -1,12 +1,24 @@
|
|
|
1
1
|
import _classCallCheck from "@babel/runtime/helpers/esm/classCallCheck";
|
|
2
2
|
import _inherits from "@babel/runtime/helpers/esm/inherits";
|
|
3
3
|
import _createSuper from "@babel/runtime/helpers/esm/createSuper";
|
|
4
|
+
|
|
5
|
+
var _dec, _class, _class2, _temp;
|
|
6
|
+
|
|
4
7
|
import React, { Component } from 'react';
|
|
5
8
|
import PropTypes from 'prop-types';
|
|
6
9
|
import AggregationTable from "../shared/AggregationTable/index.js";
|
|
7
10
|
import { onlyAggregatePropType } from "../../propTypes.js";
|
|
8
11
|
import { AfsTableWrapper } from "../shared/AfsTableWrapper/presenter.js";
|
|
9
|
-
|
|
12
|
+
import classNames from 'classnames';
|
|
13
|
+
var styles = {
|
|
14
|
+
componentId: 'JFhmr',
|
|
15
|
+
template: function template(theme) {
|
|
16
|
+
return "\n\n.JFhmr_cVld{max-width:100%;width:calc(25% + 350px)}";
|
|
17
|
+
},
|
|
18
|
+
'answerFrequencySummaryContainer': 'JFhmr_cVld'
|
|
19
|
+
};
|
|
20
|
+
import { themeable } from '@instructure/ui-themeable';
|
|
21
|
+
export var AggregationType = (_dec = themeable({}, styles), _dec(_class = (_temp = _class2 = /*#__PURE__*/function (_Component) {
|
|
10
22
|
_inherits(AggregationType, _Component);
|
|
11
23
|
|
|
12
24
|
var _super = _createSuper(AggregationType);
|
|
@@ -26,18 +38,19 @@ export var AggregationType = /*#__PURE__*/function (_Component) {
|
|
|
26
38
|
var _this$props = _this.props,
|
|
27
39
|
answerSummary = _this$props.answerSummary,
|
|
28
40
|
itemId = _this$props.itemId;
|
|
29
|
-
return /*#__PURE__*/React.createElement(AfsTableWrapper, null, /*#__PURE__*/React.createElement(
|
|
41
|
+
return /*#__PURE__*/React.createElement(AfsTableWrapper, null, /*#__PURE__*/React.createElement("div", {
|
|
42
|
+
className: classNames(styles.answerFrequencySummaryContainer)
|
|
43
|
+
}, /*#__PURE__*/React.createElement(AggregationTable, {
|
|
30
44
|
itemId: itemId,
|
|
31
45
|
answerSummary: answerSummary
|
|
32
|
-
}));
|
|
46
|
+
})));
|
|
33
47
|
};
|
|
34
48
|
|
|
35
49
|
return _this;
|
|
36
50
|
}
|
|
37
51
|
|
|
38
52
|
return AggregationType;
|
|
39
|
-
}(Component)
|
|
40
|
-
AggregationType.propTypes = {
|
|
53
|
+
}(Component), _class2.propTypes = {
|
|
41
54
|
itemId: PropTypes.number.isRequired,
|
|
42
55
|
answerSummary: onlyAggregatePropType
|
|
43
|
-
}.isRequired;
|
|
56
|
+
}.isRequired, _temp)) || _class);
|
|
@@ -14,14 +14,16 @@ import PropTypes from 'prop-types';
|
|
|
14
14
|
import ChoiceTypeTableRow from "./ChoiceTypeTableRow/index.js";
|
|
15
15
|
import { choiceTypeAnswerSummaryPropType } from "../../propTypes.js";
|
|
16
16
|
var styles = {
|
|
17
|
-
componentId: '
|
|
17
|
+
componentId: 'cEPQa',
|
|
18
18
|
template: function template(theme) {
|
|
19
|
-
return "\n\n.
|
|
19
|
+
return "\n\n.cEPQa_rMrG{display:flex;flex-basis:100%;flex-direction:column;padding-bottom:".concat(theme.tableBottomPadding || 'inherit', "}\n\n.cEPQa_cVld{max-width:100%;width:calc(25% + 350px)}");
|
|
20
20
|
},
|
|
21
|
-
'tableWrapper': '
|
|
21
|
+
'tableWrapper': 'cEPQa_rMrG',
|
|
22
|
+
'answerFrequencySummaryContainer': 'cEPQa_cVld'
|
|
22
23
|
};
|
|
23
24
|
import theme from "./theme.js";
|
|
24
25
|
import AfsTableWrapper from "../shared/AfsTableWrapper/index.js";
|
|
26
|
+
import classNames from 'classnames';
|
|
25
27
|
export var ChoiceType = (_dec = themeable(theme, styles), _dec(_class = (_temp = _class2 = /*#__PURE__*/function (_Component) {
|
|
26
28
|
_inherits(ChoiceType, _Component);
|
|
27
29
|
|
|
@@ -76,7 +78,9 @@ export var ChoiceType = (_dec = themeable(theme, styles), _dec(_class = (_temp =
|
|
|
76
78
|
var answerHeaderId = "answer-frequency-summary-answer-".concat(itemId);
|
|
77
79
|
var respondentsHeaderId = "answer-frequency-summary-respondents-".concat(itemId);
|
|
78
80
|
var percentageHeaderId = "answer-frequency-summary-percentage-".concat(itemId);
|
|
79
|
-
return /*#__PURE__*/React.createElement(AfsTableWrapper, null, /*#__PURE__*/React.createElement(
|
|
81
|
+
return /*#__PURE__*/React.createElement(AfsTableWrapper, null, /*#__PURE__*/React.createElement("div", {
|
|
82
|
+
className: classNames(styles.answerFrequencySummaryContainer)
|
|
83
|
+
}, /*#__PURE__*/React.createElement(Table, {
|
|
80
84
|
caption: t('Answer Frequency Summary')
|
|
81
85
|
}, /*#__PURE__*/React.createElement(Table.Head, null, /*#__PURE__*/React.createElement(Table.Row, null, /*#__PURE__*/React.createElement(Table.ColHeader, {
|
|
82
86
|
id: spacingHeaderId,
|
|
@@ -91,7 +95,7 @@ export var ChoiceType = (_dec = themeable(theme, styles), _dec(_class = (_temp =
|
|
|
91
95
|
id: percentageHeaderId,
|
|
92
96
|
height: "47px",
|
|
93
97
|
textAlign: "center"
|
|
94
|
-
}, 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)))));
|
|
95
99
|
}
|
|
96
100
|
}]);
|
|
97
101
|
|
|
@@ -0,0 +1,67 @@
|
|
|
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 AfsTableWrapper from "../shared/AfsTableWrapper/index.js";
|
|
10
|
+
import MatchingTypeTable from "./MatchingTypeTable/index.js";
|
|
11
|
+
import PropTypes from 'prop-types';
|
|
12
|
+
import { matchingTypeAnswerSummaryPropType } from "../../propTypes.js";
|
|
13
|
+
import MatchingTypeOrderer from "./utils/matchingTypeOrderer.js";
|
|
14
|
+
import classNames from 'classnames';
|
|
15
|
+
var styles = {
|
|
16
|
+
componentId: 'JFhmr',
|
|
17
|
+
template: function template(theme) {
|
|
18
|
+
return "\n\n.JFhmr_cVld{max-width:100%;width:calc(25% + 350px)}";
|
|
19
|
+
},
|
|
20
|
+
'answerFrequencySummaryContainer': 'JFhmr_cVld'
|
|
21
|
+
};
|
|
22
|
+
import { themeable } from '@instructure/ui-themeable';
|
|
23
|
+
export var MatchingType = (_dec = themeable({}, styles), _dec(_class = (_temp = _class2 = /*#__PURE__*/function (_Component) {
|
|
24
|
+
_inherits(MatchingType, _Component);
|
|
25
|
+
|
|
26
|
+
var _super = _createSuper(MatchingType);
|
|
27
|
+
|
|
28
|
+
function MatchingType() {
|
|
29
|
+
var _this;
|
|
30
|
+
|
|
31
|
+
_classCallCheck(this, MatchingType);
|
|
32
|
+
|
|
33
|
+
for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
|
|
34
|
+
args[_key] = arguments[_key];
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
_this = _super.call.apply(_super, [this].concat(args));
|
|
38
|
+
|
|
39
|
+
_this.render = function () {
|
|
40
|
+
var _this$props = _this.props,
|
|
41
|
+
itemId = _this$props.itemId,
|
|
42
|
+
answerSummary = _this$props.answerSummary;
|
|
43
|
+
var questions = answerSummary.questions;
|
|
44
|
+
var questionKeys = Object.keys(questions);
|
|
45
|
+
var exampleAnswers = questions[questionKeys[0]].answers;
|
|
46
|
+
var answerKeys = Object.keys(exampleAnswers);
|
|
47
|
+
var orderedAnswerKeys = MatchingTypeOrderer.orderAnswerKeysForDiagonal(answerSummary, answerKeys);
|
|
48
|
+
var orderedQuestionKeys = MatchingTypeOrderer.orderQuestionKeysForDiagonal(answerSummary, questionKeys, orderedAnswerKeys);
|
|
49
|
+
var containerHalfWidth = orderedAnswerKeys.length <= 3;
|
|
50
|
+
return /*#__PURE__*/React.createElement(AfsTableWrapper, null, /*#__PURE__*/React.createElement("div", {
|
|
51
|
+
className: classNames(_defineProperty({}, styles.answerFrequencySummaryContainer, containerHalfWidth))
|
|
52
|
+
}, /*#__PURE__*/React.createElement(MatchingTypeTable, {
|
|
53
|
+
itemId: itemId,
|
|
54
|
+
answerSummary: answerSummary,
|
|
55
|
+
orderedAnswerKeys: orderedAnswerKeys,
|
|
56
|
+
orderedQuestionKeys: orderedQuestionKeys
|
|
57
|
+
})));
|
|
58
|
+
};
|
|
59
|
+
|
|
60
|
+
return _this;
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
return MatchingType;
|
|
64
|
+
}(Component), _class2.propTypes = {
|
|
65
|
+
itemId: PropTypes.number,
|
|
66
|
+
answerSummary: matchingTypeAnswerSummaryPropType
|
|
67
|
+
}.isRequired, _temp)) || _class);
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { MatchingTypeTable as default } from "./presenter.js";
|
|
@@ -0,0 +1,180 @@
|
|
|
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
|
+
|
|
31
|
+
var _ref = /*#__PURE__*/React.createElement(IconCheckSolid, null);
|
|
32
|
+
|
|
33
|
+
var _ref2 = /*#__PURE__*/React.createElement(Flex.Item, {
|
|
34
|
+
width: "46px",
|
|
35
|
+
textAlign: "center"
|
|
36
|
+
});
|
|
37
|
+
|
|
38
|
+
export var MatchingTypeTable = (_dec = themeable(theme, styles), _dec(_class = (_temp = _class2 = /*#__PURE__*/function (_Component) {
|
|
39
|
+
_inherits(MatchingTypeTable, _Component);
|
|
40
|
+
|
|
41
|
+
var _super = _createSuper(MatchingTypeTable);
|
|
42
|
+
|
|
43
|
+
function MatchingTypeTable() {
|
|
44
|
+
var _this;
|
|
45
|
+
|
|
46
|
+
_classCallCheck(this, MatchingTypeTable);
|
|
47
|
+
|
|
48
|
+
for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
|
|
49
|
+
args[_key] = arguments[_key];
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
_this = _super.call.apply(_super, [this].concat(args));
|
|
53
|
+
|
|
54
|
+
_this.renderIcon = function () {
|
|
55
|
+
var classes = classNames(styles.iconWrapper, styles.iconCorrect);
|
|
56
|
+
return /*#__PURE__*/React.createElement("div", {
|
|
57
|
+
className: classes
|
|
58
|
+
}, _ref);
|
|
59
|
+
};
|
|
60
|
+
|
|
61
|
+
_this.renderHeaderCell = function (key) {
|
|
62
|
+
var _this$props = _this.props,
|
|
63
|
+
answerSummary = _this$props.answerSummary,
|
|
64
|
+
itemId = _this$props.itemId;
|
|
65
|
+
var questions = answerSummary.questions;
|
|
66
|
+
var questionKeys = Object.keys(questions);
|
|
67
|
+
var exampleAnswers = questions[questionKeys[0]].answers;
|
|
68
|
+
var answer = exampleAnswers[key];
|
|
69
|
+
var answerNumberHeaderId = "answer-number-header-".concat(key, "-").concat(itemId);
|
|
70
|
+
return /*#__PURE__*/React.createElement(Table.ColHeader, {
|
|
71
|
+
id: answerNumberHeaderId,
|
|
72
|
+
key: answerNumberHeaderId,
|
|
73
|
+
theme: {
|
|
74
|
+
padding: '0 0 15px 0'
|
|
75
|
+
},
|
|
76
|
+
textAlign: "center"
|
|
77
|
+
}, /*#__PURE__*/React.createElement(Flex, {
|
|
78
|
+
direction: "row"
|
|
79
|
+
}, _ref2, /*#__PURE__*/React.createElement(Flex.Item, {
|
|
80
|
+
shouldShrink: true,
|
|
81
|
+
shouldGrow: true,
|
|
82
|
+
textAlign: "center"
|
|
83
|
+
}, answer.body)));
|
|
84
|
+
};
|
|
85
|
+
|
|
86
|
+
_this.renderCell = function (questionKey, answerKey) {
|
|
87
|
+
var _classNames;
|
|
88
|
+
|
|
89
|
+
var _this$props2 = _this.props,
|
|
90
|
+
answerSummary = _this$props2.answerSummary,
|
|
91
|
+
itemId = _this$props2.itemId;
|
|
92
|
+
var questions = answerSummary.questions;
|
|
93
|
+
var question = questions[questionKey];
|
|
94
|
+
var answer = question.answers[answerKey];
|
|
95
|
+
var correct = answer.correct,
|
|
96
|
+
count = answer.count;
|
|
97
|
+
var answerNumberCellId = "answer-number-cell-".concat(questionKey, "-").concat(answerKey, "-").concat(itemId);
|
|
98
|
+
var containerClassNames = classNames((_classNames = {}, _defineProperty(_classNames, styles.correctRowBorder, answer.correct), _defineProperty(_classNames, styles.correctRowBorderRadius, answer.correct), _classNames));
|
|
99
|
+
return /*#__PURE__*/React.createElement(Table.Cell, {
|
|
100
|
+
id: answerNumberCellId,
|
|
101
|
+
key: answerNumberCellId,
|
|
102
|
+
theme: {
|
|
103
|
+
padding: '0 0 0 0'
|
|
104
|
+
}
|
|
105
|
+
}, /*#__PURE__*/React.createElement("div", {
|
|
106
|
+
className: containerClassNames
|
|
107
|
+
}, /*#__PURE__*/React.createElement(Flex, {
|
|
108
|
+
direction: "row"
|
|
109
|
+
}, /*#__PURE__*/React.createElement(Flex.Item, {
|
|
110
|
+
width: "46px",
|
|
111
|
+
textAlign: "center"
|
|
112
|
+
}, correct && _this.renderIcon()), /*#__PURE__*/React.createElement(Flex.Item, {
|
|
113
|
+
shouldShrink: true,
|
|
114
|
+
shouldGrow: true,
|
|
115
|
+
width: "46px",
|
|
116
|
+
textAlign: "center"
|
|
117
|
+
}, count))));
|
|
118
|
+
};
|
|
119
|
+
|
|
120
|
+
_this.renderHeaderRow = function (orderedAnswerKeys) {
|
|
121
|
+
var itemId = _this.props.itemId;
|
|
122
|
+
var headerCells = orderedAnswerKeys.map(_this.renderHeaderCell);
|
|
123
|
+
var categoryHeaderId = "category-header-".concat(itemId);
|
|
124
|
+
var rowKey = "header-row-".concat(itemId);
|
|
125
|
+
return /*#__PURE__*/React.createElement(Table.Row, {
|
|
126
|
+
key: rowKey
|
|
127
|
+
}, /*#__PURE__*/React.createElement(Table.ColHeader, {
|
|
128
|
+
id: categoryHeaderId,
|
|
129
|
+
key: categoryHeaderId,
|
|
130
|
+
theme: {
|
|
131
|
+
padding: '0 0 15px 0'
|
|
132
|
+
},
|
|
133
|
+
textAlign: "start",
|
|
134
|
+
width: "250px"
|
|
135
|
+
}, t('Question')), headerCells);
|
|
136
|
+
};
|
|
137
|
+
|
|
138
|
+
_this.renderRow = function (orderedQuestionKey, orderedAnswerKeys) {
|
|
139
|
+
var _this$props3 = _this.props,
|
|
140
|
+
answerSummary = _this$props3.answerSummary,
|
|
141
|
+
itemId = _this$props3.itemId;
|
|
142
|
+
var questions = answerSummary.questions;
|
|
143
|
+
var question = questions[orderedQuestionKey];
|
|
144
|
+
var answerCells = orderedAnswerKeys.map(function (answerKey) {
|
|
145
|
+
return _this.renderCell(orderedQuestionKey, answerKey);
|
|
146
|
+
});
|
|
147
|
+
var questionRowHeaderId = "question-row-header-id-".concat(orderedQuestionKey, "-").concat(itemId);
|
|
148
|
+
var rowKey = "row-".concat(orderedQuestionKey, "-").concat(itemId);
|
|
149
|
+
return /*#__PURE__*/React.createElement(Table.Row, {
|
|
150
|
+
key: rowKey
|
|
151
|
+
}, /*#__PURE__*/React.createElement(Table.Cell, {
|
|
152
|
+
id: questionRowHeaderId,
|
|
153
|
+
key: questionRowHeaderId,
|
|
154
|
+
theme: {
|
|
155
|
+
padding: '0 0 1px 0'
|
|
156
|
+
}
|
|
157
|
+
}, question.body), answerCells);
|
|
158
|
+
};
|
|
159
|
+
|
|
160
|
+
_this.render = function () {
|
|
161
|
+
var _this$props4 = _this.props,
|
|
162
|
+
orderedAnswerKeys = _this$props4.orderedAnswerKeys,
|
|
163
|
+
orderedQuestionKeys = _this$props4.orderedQuestionKeys;
|
|
164
|
+
return /*#__PURE__*/React.createElement(Table, {
|
|
165
|
+
caption: t('Answer Frequency Summary')
|
|
166
|
+
}, /*#__PURE__*/React.createElement(Table.Head, null, _this.renderHeaderRow(orderedAnswerKeys)), /*#__PURE__*/React.createElement(Table.Body, null, orderedQuestionKeys.map(function (orderedQuestionKey) {
|
|
167
|
+
return _this.renderRow(orderedQuestionKey, orderedAnswerKeys);
|
|
168
|
+
})));
|
|
169
|
+
};
|
|
170
|
+
|
|
171
|
+
return _this;
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
return MatchingTypeTable;
|
|
175
|
+
}(Component), _class2.propTypes = {
|
|
176
|
+
itemId: PropTypes.number,
|
|
177
|
+
answerSummary: matchingTypeAnswerSummaryPropType,
|
|
178
|
+
orderedAnswerKeys: PropTypes.array.isRequired,
|
|
179
|
+
orderedQuestionKeys: PropTypes.array.isRequired
|
|
180
|
+
}.isRequired, _temp)) || _class);
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { MatchingType } from "./MatchingType.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();
|
package/es/reporting/components/resources/NewQuizAndItemAnalysis/AnswerFrequencySummary/presenter.js
CHANGED
|
@@ -5,6 +5,7 @@ import React, { Component } from 'react';
|
|
|
5
5
|
import { PropTypes } from '@instructure/quiz-interactions';
|
|
6
6
|
import ChoiceType from "./ChoiceType/index.js";
|
|
7
7
|
import AggregationType from "./AggregationType/index.js";
|
|
8
|
+
import { MatchingType } from "./MatchingType/index.js";
|
|
8
9
|
import { answerSummaryPropType } from "../propTypes.js";
|
|
9
10
|
export var AnswerFrequencySummary = /*#__PURE__*/function (_Component) {
|
|
10
11
|
_inherits(AnswerFrequencySummary, _Component);
|
|
@@ -31,6 +32,10 @@ export var AnswerFrequencySummary = /*#__PURE__*/function (_Component) {
|
|
|
31
32
|
if (afsFlags.hotSpotEnabled) {
|
|
32
33
|
_this.afsTableComponentMap.set('hot-spot', AggregationType);
|
|
33
34
|
}
|
|
35
|
+
|
|
36
|
+
if (afsFlags.matchingEnabled) {
|
|
37
|
+
_this.afsTableComponentMap.set('matching', MatchingType);
|
|
38
|
+
}
|
|
34
39
|
};
|
|
35
40
|
|
|
36
41
|
_this.render = function () {
|
|
@@ -2,7 +2,7 @@ import _classCallCheck from "@babel/runtime/helpers/esm/classCallCheck";
|
|
|
2
2
|
import _inherits from "@babel/runtime/helpers/esm/inherits";
|
|
3
3
|
import _createSuper from "@babel/runtime/helpers/esm/createSuper";
|
|
4
4
|
|
|
5
|
-
var _dec, _class, _temp;
|
|
5
|
+
var _dec, _class, _class2, _temp;
|
|
6
6
|
|
|
7
7
|
import React, { Component } from 'react';
|
|
8
8
|
import t from '@instructure/quiz-i18n/es/format-message';
|
|
@@ -17,7 +17,8 @@ var styles = {
|
|
|
17
17
|
import { themeable } from '@instructure/ui-themeable';
|
|
18
18
|
import { Flex } from '@instructure/ui-flex';
|
|
19
19
|
import { Heading } from '@instructure/ui-heading';
|
|
20
|
-
|
|
20
|
+
import PropTypes from 'prop-types';
|
|
21
|
+
export var AfsTableWrapper = (_dec = themeable(theme, styles), _dec(_class = (_temp = _class2 = /*#__PURE__*/function (_Component) {
|
|
21
22
|
_inherits(AfsTableWrapper, _Component);
|
|
22
23
|
|
|
23
24
|
var _super = _createSuper(AfsTableWrapper);
|
|
@@ -34,22 +35,24 @@ export var AfsTableWrapper = (_dec = themeable(theme, styles), _dec(_class = (_t
|
|
|
34
35
|
_this = _super.call.apply(_super, [this].concat(args));
|
|
35
36
|
|
|
36
37
|
_this.render = function () {
|
|
37
|
-
return /*#__PURE__*/React.createElement(
|
|
38
|
+
return /*#__PURE__*/React.createElement(Flex, {
|
|
38
39
|
direction: "row"
|
|
39
40
|
}, /*#__PURE__*/React.createElement(Flex.Item, {
|
|
40
41
|
shouldGrow: true
|
|
41
42
|
}, /*#__PURE__*/React.createElement("div", {
|
|
42
43
|
className: styles.tableWrapper
|
|
43
44
|
}, /*#__PURE__*/React.createElement(Heading, {
|
|
44
|
-
margin: "
|
|
45
|
+
margin: "x-large x-large x-large 0",
|
|
45
46
|
level: "h3",
|
|
46
47
|
weight: "bold",
|
|
47
48
|
color: "primary"
|
|
48
|
-
}, t('Answer Frequency Summary')), _this.props.children)))
|
|
49
|
+
}, t('Answer Frequency Summary')), _this.props.children)));
|
|
49
50
|
};
|
|
50
51
|
|
|
51
52
|
return _this;
|
|
52
53
|
}
|
|
53
54
|
|
|
54
55
|
return AfsTableWrapper;
|
|
55
|
-
}(Component),
|
|
56
|
+
}(Component), _class2.propTypes = {
|
|
57
|
+
children: PropTypes.node.isRequired
|
|
58
|
+
}, _temp)) || _class);
|
|
@@ -14,27 +14,27 @@ import { IconCheckSolid, IconXSolid, IconNoSolid, IconOvalHalfSolid } from '@ins
|
|
|
14
14
|
import { themeable } from '@instructure/ui-themeable';
|
|
15
15
|
import theme from "./theme.js";
|
|
16
16
|
var styles = {
|
|
17
|
-
componentId: '
|
|
17
|
+
componentId: 'fuOpc',
|
|
18
18
|
template: function template(theme) {
|
|
19
|
-
return "\n\n.
|
|
19
|
+
return "\n\n.fuOpc_cvRx{align-items:center;display:flex;height:48px;justify-content:center;width:46px}\n\n.fuOpc_fPIL table{border-collapse:separate;border-spacing:0 12px}\n\n.fuOpc_fPIL thead th{border-color:".concat(theme.colorHeaderBottomBorder || 'inherit', ";border-style:solid;border-width:0 0 1px 0}\n\n.fuOpc_euQM{padding-left:10px}\n\n.fuOpc_fuuc{padding-left:45px}\n\n.fuOpc_bTFA{border-color:").concat(theme.colorGreen || 'inherit', "}\n\n.fuOpc_bvau{background-color:").concat(theme.colorGreen || 'inherit', "}\n\n.fuOpc_dmcW{border-color:").concat(theme.colorRed || 'inherit', "}\n\n.fuOpc_cxOH{background-color:").concat(theme.colorRed || 'inherit', "}\n\n.fuOpc_xOeH{border-color:").concat(theme.colorBlue || 'inherit', "}\n\n.fuOpc_eRkO{background-color:").concat(theme.colorBlue || 'inherit', "}\n\n.fuOpc_dlLI{border-color:").concat(theme.colorGrey || 'inherit', "}\n\n.fuOpc_eKcq{background-color:").concat(theme.colorGrey || 'inherit', "}\n\n.fuOpc_vDgC svg{fill:#fff}\n\n.fuOpc_fHMm{border-color:").concat(theme.colorHeaderBottomBorder || 'inherit', ";border-style:solid;border-width:0 0 1px 0}\n\n.fuOpc_WspM{border-radius:4px 0 0 4px;border-style:solid;border-width:2px 0 2px 2px}\n\n.fuOpc_fAnT{border-width:2px 0 2px 0}\n\n.fuOpc_bMPk,.fuOpc_fAnT{border-style:solid;padding:").concat(theme.cellPadding || 'inherit', "}\n\n.fuOpc_bMPk{border-radius:0 4px 4px 0;border-width:2px 2px 2px 0}");
|
|
20
20
|
},
|
|
21
|
-
'iconWrapper': '
|
|
22
|
-
'collapsingTable': '
|
|
23
|
-
'labelWrapper': '
|
|
24
|
-
'firstHeaderCell': '
|
|
25
|
-
'correctBorder': '
|
|
26
|
-
'correctBackground': '
|
|
27
|
-
'incorrectBorder': '
|
|
28
|
-
'incorrectBackground': '
|
|
29
|
-
'partialCorrectBorder': '
|
|
30
|
-
'partialCorrectBackground': '
|
|
31
|
-
'noAnswerBorder': '
|
|
32
|
-
'noAnswerBackground': '
|
|
33
|
-
'iconWhite': '
|
|
34
|
-
'headerCell': '
|
|
35
|
-
'firstCell': '
|
|
36
|
-
'middleCell': '
|
|
37
|
-
'lastCell': '
|
|
21
|
+
'iconWrapper': 'fuOpc_cvRx',
|
|
22
|
+
'collapsingTable': 'fuOpc_fPIL',
|
|
23
|
+
'labelWrapper': 'fuOpc_euQM',
|
|
24
|
+
'firstHeaderCell': 'fuOpc_fuuc',
|
|
25
|
+
'correctBorder': 'fuOpc_bTFA',
|
|
26
|
+
'correctBackground': 'fuOpc_bvau',
|
|
27
|
+
'incorrectBorder': 'fuOpc_dmcW',
|
|
28
|
+
'incorrectBackground': 'fuOpc_cxOH',
|
|
29
|
+
'partialCorrectBorder': 'fuOpc_xOeH',
|
|
30
|
+
'partialCorrectBackground': 'fuOpc_eRkO',
|
|
31
|
+
'noAnswerBorder': 'fuOpc_dlLI',
|
|
32
|
+
'noAnswerBackground': 'fuOpc_eKcq',
|
|
33
|
+
'iconWhite': 'fuOpc_vDgC',
|
|
34
|
+
'headerCell': 'fuOpc_fHMm',
|
|
35
|
+
'firstCell': 'fuOpc_WspM',
|
|
36
|
+
'middleCell': 'fuOpc_fAnT',
|
|
37
|
+
'lastCell': 'fuOpc_bMPk'
|
|
38
38
|
};
|
|
39
39
|
import { Flex } from '@instructure/ui-flex';
|
|
40
40
|
import classNames from 'classnames';
|
package/es/reporting/components/resources/NewQuizAndItemAnalysis/NewItemAnalysis/presenter.js
CHANGED
|
@@ -195,14 +195,12 @@ export var NewItemAnalysis = (_dec = themeable(theme, styles), _dec(_class = (_t
|
|
|
195
195
|
_this.renderAnswerSummaryTable = function (itemId, answer_summary, metricsClass, interactionType, afsFlags) {
|
|
196
196
|
return /*#__PURE__*/React.createElement(Flex.Item, null, /*#__PURE__*/React.createElement("div", {
|
|
197
197
|
className: metricsClass
|
|
198
|
-
}, /*#__PURE__*/React.createElement("div", {
|
|
199
|
-
className: styles.answerFrequencySummaryContainer
|
|
200
198
|
}, /*#__PURE__*/React.createElement(AnswerFrequencySummary, {
|
|
201
199
|
itemId: itemId,
|
|
202
200
|
answerSummary: answer_summary,
|
|
203
201
|
interactionType: interactionType,
|
|
204
202
|
afsFlags: afsFlags
|
|
205
|
-
})))
|
|
203
|
+
})));
|
|
206
204
|
};
|
|
207
205
|
|
|
208
206
|
return _this;
|
|
@@ -65,7 +65,18 @@ export var choiceTypeAnswerSummaryPropType = PropTypes.shape({
|
|
|
65
65
|
})),
|
|
66
66
|
no_answer: aggregateDetailPropType
|
|
67
67
|
});
|
|
68
|
-
export var
|
|
68
|
+
export var matchingTypeAnswerSummaryPropType = PropTypes.shape({
|
|
69
|
+
questions: PropTypes.objectOf(PropTypes.shape({
|
|
70
|
+
body: PropTypes.string,
|
|
71
|
+
answers: PropTypes.objectOf(PropTypes.shape({
|
|
72
|
+
count: PropTypes.number,
|
|
73
|
+
correct: PropTypes.bool,
|
|
74
|
+
body: PropTypes.string,
|
|
75
|
+
distractor: PropTypes.bool
|
|
76
|
+
}))
|
|
77
|
+
}))
|
|
78
|
+
});
|
|
79
|
+
export var answerSummaryPropType = PropTypes.oneOfType([choiceTypeAnswerSummaryPropType, onlyAggregatePropType, matchingTypeAnswerSummaryPropType]);
|
|
69
80
|
export var afsFlags = PropTypes.shape({
|
|
70
81
|
formulaEnabled: PropTypes.bool.isRequired,
|
|
71
82
|
matchingEnabled: PropTypes.bool.isRequired
|