@pie-element/graphing 8.3.4-next.0 → 9.0.0-beta.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.
- package/configure/lib/configure.js +305 -405
- package/configure/lib/configure.js.map +1 -1
- package/configure/lib/correct-response.js +396 -513
- package/configure/lib/correct-response.js.map +1 -1
- package/configure/lib/defaults.js +4 -4
- package/configure/lib/defaults.js.map +1 -1
- package/configure/lib/graphing-config.js +312 -359
- package/configure/lib/graphing-config.js.map +1 -1
- package/configure/lib/index.js +130 -189
- package/configure/lib/index.js.map +1 -1
- package/configure/lib/utils.js +43 -88
- package/configure/lib/utils.js.map +1 -1
- package/configure/package.json +11 -8
- package/controller/lib/defaults.js +5 -5
- package/controller/lib/defaults.js.map +1 -1
- package/controller/lib/index.js +180 -267
- package/controller/lib/index.js.map +1 -1
- package/controller/lib/utils.js +301 -311
- package/controller/lib/utils.js.map +1 -1
- package/controller/package.json +5 -5
- package/lib/index.js +48 -96
- package/lib/index.js.map +1 -1
- package/lib/main.js +143 -210
- package/lib/main.js.map +1 -1
- package/lib/utils.js +5 -19
- package/lib/utils.js.map +1 -1
- package/package.json +12 -9
|
@@ -1,601 +1,484 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
3
|
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
-
|
|
5
|
-
var _typeof = require("@babel/runtime/helpers/typeof");
|
|
6
|
-
|
|
7
4
|
Object.defineProperty(exports, "__esModule", {
|
|
8
5
|
value: true
|
|
9
6
|
});
|
|
10
|
-
exports
|
|
11
|
-
|
|
12
|
-
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
|
|
13
|
-
|
|
14
|
-
var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
|
|
15
|
-
|
|
16
|
-
var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
|
|
17
|
-
|
|
18
|
-
var _assertThisInitialized2 = _interopRequireDefault(require("@babel/runtime/helpers/assertThisInitialized"));
|
|
19
|
-
|
|
20
|
-
var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
|
|
21
|
-
|
|
22
|
-
var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn"));
|
|
23
|
-
|
|
24
|
-
var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf"));
|
|
25
|
-
|
|
7
|
+
exports.default = exports.Tools = exports.CorrectResponse = void 0;
|
|
26
8
|
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
27
|
-
|
|
28
|
-
var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
|
|
29
|
-
|
|
9
|
+
var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
|
|
30
10
|
var React = _interopRequireWildcard(require("react"));
|
|
31
|
-
|
|
32
11
|
var _reactDom = _interopRequireDefault(require("react-dom"));
|
|
33
|
-
|
|
34
|
-
var _classnames = _interopRequireDefault(require("classnames"));
|
|
35
|
-
|
|
36
12
|
var _propTypes = _interopRequireDefault(require("prop-types"));
|
|
37
|
-
|
|
38
|
-
var _styles = require("@material-ui/core/styles");
|
|
39
|
-
|
|
13
|
+
var _styles = require("@mui/material/styles");
|
|
40
14
|
var _graphing = require("@pie-lib/graphing");
|
|
41
|
-
|
|
42
15
|
var _configUi = require("@pie-lib/config-ui");
|
|
43
|
-
|
|
44
16
|
var _mathRendering = require("@pie-lib/math-rendering");
|
|
45
|
-
|
|
46
|
-
var _Delete = _interopRequireDefault(require("@material-ui/icons/Delete"));
|
|
47
|
-
|
|
17
|
+
var _Delete = _interopRequireDefault(require("@mui/icons-material/Delete"));
|
|
48
18
|
var _lodash = require("lodash");
|
|
49
|
-
|
|
50
|
-
var
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
toggleToolBarTool = _ref.toggleToolBarTool,
|
|
177
|
-
onDefaultToolChange = _ref.onDefaultToolChange;
|
|
178
|
-
var allTools = availableTools || [];
|
|
179
|
-
var isLabelAvailable = allTools.includes('label');
|
|
180
|
-
var toolbarToolsNoLabel = (toolbarTools || []).filter(function (tool) {
|
|
181
|
-
return tool !== 'label';
|
|
182
|
-
});
|
|
183
|
-
|
|
19
|
+
var _material = require("@mui/material");
|
|
20
|
+
var _Info = _interopRequireDefault(require("@mui/icons-material/Info"));
|
|
21
|
+
function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function (e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (const t in e) "default" !== t && {}.hasOwnProperty.call(e, t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, t)) && (i.get || i.set) ? o(f, t, i) : f[t] = e[t]); return f; })(e, t); }
|
|
22
|
+
// custom grey values close to old v3 accents
|
|
23
|
+
const GREY_A100 = '#D5D5D5';
|
|
24
|
+
const GREY_A200 = '#AAAAAA';
|
|
25
|
+
const GraphingTools = (0, _styles.styled)('div')({
|
|
26
|
+
color: GREY_A200
|
|
27
|
+
});
|
|
28
|
+
const Button = (0, _styles.styled)('div')(({
|
|
29
|
+
theme
|
|
30
|
+
}) => ({
|
|
31
|
+
margin: `${theme.spacing(2.5)} 0`,
|
|
32
|
+
cursor: 'pointer',
|
|
33
|
+
background: theme.palette.grey[200],
|
|
34
|
+
padding: theme.spacing(1.5),
|
|
35
|
+
width: 'fit-content',
|
|
36
|
+
borderRadius: '4px',
|
|
37
|
+
'&:hover': {
|
|
38
|
+
background: GREY_A100
|
|
39
|
+
}
|
|
40
|
+
}));
|
|
41
|
+
const AvailableTools = (0, _styles.styled)('div')(({
|
|
42
|
+
theme
|
|
43
|
+
}) => ({
|
|
44
|
+
marginTop: theme.spacing(1),
|
|
45
|
+
display: 'flex',
|
|
46
|
+
flexWrap: 'wrap'
|
|
47
|
+
}));
|
|
48
|
+
const AvailableTool = (0, _styles.styled)('div')(({
|
|
49
|
+
theme
|
|
50
|
+
}) => ({
|
|
51
|
+
cursor: 'pointer',
|
|
52
|
+
margin: theme.spacing(1),
|
|
53
|
+
padding: theme.spacing(1),
|
|
54
|
+
border: `2px solid ${theme.palette.common.white}`,
|
|
55
|
+
textTransform: 'capitalize',
|
|
56
|
+
'&:hover': {
|
|
57
|
+
color: theme.palette.grey[800]
|
|
58
|
+
}
|
|
59
|
+
}));
|
|
60
|
+
const SelectedTool = (0, _styles.styled)(AvailableTool)({
|
|
61
|
+
background: GREY_A100,
|
|
62
|
+
border: `2px solid ${GREY_A200}`
|
|
63
|
+
});
|
|
64
|
+
const ResponseTitle = (0, _styles.styled)('div')(({
|
|
65
|
+
theme
|
|
66
|
+
}) => ({
|
|
67
|
+
display: 'flex',
|
|
68
|
+
alignItems: 'center',
|
|
69
|
+
marginTop: theme.spacing(2.5)
|
|
70
|
+
}));
|
|
71
|
+
const IconButton = (0, _styles.styled)('div')(({
|
|
72
|
+
theme
|
|
73
|
+
}) => ({
|
|
74
|
+
marginLeft: '6px',
|
|
75
|
+
color: theme.palette.grey[600],
|
|
76
|
+
'&:hover': {
|
|
77
|
+
cursor: 'pointer',
|
|
78
|
+
color: theme.palette.common.black
|
|
79
|
+
}
|
|
80
|
+
}));
|
|
81
|
+
const Name = (0, _styles.styled)('div')(({
|
|
82
|
+
theme
|
|
83
|
+
}) => ({
|
|
84
|
+
marginBottom: theme.spacing(0.5)
|
|
85
|
+
}));
|
|
86
|
+
const StyledTooltip = (0, _styles.styled)(({
|
|
87
|
+
className,
|
|
88
|
+
...props
|
|
89
|
+
}) => /*#__PURE__*/React.createElement(_material.Tooltip, (0, _extends2.default)({}, props, {
|
|
90
|
+
classes: {
|
|
91
|
+
tooltip: className
|
|
92
|
+
}
|
|
93
|
+
})))(({
|
|
94
|
+
theme
|
|
95
|
+
}) => ({
|
|
96
|
+
'& .MuiTooltip-tooltip': {
|
|
97
|
+
fontSize: theme.typography.fontSize - 2,
|
|
98
|
+
whiteSpace: 'pre',
|
|
99
|
+
maxWidth: '500px'
|
|
100
|
+
}
|
|
101
|
+
}));
|
|
102
|
+
const SubtitleText = (0, _styles.styled)(_material.Typography)(({
|
|
103
|
+
theme
|
|
104
|
+
}) => ({
|
|
105
|
+
marginTop: theme.spacing(1.5),
|
|
106
|
+
marginBottom: theme.spacing(1)
|
|
107
|
+
}));
|
|
108
|
+
const ToolsHeader = (0, _styles.styled)('div')({
|
|
109
|
+
display: 'flex',
|
|
110
|
+
alignItems: 'center',
|
|
111
|
+
justifyContent: 'space-between'
|
|
112
|
+
});
|
|
113
|
+
const DefaultTool = (0, _styles.styled)('div')({
|
|
114
|
+
display: 'flex',
|
|
115
|
+
alignItems: 'center',
|
|
116
|
+
width: '300px'
|
|
117
|
+
});
|
|
118
|
+
const DefaultToolSelect = (0, _styles.styled)(_material.Select)(({
|
|
119
|
+
theme
|
|
120
|
+
}) => ({
|
|
121
|
+
marginLeft: theme.spacing(1),
|
|
122
|
+
textTransform: 'uppercase',
|
|
123
|
+
color: theme.palette.grey[800]
|
|
124
|
+
}));
|
|
125
|
+
const StyledMenuItem = (0, _styles.styled)(_material.MenuItem)({
|
|
126
|
+
textTransform: 'uppercase'
|
|
127
|
+
});
|
|
128
|
+
const ErrorMessage = (0, _styles.styled)('div')(({
|
|
129
|
+
theme
|
|
130
|
+
}) => ({
|
|
131
|
+
fontSize: theme.typography.fontSize - 2,
|
|
132
|
+
color: theme.palette.error.main,
|
|
133
|
+
marginTop: theme.spacing(1)
|
|
134
|
+
}));
|
|
135
|
+
const Tools = ({
|
|
136
|
+
availableTools,
|
|
137
|
+
defaultTool,
|
|
138
|
+
hasErrors,
|
|
139
|
+
toolbarTools,
|
|
140
|
+
toggleToolBarTool,
|
|
141
|
+
onDefaultToolChange
|
|
142
|
+
}) => {
|
|
143
|
+
let allTools = availableTools || [];
|
|
144
|
+
const isLabelAvailable = allTools.includes('label');
|
|
145
|
+
const toolbarToolsNoLabel = (toolbarTools || []).filter(tool => tool !== 'label');
|
|
184
146
|
if (isLabelAvailable) {
|
|
185
147
|
// label has to be placed at the end of the list
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
});
|
|
189
|
-
allTools = [].concat((0, _toConsumableArray2["default"])(allToolsNoLabel), ['label']);
|
|
148
|
+
const allToolsNoLabel = allTools.filter(tool => tool !== 'label');
|
|
149
|
+
allTools = [...allToolsNoLabel, 'label'];
|
|
190
150
|
}
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
className: classes.graphingTools
|
|
194
|
-
}, /*#__PURE__*/React.createElement("div", {
|
|
195
|
-
className: classes.toolsHeader
|
|
196
|
-
}, /*#__PURE__*/React.createElement("span", null, "GRAPHING TOOLS"), toolbarToolsNoLabel.length > 0 && /*#__PURE__*/React.createElement("div", {
|
|
197
|
-
className: classes.defaultTool
|
|
198
|
-
}, /*#__PURE__*/React.createElement("span", null, "Default graphing tool:"), /*#__PURE__*/React.createElement(_core.Select, {
|
|
199
|
-
className: classes.defaultToolSelect,
|
|
151
|
+
return /*#__PURE__*/React.createElement(GraphingTools, null, /*#__PURE__*/React.createElement(ToolsHeader, null, /*#__PURE__*/React.createElement("span", null, "GRAPHING TOOLS"), toolbarToolsNoLabel.length > 0 && /*#__PURE__*/React.createElement(DefaultTool, null, /*#__PURE__*/React.createElement("span", null, "Default graphing tool:"), /*#__PURE__*/React.createElement(DefaultToolSelect, {
|
|
152
|
+
variant: "standard",
|
|
200
153
|
onChange: onDefaultToolChange,
|
|
201
154
|
value: defaultTool,
|
|
202
|
-
disableUnderline: true
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
value: tool
|
|
208
|
-
}, tool);
|
|
209
|
-
})))), /*#__PURE__*/React.createElement("div", {
|
|
210
|
-
className: classes.availableTools
|
|
211
|
-
}, allTools.map(function (tool) {
|
|
212
|
-
var selected = toolbarTools.find(function (t) {
|
|
213
|
-
return t === tool;
|
|
214
|
-
});
|
|
215
|
-
return /*#__PURE__*/React.createElement("div", {
|
|
216
|
-
key: tool,
|
|
217
|
-
className: (0, _classnames["default"])(classes.availableTool, selected && classes.selectedTool, hasErrors && tool !== 'label' && classes.error),
|
|
218
|
-
onClick: function onClick() {
|
|
219
|
-
return toggleToolBarTool(tool);
|
|
155
|
+
disableUnderline: true,
|
|
156
|
+
MenuProps: {
|
|
157
|
+
transitionDuration: {
|
|
158
|
+
enter: 225,
|
|
159
|
+
exit: 195
|
|
220
160
|
}
|
|
161
|
+
}
|
|
162
|
+
}, toolbarToolsNoLabel.map((tool, index) => /*#__PURE__*/React.createElement(StyledMenuItem, {
|
|
163
|
+
key: index,
|
|
164
|
+
value: tool
|
|
165
|
+
}, tool))))), /*#__PURE__*/React.createElement(AvailableTools, null, allTools.map(tool => {
|
|
166
|
+
const selected = toolbarTools.find(t => t === tool);
|
|
167
|
+
const ToolComponent = selected ? SelectedTool : AvailableTool;
|
|
168
|
+
return /*#__PURE__*/React.createElement(ToolComponent, {
|
|
169
|
+
key: tool,
|
|
170
|
+
style: {
|
|
171
|
+
...(hasErrors && tool !== 'label' && {
|
|
172
|
+
color: 'red'
|
|
173
|
+
})
|
|
174
|
+
},
|
|
175
|
+
onClick: () => toggleToolBarTool(tool)
|
|
221
176
|
}, tool.toUpperCase());
|
|
222
177
|
})));
|
|
223
178
|
};
|
|
224
|
-
|
|
225
179
|
exports.Tools = Tools;
|
|
226
180
|
Tools.propTypes = {
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
onDefaultToolChange: _propTypes["default"].func
|
|
181
|
+
toolbarTools: _propTypes.default.arrayOf(_propTypes.default.string),
|
|
182
|
+
toggleToolBarTool: _propTypes.default.func,
|
|
183
|
+
availableTools: _propTypes.default.array,
|
|
184
|
+
defaultTool: _propTypes.default.string,
|
|
185
|
+
hasErrors: _propTypes.default.number,
|
|
186
|
+
onDefaultToolChange: _propTypes.default.func
|
|
234
187
|
};
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
var _super = _createSuper(CorrectResponse);
|
|
240
|
-
|
|
241
|
-
function CorrectResponse() {
|
|
242
|
-
var _this;
|
|
243
|
-
|
|
244
|
-
(0, _classCallCheck2["default"])(this, CorrectResponse);
|
|
245
|
-
|
|
246
|
-
for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
|
|
247
|
-
args[_key] = arguments[_key];
|
|
248
|
-
}
|
|
249
|
-
|
|
250
|
-
_this = _super.call.apply(_super, [this].concat(args));
|
|
251
|
-
(0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "state", {
|
|
188
|
+
class CorrectResponse extends React.Component {
|
|
189
|
+
constructor(...args) {
|
|
190
|
+
super(...args);
|
|
191
|
+
(0, _defineProperty2.default)(this, "state", {
|
|
252
192
|
dialog: {
|
|
253
193
|
open: false
|
|
254
194
|
}
|
|
255
195
|
});
|
|
256
|
-
(0, _defineProperty2
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
(0, _lodash.set)(model, "answers.".concat(key, ".marks"), marks);
|
|
196
|
+
(0, _defineProperty2.default)(this, "handleAlertDialog", (open, callback) => this.setState({
|
|
197
|
+
dialog: {
|
|
198
|
+
open
|
|
199
|
+
}
|
|
200
|
+
}, callback));
|
|
201
|
+
(0, _defineProperty2.default)(this, "changeMarks", (key, marks) => {
|
|
202
|
+
const {
|
|
203
|
+
model,
|
|
204
|
+
onChange
|
|
205
|
+
} = this.props;
|
|
206
|
+
(0, _lodash.set)(model, `answers.${key}.marks`, marks);
|
|
268
207
|
onChange(model);
|
|
269
208
|
});
|
|
270
|
-
(0, _defineProperty2
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
object[key] =
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
});
|
|
209
|
+
(0, _defineProperty2.default)(this, "filterMarks", tool => {
|
|
210
|
+
const {
|
|
211
|
+
model: {
|
|
212
|
+
answers
|
|
213
|
+
}
|
|
214
|
+
} = this.props;
|
|
215
|
+
return Object.entries(answers || {}).reduce((object, [key, answer]) => {
|
|
216
|
+
object[key] = {
|
|
217
|
+
...answer,
|
|
218
|
+
marks: (answer.marks || []).filter(mark => mark.type !== tool)
|
|
219
|
+
};
|
|
282
220
|
return object;
|
|
283
221
|
}, {});
|
|
284
222
|
});
|
|
285
|
-
(0, _defineProperty2
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
223
|
+
(0, _defineProperty2.default)(this, "changeToolbarTools", toolbarTools => {
|
|
224
|
+
const {
|
|
225
|
+
model,
|
|
226
|
+
onChange
|
|
227
|
+
} = this.props;
|
|
289
228
|
model.toolbarTools = toolbarTools;
|
|
290
229
|
onChange(model);
|
|
291
230
|
});
|
|
292
|
-
(0, _defineProperty2
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
defaultTool = _this$props$model.defaultTool,
|
|
301
|
-
toolbarTools = _this$props$model.toolbarTools,
|
|
302
|
-
_this$props$model$ans = _this$props$model.answers,
|
|
303
|
-
answers = _this$props$model$ans === void 0 ? {} : _this$props$model$ans;
|
|
304
|
-
var updatedToolbarTools = (0, _toConsumableArray2["default"])(toolbarTools);
|
|
305
|
-
var newDefaultTool = defaultTool;
|
|
306
|
-
var index = toolbarTools.findIndex(function (t) {
|
|
307
|
-
return tool === t;
|
|
231
|
+
(0, _defineProperty2.default)(this, "updateModel", props => {
|
|
232
|
+
const {
|
|
233
|
+
model,
|
|
234
|
+
onChange
|
|
235
|
+
} = this.props;
|
|
236
|
+
onChange({
|
|
237
|
+
...model,
|
|
238
|
+
...props
|
|
308
239
|
});
|
|
309
|
-
|
|
240
|
+
});
|
|
241
|
+
(0, _defineProperty2.default)(this, "toggleToolBarTool", tool => {
|
|
242
|
+
const {
|
|
243
|
+
model: {
|
|
244
|
+
defaultTool,
|
|
245
|
+
toolbarTools,
|
|
246
|
+
answers = {}
|
|
247
|
+
}
|
|
248
|
+
} = this.props;
|
|
249
|
+
const updatedToolbarTools = [...toolbarTools];
|
|
250
|
+
let newDefaultTool = defaultTool;
|
|
251
|
+
const index = toolbarTools.findIndex(t => tool === t);
|
|
310
252
|
if (index >= 0) {
|
|
311
|
-
|
|
312
|
-
|
|
253
|
+
const updatedAnswers = this.filterMarks(tool);
|
|
313
254
|
updatedToolbarTools.splice(index, 1);
|
|
314
|
-
|
|
315
255
|
if (tool === defaultTool) {
|
|
316
|
-
|
|
317
|
-
return tool !== 'label';
|
|
318
|
-
});
|
|
256
|
+
const toolbarToolsNoLabel = (updatedToolbarTools || []).filter(tool => tool !== 'label');
|
|
319
257
|
newDefaultTool = toolbarToolsNoLabel.length && toolbarToolsNoLabel[0] || '';
|
|
320
258
|
}
|
|
321
|
-
|
|
322
259
|
if (!(0, _lodash.isEqual)(answers, updatedAnswers)) {
|
|
323
|
-
|
|
260
|
+
this.setState({
|
|
324
261
|
dialog: {
|
|
325
262
|
open: true,
|
|
326
263
|
title: 'Warning',
|
|
327
|
-
text:
|
|
328
|
-
onConfirm:
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
},
|
|
335
|
-
onClose: function onClose() {
|
|
336
|
-
return _this.handleAlertDialog(false);
|
|
337
|
-
}
|
|
264
|
+
text: `Correct answer includes one or more ${tool} objects and all of them will be deleted.`,
|
|
265
|
+
onConfirm: () => this.handleAlertDialog(false, this.updateModel({
|
|
266
|
+
toolbarTools: updatedToolbarTools,
|
|
267
|
+
answers: updatedAnswers,
|
|
268
|
+
defaultTool: newDefaultTool
|
|
269
|
+
})),
|
|
270
|
+
onClose: () => this.handleAlertDialog(false)
|
|
338
271
|
}
|
|
339
272
|
});
|
|
340
|
-
|
|
341
273
|
return;
|
|
342
274
|
}
|
|
343
275
|
} else {
|
|
344
276
|
updatedToolbarTools.push(tool);
|
|
345
|
-
|
|
346
277
|
if (defaultTool === '' && tool !== 'label') {
|
|
347
278
|
newDefaultTool = tool;
|
|
348
279
|
}
|
|
349
280
|
}
|
|
350
|
-
|
|
351
|
-
_this.updateModel({
|
|
281
|
+
this.updateModel({
|
|
352
282
|
toolbarTools: updatedToolbarTools,
|
|
353
283
|
defaultTool: newDefaultTool
|
|
354
284
|
});
|
|
355
285
|
});
|
|
356
|
-
(0, _defineProperty2
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
286
|
+
(0, _defineProperty2.default)(this, "onDefaultToolChange", event => {
|
|
287
|
+
const {
|
|
288
|
+
value
|
|
289
|
+
} = event.target;
|
|
290
|
+
this.updateModel({
|
|
360
291
|
defaultTool: value
|
|
361
292
|
});
|
|
362
293
|
});
|
|
363
|
-
(0, _defineProperty2
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
(0, _lodash.set)(model,
|
|
373
|
-
name:
|
|
294
|
+
(0, _defineProperty2.default)(this, "addAlternateResponse", () => {
|
|
295
|
+
const {
|
|
296
|
+
model,
|
|
297
|
+
onChange
|
|
298
|
+
} = this.props;
|
|
299
|
+
const {
|
|
300
|
+
answers
|
|
301
|
+
} = model || {};
|
|
302
|
+
const answersKeys = Object.keys(answers || {});
|
|
303
|
+
(0, _lodash.set)(model, `answers.${`alternate${answersKeys.length}`}`, {
|
|
304
|
+
name: `Alternate ${answersKeys.length}`,
|
|
374
305
|
marks: []
|
|
375
306
|
});
|
|
376
307
|
onChange(model);
|
|
377
308
|
});
|
|
378
|
-
(0, _defineProperty2
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
309
|
+
(0, _defineProperty2.default)(this, "deleteAlternateResponse", (answerKey, answer) => {
|
|
310
|
+
const {
|
|
311
|
+
model,
|
|
312
|
+
onChange
|
|
313
|
+
} = this.props;
|
|
314
|
+
const {
|
|
315
|
+
answers
|
|
316
|
+
} = model || {};
|
|
317
|
+
const {
|
|
318
|
+
marks = [],
|
|
319
|
+
name
|
|
320
|
+
} = answer || {};
|
|
321
|
+
const deleteAnswer = () => {
|
|
322
|
+
delete answers[answerKey];
|
|
323
|
+
// rebuild answers based on new alternate positions after deletion
|
|
324
|
+
const newAnswers = Object.entries(answers).reduce((acc, currentValue, index) => {
|
|
325
|
+
const [key, value] = currentValue;
|
|
326
|
+
const newAnswer = key === 'correctAnswer' ? {
|
|
327
|
+
...acc,
|
|
328
|
+
[key]: value
|
|
329
|
+
} : {
|
|
330
|
+
...acc,
|
|
331
|
+
['alternate' + index]: {
|
|
332
|
+
...value,
|
|
333
|
+
name: `Alternate ${index}`
|
|
334
|
+
}
|
|
335
|
+
};
|
|
402
336
|
return newAnswer;
|
|
403
337
|
}, {});
|
|
404
|
-
onChange(
|
|
338
|
+
onChange({
|
|
339
|
+
...model,
|
|
405
340
|
answers: newAnswers
|
|
406
|
-
})
|
|
341
|
+
});
|
|
407
342
|
};
|
|
408
|
-
|
|
409
343
|
if (marks.length) {
|
|
410
|
-
|
|
344
|
+
this.setState({
|
|
411
345
|
dialog: {
|
|
412
346
|
open: true,
|
|
413
347
|
title: 'Warning',
|
|
414
|
-
text:
|
|
415
|
-
onConfirm:
|
|
416
|
-
|
|
417
|
-
},
|
|
418
|
-
onClose: function onClose() {
|
|
419
|
-
return _this.handleAlertDialog(false);
|
|
420
|
-
}
|
|
348
|
+
text: `${name} includes one or more shapes and the entire response will be deleted.`,
|
|
349
|
+
onConfirm: () => this.handleAlertDialog(false, deleteAnswer),
|
|
350
|
+
onClose: () => this.handleAlertDialog(false)
|
|
421
351
|
}
|
|
422
352
|
});
|
|
423
|
-
|
|
424
353
|
return;
|
|
425
354
|
}
|
|
426
|
-
|
|
427
355
|
deleteAnswer();
|
|
428
356
|
});
|
|
429
|
-
return _this;
|
|
430
357
|
}
|
|
431
|
-
|
|
432
|
-
|
|
433
|
-
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
|
|
437
|
-
|
|
438
|
-
|
|
439
|
-
(0, _mathRendering.renderMath)(domNode);
|
|
440
|
-
} catch (e) {
|
|
441
|
-
// Added try-catch block to handle "Unable to find node on an unmounted component" error from tests, thrown because of the usage of shallow
|
|
442
|
-
console.error('DOM not mounted');
|
|
443
|
-
}
|
|
358
|
+
componentDidMount() {
|
|
359
|
+
try {
|
|
360
|
+
// eslint-disable-next-line react/no-find-dom-node
|
|
361
|
+
const domNode = _reactDom.default.findDOMNode(this);
|
|
362
|
+
(0, _mathRendering.renderMath)(domNode);
|
|
363
|
+
} catch (e) {
|
|
364
|
+
// Added try-catch block to handle "Unable to find node on an unmounted component" error from tests, thrown because of the usage of shallow
|
|
365
|
+
console.error('DOM not mounted');
|
|
444
366
|
}
|
|
445
|
-
}
|
|
446
|
-
|
|
447
|
-
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
|
|
466
|
-
|
|
467
|
-
|
|
468
|
-
|
|
469
|
-
|
|
470
|
-
|
|
471
|
-
|
|
472
|
-
|
|
473
|
-
|
|
474
|
-
|
|
475
|
-
|
|
476
|
-
|
|
477
|
-
|
|
478
|
-
|
|
479
|
-
|
|
480
|
-
|
|
481
|
-
|
|
482
|
-
|
|
483
|
-
|
|
484
|
-
|
|
485
|
-
|
|
486
|
-
|
|
487
|
-
|
|
488
|
-
|
|
489
|
-
|
|
490
|
-
|
|
491
|
-
|
|
492
|
-
|
|
493
|
-
|
|
494
|
-
|
|
495
|
-
|
|
496
|
-
|
|
497
|
-
|
|
498
|
-
|
|
499
|
-
|
|
500
|
-
|
|
501
|
-
|
|
502
|
-
|
|
503
|
-
|
|
504
|
-
|
|
505
|
-
|
|
506
|
-
|
|
507
|
-
|
|
508
|
-
|
|
509
|
-
|
|
510
|
-
|
|
511
|
-
|
|
512
|
-
|
|
513
|
-
},
|
|
514
|
-
|
|
515
|
-
|
|
516
|
-
|
|
517
|
-
|
|
518
|
-
|
|
519
|
-
|
|
520
|
-
|
|
521
|
-
|
|
522
|
-
|
|
523
|
-
|
|
524
|
-
|
|
525
|
-
|
|
526
|
-
|
|
527
|
-
|
|
528
|
-
|
|
529
|
-
|
|
530
|
-
|
|
531
|
-
|
|
532
|
-
|
|
533
|
-
|
|
534
|
-
|
|
535
|
-
|
|
536
|
-
|
|
537
|
-
|
|
538
|
-
|
|
539
|
-
|
|
540
|
-
|
|
541
|
-
|
|
542
|
-
|
|
543
|
-
|
|
544
|
-
|
|
545
|
-
|
|
546
|
-
|
|
547
|
-
|
|
548
|
-
|
|
549
|
-
|
|
550
|
-
|
|
551
|
-
|
|
552
|
-
|
|
553
|
-
range: range,
|
|
554
|
-
showLabels: labelsEnabled,
|
|
555
|
-
showTitle: titleEnabled,
|
|
556
|
-
size: {
|
|
557
|
-
width: graph.width,
|
|
558
|
-
height: graph.height
|
|
559
|
-
},
|
|
560
|
-
title: title,
|
|
561
|
-
toolbarTools: toolbarTools,
|
|
562
|
-
onChangeTools: function onChangeTools(toolbarTools) {
|
|
563
|
-
return _this2.updateModel({
|
|
564
|
-
toolbarTools: toolbarTools
|
|
565
|
-
});
|
|
566
|
-
},
|
|
567
|
-
mathMlOptions: mathMlOptions,
|
|
568
|
-
removeIncompleteTool: removeIncompleteTool,
|
|
569
|
-
limitLabeling: true
|
|
570
|
-
}), correctAnswerErrors[key] && /*#__PURE__*/React.createElement("div", {
|
|
571
|
-
className: classes.errorMessage
|
|
572
|
-
}, correctAnswerErrors[key]));
|
|
573
|
-
}), /*#__PURE__*/React.createElement("div", {
|
|
574
|
-
className: classes.button,
|
|
575
|
-
onClick: this.addAlternateResponse
|
|
576
|
-
}, "ADD ALTERNATE"), /*#__PURE__*/React.createElement(_configUi.AlertDialog, {
|
|
577
|
-
open: dialog.open,
|
|
578
|
-
title: dialog.title,
|
|
579
|
-
text: dialog.text,
|
|
580
|
-
onClose: dialog.onClose,
|
|
581
|
-
onConfirm: dialog.onConfirm
|
|
582
|
-
}));
|
|
583
|
-
}
|
|
584
|
-
}]);
|
|
585
|
-
return CorrectResponse;
|
|
586
|
-
}(React.Component);
|
|
587
|
-
|
|
367
|
+
}
|
|
368
|
+
render() {
|
|
369
|
+
const {
|
|
370
|
+
availableTools,
|
|
371
|
+
errors,
|
|
372
|
+
model,
|
|
373
|
+
mathMlOptions = {},
|
|
374
|
+
removeIncompleteTool
|
|
375
|
+
} = this.props;
|
|
376
|
+
const {
|
|
377
|
+
dialog
|
|
378
|
+
} = this.state;
|
|
379
|
+
const {
|
|
380
|
+
answers = {},
|
|
381
|
+
arrows,
|
|
382
|
+
backgroundMarks,
|
|
383
|
+
coordinatesOnHover,
|
|
384
|
+
defaultTool,
|
|
385
|
+
domain,
|
|
386
|
+
graph = {},
|
|
387
|
+
labels,
|
|
388
|
+
labelsEnabled,
|
|
389
|
+
range,
|
|
390
|
+
title,
|
|
391
|
+
titleEnabled,
|
|
392
|
+
toolbarTools
|
|
393
|
+
} = model || {};
|
|
394
|
+
const {
|
|
395
|
+
correctAnswerErrors = {},
|
|
396
|
+
toolbarToolsError
|
|
397
|
+
} = errors || {};
|
|
398
|
+
return /*#__PURE__*/React.createElement("div", null, /*#__PURE__*/React.createElement(_material.Typography, {
|
|
399
|
+
component: "div",
|
|
400
|
+
variant: "h6"
|
|
401
|
+
}, "Define Tool Set and Correct Response"), /*#__PURE__*/React.createElement(SubtitleText, {
|
|
402
|
+
component: "div",
|
|
403
|
+
variant: "body1"
|
|
404
|
+
}, "Use this interface to choose which graphing tools students will be able to use, and to define the correct answer"), /*#__PURE__*/React.createElement(Tools, {
|
|
405
|
+
availableTools: availableTools,
|
|
406
|
+
defaultTool: defaultTool,
|
|
407
|
+
hasErrors: !!toolbarToolsError,
|
|
408
|
+
onDefaultToolChange: this.onDefaultToolChange,
|
|
409
|
+
toggleToolBarTool: this.toggleToolBarTool,
|
|
410
|
+
toolbarTools: toolbarTools
|
|
411
|
+
}), toolbarToolsError && /*#__PURE__*/React.createElement(ErrorMessage, null, toolbarToolsError), Object.entries(answers || {}).map(([key, answer]) => {
|
|
412
|
+
const {
|
|
413
|
+
marks = [],
|
|
414
|
+
name
|
|
415
|
+
} = answer || {};
|
|
416
|
+
return /*#__PURE__*/React.createElement(React.Fragment, {
|
|
417
|
+
key: `correct-response-graph-${name}`
|
|
418
|
+
}, /*#__PURE__*/React.createElement(ResponseTitle, null, /*#__PURE__*/React.createElement(Name, null, name), key === 'correctAnswer' && /*#__PURE__*/React.createElement(StyledTooltip, {
|
|
419
|
+
disableFocusListener: true,
|
|
420
|
+
disableTouchListener: true,
|
|
421
|
+
placement: 'right',
|
|
422
|
+
title: 'At least 1 graph object should be defined.'
|
|
423
|
+
}, /*#__PURE__*/React.createElement(_Info.default, {
|
|
424
|
+
fontSize: 'small',
|
|
425
|
+
color: 'primary',
|
|
426
|
+
style: {
|
|
427
|
+
marginLeft: '8px',
|
|
428
|
+
marginBottom: 'auto'
|
|
429
|
+
}
|
|
430
|
+
})), key !== 'correctAnswer' && /*#__PURE__*/React.createElement(IconButton, {
|
|
431
|
+
onClick: () => this.deleteAlternateResponse(key, answer)
|
|
432
|
+
}, /*#__PURE__*/React.createElement(_Delete.default, null))), /*#__PURE__*/React.createElement(_graphing.GraphContainer, {
|
|
433
|
+
style: correctAnswerErrors[key] && {
|
|
434
|
+
border: '2px solid red'
|
|
435
|
+
},
|
|
436
|
+
axesSettings: {
|
|
437
|
+
includeArrows: arrows
|
|
438
|
+
},
|
|
439
|
+
backgroundMarks: backgroundMarks.filter(mark => !mark.building),
|
|
440
|
+
coordinatesOnHover: coordinatesOnHover,
|
|
441
|
+
disabledLabels: true,
|
|
442
|
+
disabledTitle: true,
|
|
443
|
+
domain: domain,
|
|
444
|
+
draggableTools: key === 'correctAnswer',
|
|
445
|
+
labels: labels,
|
|
446
|
+
marks: marks,
|
|
447
|
+
onChangeMarks: newMarks => this.changeMarks(key, newMarks),
|
|
448
|
+
range: range,
|
|
449
|
+
showLabels: labelsEnabled,
|
|
450
|
+
showTitle: titleEnabled,
|
|
451
|
+
size: {
|
|
452
|
+
width: graph.width,
|
|
453
|
+
height: graph.height
|
|
454
|
+
},
|
|
455
|
+
title: title,
|
|
456
|
+
toolbarTools: toolbarTools,
|
|
457
|
+
onChangeTools: toolbarTools => this.updateModel({
|
|
458
|
+
toolbarTools
|
|
459
|
+
}),
|
|
460
|
+
mathMlOptions: mathMlOptions,
|
|
461
|
+
removeIncompleteTool: removeIncompleteTool,
|
|
462
|
+
limitLabeling: true
|
|
463
|
+
}), correctAnswerErrors[key] && /*#__PURE__*/React.createElement(ErrorMessage, null, correctAnswerErrors[key]));
|
|
464
|
+
}), /*#__PURE__*/React.createElement(Button, {
|
|
465
|
+
onClick: this.addAlternateResponse
|
|
466
|
+
}, "ADD ALTERNATE"), /*#__PURE__*/React.createElement(_configUi.AlertDialog, {
|
|
467
|
+
open: dialog.open,
|
|
468
|
+
title: dialog.title,
|
|
469
|
+
text: dialog.text,
|
|
470
|
+
onClose: dialog.onClose,
|
|
471
|
+
onConfirm: dialog.onConfirm
|
|
472
|
+
}));
|
|
473
|
+
}
|
|
474
|
+
}
|
|
588
475
|
exports.CorrectResponse = CorrectResponse;
|
|
589
|
-
(0, _defineProperty2
|
|
590
|
-
availableTools: _propTypes
|
|
591
|
-
|
|
592
|
-
|
|
593
|
-
|
|
594
|
-
|
|
595
|
-
toolbarTools: _propTypes["default"].arrayOf(_propTypes["default"].String)
|
|
476
|
+
(0, _defineProperty2.default)(CorrectResponse, "propTypes", {
|
|
477
|
+
availableTools: _propTypes.default.array,
|
|
478
|
+
errors: _propTypes.default.object,
|
|
479
|
+
model: _propTypes.default.object.isRequired,
|
|
480
|
+
onChange: _propTypes.default.func.isRequired,
|
|
481
|
+
toolbarTools: _propTypes.default.arrayOf(_propTypes.default.String)
|
|
596
482
|
});
|
|
597
|
-
|
|
598
|
-
var _default = (0, _styles.withStyles)(styles)(CorrectResponse);
|
|
599
|
-
|
|
600
|
-
exports["default"] = _default;
|
|
483
|
+
var _default = exports.default = CorrectResponse;
|
|
601
484
|
//# sourceMappingURL=correct-response.js.map
|