@pie-element/graphing-solution-set 6.1.2-next.1 → 6.1.2
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/CHANGELOG.json +1 -0
- package/CHANGELOG.md +856 -0
- package/LICENSE.md +5 -0
- package/README.md +20 -0
- package/configure/CHANGELOG.json +1 -0
- package/configure/CHANGELOG.md +816 -0
- package/configure/lib/configure.js +312 -0
- package/configure/lib/configure.js.map +1 -0
- package/configure/lib/correct-response.js +435 -0
- package/configure/lib/correct-response.js.map +1 -0
- package/configure/lib/defaults.js +357 -0
- package/configure/lib/defaults.js.map +1 -0
- package/configure/lib/graphing-config.js +408 -0
- package/configure/lib/graphing-config.js.map +1 -0
- package/configure/lib/index.js +163 -0
- package/configure/lib/index.js.map +1 -0
- package/configure/lib/utils.js +630 -0
- package/configure/lib/utils.js.map +1 -0
- package/configure/package.json +29 -0
- package/controller/CHANGELOG.json +1 -0
- package/controller/CHANGELOG.md +675 -0
- package/controller/lib/defaults.js +69 -0
- package/controller/lib/defaults.js.map +1 -0
- package/controller/lib/index.js +351 -0
- package/controller/lib/index.js.map +1 -0
- package/controller/lib/utils.js +212 -0
- package/controller/lib/utils.js.map +1 -0
- package/controller/package.json +22 -0
- package/demo-gss.gif +0 -0
- package/docs/config-schema.json +1560 -0
- package/docs/config-schema.json.md +1114 -0
- package/docs/demo/config.js +8 -0
- package/docs/demo/generate.js +54 -0
- package/docs/demo/index.html +1 -0
- package/docs/demo/session.js +6 -0
- package/docs/pie-schema.json +1800 -0
- package/docs/pie-schema.json.md +952 -0
- package/lib/index.js +164 -0
- package/lib/index.js.map +1 -0
- package/lib/main.js +355 -0
- package/lib/main.js.map +1 -0
- package/lib/utils.js +515 -0
- package/lib/utils.js.map +1 -0
- package/package.json +23 -86
- package/configure.js +0 -2
- package/controller.js +0 -1
- package/dist/author/configure.d.ts +0 -26
- package/dist/author/configure.js +0 -190
- package/dist/author/correct-response.d.ts +0 -33
- package/dist/author/correct-response.js +0 -206
- package/dist/author/defaults.d.ts +0 -238
- package/dist/author/defaults.js +0 -339
- package/dist/author/graphing-config.d.ts +0 -33
- package/dist/author/graphing-config.js +0 -237
- package/dist/author/index.d.ts +0 -62
- package/dist/author/index.js +0 -87
- package/dist/author/utils.d.ts +0 -46
- package/dist/author/utils.js +0 -474
- package/dist/browser/author/index.js +0 -1942
- package/dist/browser/author/index.js.map +0 -1
- package/dist/browser/browser-pUycHh7Y.js +0 -348
- package/dist/browser/browser-pUycHh7Y.js.map +0 -1
- package/dist/browser/controller/index.js +0 -193
- package/dist/browser/controller/index.js.map +0 -1
- package/dist/browser/delivery/index.js +0 -782
- package/dist/browser/delivery/index.js.map +0 -1
- package/dist/browser/dist-BxTk7Laj.js +0 -57671
- package/dist/browser/dist-BxTk7Laj.js.map +0 -1
- package/dist/browser/graphing-solution-set.css +0 -2
- package/dist/controller/defaults.d.ts +0 -64
- package/dist/controller/defaults.js +0 -54
- package/dist/controller/index.d.ts +0 -24
- package/dist/controller/index.js +0 -110
- package/dist/controller/utils.d.ts +0 -20
- package/dist/controller/utils.js +0 -39
- package/dist/delivery/index.d.ts +0 -22
- package/dist/delivery/index.js +0 -62
- package/dist/delivery/main.d.ts +0 -31
- package/dist/delivery/main.js +0 -198
- package/dist/delivery/utils.d.ts +0 -12
- package/dist/delivery/utils.js +0 -220
- package/dist/graphing-solution-set.css +0 -2
- package/dist/index.d.ts +0 -1
- package/dist/index.iife.d.ts +0 -8
- package/dist/index.iife.js +0 -405
- package/dist/index.js +0 -2
- package/dist/runtime-support.d.ts +0 -12
- package/dist/runtime-support.js +0 -12
|
@@ -0,0 +1,408 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
Object.defineProperty(exports, "__esModule", {
|
|
5
|
+
value: true
|
|
6
|
+
});
|
|
7
|
+
exports.default = exports.GraphingConfig = void 0;
|
|
8
|
+
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
9
|
+
var React = _interopRequireWildcard(require("react"));
|
|
10
|
+
var _propTypes = _interopRequireDefault(require("prop-types"));
|
|
11
|
+
var _graphingSolutionSet = require("@pie-lib/graphing-solution-set");
|
|
12
|
+
var _configUi = require("@pie-lib/config-ui");
|
|
13
|
+
var _material = require("@mui/material");
|
|
14
|
+
var _styles = require("@mui/material/styles");
|
|
15
|
+
var _utils = require("./utils");
|
|
16
|
+
var _lodashEs = require("lodash-es");
|
|
17
|
+
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); }
|
|
18
|
+
const Container = (0, _styles.styled)('div')(({
|
|
19
|
+
theme
|
|
20
|
+
}) => ({
|
|
21
|
+
display: 'flex',
|
|
22
|
+
flexWrap: 'wrap',
|
|
23
|
+
marginBottom: theme.spacing(2.5)
|
|
24
|
+
}));
|
|
25
|
+
const GridConfigWrapper = (0, _styles.styled)('div')(({
|
|
26
|
+
theme
|
|
27
|
+
}) => ({
|
|
28
|
+
display: 'flex',
|
|
29
|
+
flexDirection: 'column',
|
|
30
|
+
marginRight: theme.spacing(3),
|
|
31
|
+
marginBottom: theme.spacing(2.5)
|
|
32
|
+
}));
|
|
33
|
+
const GraphConfig = (0, _styles.styled)('div')({
|
|
34
|
+
display: 'flex',
|
|
35
|
+
flexDirection: 'column'
|
|
36
|
+
});
|
|
37
|
+
const SubtitleText = (0, _styles.styled)(_material.Typography)(({
|
|
38
|
+
theme
|
|
39
|
+
}) => ({
|
|
40
|
+
marginTop: theme.spacing(1.5),
|
|
41
|
+
marginBottom: theme.spacing(1)
|
|
42
|
+
}));
|
|
43
|
+
const GridConfig = (0, _styles.styled)('div')(({
|
|
44
|
+
theme
|
|
45
|
+
}) => ({
|
|
46
|
+
display: 'flex',
|
|
47
|
+
flexWrap: 'wrap',
|
|
48
|
+
alignItems: 'center',
|
|
49
|
+
width: '100%',
|
|
50
|
+
marginBottom: theme.spacing(2.5)
|
|
51
|
+
}));
|
|
52
|
+
const GridConfigLabel = (0, _styles.styled)(_material.Typography)(({
|
|
53
|
+
theme
|
|
54
|
+
}) => ({
|
|
55
|
+
padding: `0 ${theme.spacing(1)}`
|
|
56
|
+
}));
|
|
57
|
+
const GridConfigSelect = (0, _styles.styled)(_material.Select)({
|
|
58
|
+
flex: '1'
|
|
59
|
+
});
|
|
60
|
+
class GraphingConfig extends React.Component {
|
|
61
|
+
constructor(props) {
|
|
62
|
+
super(props);
|
|
63
|
+
/*
|
|
64
|
+
* Function to change labels
|
|
65
|
+
* @param {object} labels - labels object
|
|
66
|
+
* */
|
|
67
|
+
(0, _defineProperty2.default)(this, "changeLabels", labels => {
|
|
68
|
+
const {
|
|
69
|
+
model,
|
|
70
|
+
onChange
|
|
71
|
+
} = this.props;
|
|
72
|
+
onChange({
|
|
73
|
+
...model,
|
|
74
|
+
labels
|
|
75
|
+
});
|
|
76
|
+
});
|
|
77
|
+
/*
|
|
78
|
+
* Function to change title
|
|
79
|
+
* @param {string} title - title string
|
|
80
|
+
* */
|
|
81
|
+
(0, _defineProperty2.default)(this, "changeTitle", title => {
|
|
82
|
+
const {
|
|
83
|
+
model,
|
|
84
|
+
onChange
|
|
85
|
+
} = this.props;
|
|
86
|
+
onChange({
|
|
87
|
+
...model,
|
|
88
|
+
title
|
|
89
|
+
});
|
|
90
|
+
});
|
|
91
|
+
/*
|
|
92
|
+
* Function to change grid configuration
|
|
93
|
+
* @param {object} config - grid configuration object
|
|
94
|
+
* @param {number} newSelectedGrid - new selected grid
|
|
95
|
+
* */
|
|
96
|
+
(0, _defineProperty2.default)(this, "onConfigChange", (config, newSelectedGrid) => {
|
|
97
|
+
const {
|
|
98
|
+
model,
|
|
99
|
+
onChange
|
|
100
|
+
} = this.props;
|
|
101
|
+
const {
|
|
102
|
+
defaultGridConfiguration: oldSelectedGrid = 0
|
|
103
|
+
} = model;
|
|
104
|
+
const {
|
|
105
|
+
gridValues: oldGridValues,
|
|
106
|
+
labelValues: oldLabelValues,
|
|
107
|
+
domain: oldDomain,
|
|
108
|
+
range: oldRange
|
|
109
|
+
} = this.state;
|
|
110
|
+
const updatedModel = {
|
|
111
|
+
...model,
|
|
112
|
+
...config
|
|
113
|
+
};
|
|
114
|
+
const {
|
|
115
|
+
answers,
|
|
116
|
+
domain,
|
|
117
|
+
includeAxes = true,
|
|
118
|
+
graph,
|
|
119
|
+
range,
|
|
120
|
+
standardGrid
|
|
121
|
+
} = updatedModel;
|
|
122
|
+
const gridValues = {
|
|
123
|
+
domain: [],
|
|
124
|
+
range: []
|
|
125
|
+
};
|
|
126
|
+
const labelValues = {
|
|
127
|
+
domain: [],
|
|
128
|
+
range: []
|
|
129
|
+
};
|
|
130
|
+
const selectedGrid = newSelectedGrid >= 0 ? newSelectedGrid : oldSelectedGrid;
|
|
131
|
+
if (includeAxes) {
|
|
132
|
+
const domainConstraints = (0, _utils.applyConstraints)(domain, graph.width, oldGridValues.domain, oldLabelValues.domain);
|
|
133
|
+
gridValues.domain = domainConstraints.gridValues || [];
|
|
134
|
+
labelValues.domain = domainConstraints.labelValues || [];
|
|
135
|
+
}
|
|
136
|
+
if (standardGrid) {
|
|
137
|
+
gridValues.range = gridValues.domain;
|
|
138
|
+
labelValues.range = labelValues.domain;
|
|
139
|
+
range.step = domain.step;
|
|
140
|
+
range.labelStep = domain.labelStep;
|
|
141
|
+
} else {
|
|
142
|
+
if (includeAxes) {
|
|
143
|
+
const rangeConstraints = (0, _utils.applyConstraints)(range, graph.height, oldGridValues.range, oldLabelValues.range);
|
|
144
|
+
gridValues.range = rangeConstraints.gridValues || [];
|
|
145
|
+
labelValues.range = rangeConstraints.labelValues || [];
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
const filteredAnswers = (0, _lodashEs.cloneDeep)(answers);
|
|
149
|
+
filteredAnswers.correctAnswer.marks = answers.correctAnswer.marks.filter(mark => mark.type !== 'polygon');
|
|
150
|
+
const plotableAnswers = (0, _utils.filterPlotableMarks)(domain, range, filteredAnswers);
|
|
151
|
+
if (!(0, _lodashEs.isEqual)(filteredAnswers, plotableAnswers)) {
|
|
152
|
+
this.setState({
|
|
153
|
+
dialog: {
|
|
154
|
+
isOpened: true,
|
|
155
|
+
onClose: () => this.setState({
|
|
156
|
+
dialog: {
|
|
157
|
+
isOpened: false
|
|
158
|
+
}
|
|
159
|
+
}, onChange({
|
|
160
|
+
...model,
|
|
161
|
+
domain: oldDomain,
|
|
162
|
+
range: oldRange
|
|
163
|
+
})),
|
|
164
|
+
onConfirm: () => {
|
|
165
|
+
updatedModel.gssLineData.sections = [];
|
|
166
|
+
updatedModel.gssLineData.selectedTool = 'lineA';
|
|
167
|
+
this.setState({
|
|
168
|
+
gridValues,
|
|
169
|
+
labelValues,
|
|
170
|
+
dialog: {
|
|
171
|
+
isOpened: false
|
|
172
|
+
},
|
|
173
|
+
domain: {
|
|
174
|
+
...domain
|
|
175
|
+
},
|
|
176
|
+
range: {
|
|
177
|
+
...range
|
|
178
|
+
}
|
|
179
|
+
}, onChange({
|
|
180
|
+
...updatedModel,
|
|
181
|
+
answers: plotableAnswers,
|
|
182
|
+
defaultGridConfiguration: selectedGrid
|
|
183
|
+
}));
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
});
|
|
187
|
+
return;
|
|
188
|
+
}
|
|
189
|
+
this.setState({
|
|
190
|
+
gridValues,
|
|
191
|
+
labelValues,
|
|
192
|
+
domain: {
|
|
193
|
+
...domain
|
|
194
|
+
},
|
|
195
|
+
range: {
|
|
196
|
+
...range
|
|
197
|
+
}
|
|
198
|
+
});
|
|
199
|
+
onChange({
|
|
200
|
+
...updatedModel,
|
|
201
|
+
defaultGridConfiguration: selectedGrid
|
|
202
|
+
});
|
|
203
|
+
});
|
|
204
|
+
/*
|
|
205
|
+
* Function to change view
|
|
206
|
+
* @param {object} event - event object
|
|
207
|
+
* @param {boolean} expanded - expanded boolean
|
|
208
|
+
* */
|
|
209
|
+
(0, _defineProperty2.default)(this, "onChangeView", (event, expanded) => {
|
|
210
|
+
const {
|
|
211
|
+
graphDimensions: {
|
|
212
|
+
enabled
|
|
213
|
+
} = {}
|
|
214
|
+
} = this.props;
|
|
215
|
+
if (enabled) {
|
|
216
|
+
this.setState({
|
|
217
|
+
showPixelGuides: expanded
|
|
218
|
+
});
|
|
219
|
+
}
|
|
220
|
+
});
|
|
221
|
+
/*
|
|
222
|
+
* Function to change grid configuration
|
|
223
|
+
* @param {object} event - event object
|
|
224
|
+
* */
|
|
225
|
+
(0, _defineProperty2.default)(this, "changeGridConfiguration", event => {
|
|
226
|
+
const {
|
|
227
|
+
gridConfigurations
|
|
228
|
+
} = this.props;
|
|
229
|
+
const {
|
|
230
|
+
value
|
|
231
|
+
} = event.target;
|
|
232
|
+
this.onConfigChange(gridConfigurations?.[value] || {}, value);
|
|
233
|
+
});
|
|
234
|
+
const {
|
|
235
|
+
domain: _domain,
|
|
236
|
+
range: _range,
|
|
237
|
+
graph: _graph
|
|
238
|
+
} = props.model || {};
|
|
239
|
+
const _gridValues = {
|
|
240
|
+
domain: (0, _utils.getGridValues)(_domain, _graph.width, true),
|
|
241
|
+
range: (0, _utils.getGridValues)(_range, _graph.height, true)
|
|
242
|
+
};
|
|
243
|
+
const _labelValues = {
|
|
244
|
+
domain: (0, _utils.getLabelValues)(_domain.step),
|
|
245
|
+
range: (0, _utils.getLabelValues)(_range.step)
|
|
246
|
+
};
|
|
247
|
+
this.state = {
|
|
248
|
+
gridValues: _gridValues,
|
|
249
|
+
labelValues: _labelValues,
|
|
250
|
+
showPixelGuides: false,
|
|
251
|
+
dialog: {
|
|
252
|
+
isOpened: false
|
|
253
|
+
},
|
|
254
|
+
domain: {
|
|
255
|
+
..._domain
|
|
256
|
+
},
|
|
257
|
+
range: {
|
|
258
|
+
..._range
|
|
259
|
+
}
|
|
260
|
+
};
|
|
261
|
+
}
|
|
262
|
+
/*
|
|
263
|
+
* Render the component
|
|
264
|
+
* */
|
|
265
|
+
render() {
|
|
266
|
+
const {
|
|
267
|
+
authoring = {},
|
|
268
|
+
gridConfigurations = [],
|
|
269
|
+
graphDimensions = {},
|
|
270
|
+
labelsPlaceholders,
|
|
271
|
+
model,
|
|
272
|
+
showLabels,
|
|
273
|
+
dimensionsEnabled,
|
|
274
|
+
showTitle,
|
|
275
|
+
titlePlaceholder,
|
|
276
|
+
mathMlOptions = {}
|
|
277
|
+
} = this.props;
|
|
278
|
+
const {
|
|
279
|
+
arrows,
|
|
280
|
+
coordinatesOnHover,
|
|
281
|
+
defaultGridConfiguration,
|
|
282
|
+
domain,
|
|
283
|
+
labels,
|
|
284
|
+
range,
|
|
285
|
+
standardGrid,
|
|
286
|
+
title
|
|
287
|
+
} = model || {};
|
|
288
|
+
const graph = (model || {}).graph || {};
|
|
289
|
+
const {
|
|
290
|
+
min,
|
|
291
|
+
max,
|
|
292
|
+
step
|
|
293
|
+
} = graphDimensions || {};
|
|
294
|
+
const {
|
|
295
|
+
dialog = {},
|
|
296
|
+
gridValues,
|
|
297
|
+
labelValues,
|
|
298
|
+
showPixelGuides
|
|
299
|
+
} = this.state;
|
|
300
|
+
const sizeConstraints = {
|
|
301
|
+
min: Math.max(150, min),
|
|
302
|
+
max: Math.min(800, max),
|
|
303
|
+
step: step >= 1 ? Math.min(200, step) : 20
|
|
304
|
+
};
|
|
305
|
+
const displayedFields = {
|
|
306
|
+
axisLabel: authoring.axisLabel,
|
|
307
|
+
dimensionsEnabled,
|
|
308
|
+
includeAxesEnabled: false,
|
|
309
|
+
//Setting false by default as per requirement
|
|
310
|
+
labelStep: authoring.labelStep,
|
|
311
|
+
min: authoring.min,
|
|
312
|
+
max: authoring.max,
|
|
313
|
+
standardGridEnabled: authoring.standardGridEnabled,
|
|
314
|
+
step: authoring.step
|
|
315
|
+
};
|
|
316
|
+
const displayGridSetup = authoring.enabled && Object.values(displayedFields).some(field => typeof field === 'object' ? field.enabled : field);
|
|
317
|
+
return /*#__PURE__*/React.createElement(Container, null, /*#__PURE__*/React.createElement(GridConfigWrapper, null, gridConfigurations && gridConfigurations.length ? /*#__PURE__*/React.createElement(GridConfig, null, /*#__PURE__*/React.createElement(GridConfigLabel, {
|
|
318
|
+
component: "div",
|
|
319
|
+
variant: "h6"
|
|
320
|
+
}, "Grid Configuration"), /*#__PURE__*/React.createElement(GridConfigSelect, {
|
|
321
|
+
input: /*#__PURE__*/React.createElement(_material.OutlinedInput, {
|
|
322
|
+
labelWidth: 10
|
|
323
|
+
}),
|
|
324
|
+
displayEmpty: true,
|
|
325
|
+
onChange: this.changeGridConfiguration,
|
|
326
|
+
value: defaultGridConfiguration,
|
|
327
|
+
MenuProps: {
|
|
328
|
+
transitionDuration: {
|
|
329
|
+
enter: 225,
|
|
330
|
+
exit: 195
|
|
331
|
+
}
|
|
332
|
+
}
|
|
333
|
+
}, (gridConfigurations || []).map((config, index) => /*#__PURE__*/React.createElement(_material.MenuItem, {
|
|
334
|
+
key: index,
|
|
335
|
+
value: index
|
|
336
|
+
}, config.label)))) : null, displayGridSetup && /*#__PURE__*/React.createElement(_graphingSolutionSet.GridSetup, {
|
|
337
|
+
displayedFields: displayedFields,
|
|
338
|
+
domain: domain,
|
|
339
|
+
gridValues: gridValues,
|
|
340
|
+
includeAxes: true //Setting true by default as per requirement
|
|
341
|
+
,
|
|
342
|
+
labelValues: labelValues,
|
|
343
|
+
range: range,
|
|
344
|
+
size: graph,
|
|
345
|
+
sizeConstraints: sizeConstraints,
|
|
346
|
+
standardGrid: standardGrid,
|
|
347
|
+
onChange: this.onConfigChange,
|
|
348
|
+
onChangeView: this.onChangeView
|
|
349
|
+
})), /*#__PURE__*/React.createElement(GraphConfig, {
|
|
350
|
+
key: "graph"
|
|
351
|
+
}, /*#__PURE__*/React.createElement(_material.Typography, {
|
|
352
|
+
component: "div",
|
|
353
|
+
variant: "h6"
|
|
354
|
+
}, "Define Graph Attributes"), /*#__PURE__*/React.createElement(SubtitleText, {
|
|
355
|
+
component: "div",
|
|
356
|
+
variant: "body1"
|
|
357
|
+
}, "Use this interface to add/edit a title and/or labels"), /*#__PURE__*/React.createElement(_graphingSolutionSet.GraphContainer, {
|
|
358
|
+
axesSettings: {
|
|
359
|
+
includeArrows: arrows
|
|
360
|
+
},
|
|
361
|
+
backgroundMarks: [],
|
|
362
|
+
coordinatesOnHover: coordinatesOnHover,
|
|
363
|
+
collapsibleToolbar: true,
|
|
364
|
+
collapsibleToolbarTitle: 'Add Background Shapes to Graph',
|
|
365
|
+
domain: domain,
|
|
366
|
+
key: "graphing-config",
|
|
367
|
+
labels: labels,
|
|
368
|
+
labelsPlaceholders: labelsPlaceholders,
|
|
369
|
+
marks: [],
|
|
370
|
+
onChangeLabels: this.changeLabels,
|
|
371
|
+
onChangeTitle: this.changeTitle,
|
|
372
|
+
range: range,
|
|
373
|
+
showLabels: showLabels,
|
|
374
|
+
showPixelGuides: showPixelGuides,
|
|
375
|
+
showTitle: showTitle,
|
|
376
|
+
size: {
|
|
377
|
+
width: graph.width,
|
|
378
|
+
height: graph.height
|
|
379
|
+
},
|
|
380
|
+
title: title,
|
|
381
|
+
titlePlaceholder: titlePlaceholder,
|
|
382
|
+
disableToolbar: true,
|
|
383
|
+
mathMlOptions: mathMlOptions
|
|
384
|
+
})), /*#__PURE__*/React.createElement(_configUi.AlertDialog, {
|
|
385
|
+
open: dialog.isOpened,
|
|
386
|
+
title: "Warning",
|
|
387
|
+
text: "This change would make it impossible for students to plot one or more graph objects in the current correct answers. If you proceed, all such graph objects will be removed from the correct answers.",
|
|
388
|
+
onClose: dialog.onClose,
|
|
389
|
+
onConfirm: dialog.onConfirm
|
|
390
|
+
}));
|
|
391
|
+
}
|
|
392
|
+
}
|
|
393
|
+
exports.GraphingConfig = GraphingConfig;
|
|
394
|
+
(0, _defineProperty2.default)(GraphingConfig, "propTypes", {
|
|
395
|
+
availableTools: _propTypes.default.array,
|
|
396
|
+
authoring: _propTypes.default.object,
|
|
397
|
+
dimensionsEnabled: _propTypes.default.bool,
|
|
398
|
+
graphDimensions: _propTypes.default.object,
|
|
399
|
+
gridConfigurations: _propTypes.default.array,
|
|
400
|
+
labelsPlaceholders: _propTypes.default.object,
|
|
401
|
+
model: _propTypes.default.object.isRequired,
|
|
402
|
+
onChange: _propTypes.default.func.isRequired,
|
|
403
|
+
showLabels: _propTypes.default.bool,
|
|
404
|
+
showTitle: _propTypes.default.bool,
|
|
405
|
+
titlePlaceholder: _propTypes.default.string
|
|
406
|
+
});
|
|
407
|
+
var _default = exports.default = GraphingConfig;
|
|
408
|
+
//# sourceMappingURL=graphing-config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"graphing-config.js","names":["React","_interopRequireWildcard","require","_propTypes","_interopRequireDefault","_graphingSolutionSet","_configUi","_material","_styles","_utils","_lodashEs","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","Container","styled","theme","display","flexWrap","marginBottom","spacing","GridConfigWrapper","flexDirection","marginRight","GraphConfig","SubtitleText","Typography","marginTop","GridConfig","alignItems","width","GridConfigLabel","padding","GridConfigSelect","Select","flex","GraphingConfig","Component","constructor","props","_defineProperty2","labels","model","onChange","title","config","newSelectedGrid","defaultGridConfiguration","oldSelectedGrid","gridValues","oldGridValues","labelValues","oldLabelValues","domain","oldDomain","range","oldRange","state","updatedModel","answers","includeAxes","graph","standardGrid","selectedGrid","domainConstraints","applyConstraints","step","labelStep","rangeConstraints","height","filteredAnswers","cloneDeep","correctAnswer","marks","filter","mark","type","plotableAnswers","filterPlotableMarks","isEqual","setState","dialog","isOpened","onClose","onConfirm","gssLineData","sections","selectedTool","event","expanded","graphDimensions","enabled","showPixelGuides","gridConfigurations","value","target","onConfigChange","getGridValues","getLabelValues","render","authoring","labelsPlaceholders","showLabels","dimensionsEnabled","showTitle","titlePlaceholder","mathMlOptions","arrows","coordinatesOnHover","min","max","sizeConstraints","Math","displayedFields","axisLabel","includeAxesEnabled","standardGridEnabled","displayGridSetup","values","some","field","createElement","length","component","variant","input","OutlinedInput","labelWidth","displayEmpty","changeGridConfiguration","MenuProps","transitionDuration","enter","exit","map","index","MenuItem","key","label","GridSetup","size","onChangeView","GraphContainer","axesSettings","includeArrows","backgroundMarks","collapsibleToolbar","collapsibleToolbarTitle","onChangeLabels","changeLabels","onChangeTitle","changeTitle","disableToolbar","AlertDialog","open","text","exports","availableTools","PropTypes","array","object","bool","isRequired","func","string","_default"],"sources":["../src/graphing-config.jsx"],"sourcesContent":["import * as React from 'react';\nimport PropTypes from 'prop-types';\nimport { GraphContainer, GridSetup } from '@pie-lib/graphing-solution-set';\nimport { AlertDialog } from '@pie-lib/config-ui';\nimport { MenuItem, Select, Typography, OutlinedInput } from '@mui/material';\nimport { styled } from '@mui/material/styles';\nimport { applyConstraints, filterPlotableMarks, getGridValues, getLabelValues } from './utils';\nimport { isEqual, cloneDeep } from 'lodash-es';\n\nconst Container = styled('div')(({ theme }) => ({\n display: 'flex',\n flexWrap: 'wrap',\n marginBottom: theme.spacing(2.5),\n}));\n\nconst GridConfigWrapper = styled('div')(({ theme }) => ({\n display: 'flex',\n flexDirection: 'column',\n marginRight: theme.spacing(3),\n marginBottom: theme.spacing(2.5),\n}));\n\nconst GraphConfig = styled('div')({\n display: 'flex',\n flexDirection: 'column',\n});\n\nconst SubtitleText = styled(Typography)(({ theme }) => ({\n marginTop: theme.spacing(1.5),\n marginBottom: theme.spacing(1),\n}));\n\nconst GridConfig = styled('div')(({ theme }) => ({\n display: 'flex',\n flexWrap: 'wrap',\n alignItems: 'center',\n width: '100%',\n marginBottom: theme.spacing(2.5),\n}));\n\nconst GridConfigLabel = styled(Typography)(({ theme }) => ({\n padding: `0 ${theme.spacing(1)}`,\n}));\n\nconst GridConfigSelect = styled(Select)({\n flex: '1',\n});\n\nexport class GraphingConfig extends React.Component {\n static propTypes = {\n availableTools: PropTypes.array,\n authoring: PropTypes.object,\n dimensionsEnabled: PropTypes.bool,\n graphDimensions: PropTypes.object,\n gridConfigurations: PropTypes.array,\n labelsPlaceholders: PropTypes.object,\n model: PropTypes.object.isRequired,\n onChange: PropTypes.func.isRequired,\n showLabels: PropTypes.bool,\n showTitle: PropTypes.bool,\n titlePlaceholder: PropTypes.string,\n };\n\n constructor(props) {\n super(props);\n const { domain, range, graph } = props.model || {};\n const gridValues = {\n domain: getGridValues(domain, graph.width, true),\n range: getGridValues(range, graph.height, true),\n };\n const labelValues = {\n domain: getLabelValues(domain.step),\n range: getLabelValues(range.step),\n };\n this.state = {\n gridValues,\n labelValues,\n showPixelGuides: false,\n dialog: { isOpened: false },\n domain: { ...domain },\n range: { ...range },\n };\n }\n\n /*\n * Function to change labels\n * @param {object} labels - labels object\n * */\n changeLabels = (labels) => {\n const { model, onChange } = this.props;\n onChange({ ...model, labels });\n };\n\n /*\n * Function to change title\n * @param {string} title - title string\n * */\n changeTitle = (title) => {\n const { model, onChange } = this.props;\n onChange({ ...model, title });\n };\n\n /*\n * Function to change grid configuration\n * @param {object} config - grid configuration object\n * @param {number} newSelectedGrid - new selected grid\n * */\n onConfigChange = (config, newSelectedGrid) => {\n const { model, onChange } = this.props;\n const { defaultGridConfiguration: oldSelectedGrid = 0 } = model;\n const { gridValues: oldGridValues, labelValues: oldLabelValues, domain: oldDomain, range: oldRange } = this.state;\n const updatedModel = { ...model, ...config };\n const { answers, domain, includeAxes = true, graph, range, standardGrid } = updatedModel;\n const gridValues = { domain: [], range: [] };\n const labelValues = { domain: [], range: [] };\n const selectedGrid = newSelectedGrid >= 0 ? newSelectedGrid : oldSelectedGrid;\n if (includeAxes) {\n const domainConstraints = applyConstraints(domain, graph.width, oldGridValues.domain, oldLabelValues.domain);\n gridValues.domain = domainConstraints.gridValues || [];\n labelValues.domain = domainConstraints.labelValues || [];\n }\n if (standardGrid) {\n gridValues.range = gridValues.domain;\n labelValues.range = labelValues.domain;\n range.step = domain.step;\n range.labelStep = domain.labelStep;\n } else {\n if (includeAxes) {\n const rangeConstraints = applyConstraints(range, graph.height, oldGridValues.range, oldLabelValues.range);\n gridValues.range = rangeConstraints.gridValues || [];\n labelValues.range = rangeConstraints.labelValues || [];\n }\n }\n const filteredAnswers = cloneDeep(answers);\n filteredAnswers.correctAnswer.marks = answers.correctAnswer.marks.filter((mark) => mark.type !== 'polygon');\n const plotableAnswers = filterPlotableMarks(domain, range, filteredAnswers);\n if (!isEqual(filteredAnswers, plotableAnswers)) {\n this.setState({\n dialog: {\n isOpened: true,\n onClose: () =>\n this.setState({ dialog: { isOpened: false } }, onChange({ ...model, domain: oldDomain, range: oldRange })),\n onConfirm: () => {\n updatedModel.gssLineData.sections = [];\n updatedModel.gssLineData.selectedTool = 'lineA';\n this.setState(\n {\n gridValues,\n labelValues,\n dialog: { isOpened: false },\n domain: { ...domain },\n range: { ...range },\n },\n onChange({ ...updatedModel, answers: plotableAnswers, defaultGridConfiguration: selectedGrid }),\n );\n },\n },\n });\n return;\n }\n this.setState({ gridValues, labelValues, domain: { ...domain }, range: { ...range } });\n onChange({ ...updatedModel, defaultGridConfiguration: selectedGrid });\n };\n\n /*\n * Function to change view\n * @param {object} event - event object\n * @param {boolean} expanded - expanded boolean\n * */\n onChangeView = (event, expanded) => {\n const { graphDimensions: { enabled } = {} } = this.props;\n if (enabled) {\n this.setState({ showPixelGuides: expanded });\n }\n };\n\n /*\n * Function to change grid configuration\n * @param {object} event - event object\n * */\n changeGridConfiguration = (event) => {\n const { gridConfigurations } = this.props;\n const { value } = event.target;\n this.onConfigChange(gridConfigurations?.[value] || {}, value);\n };\n\n /*\n * Render the component\n * */\n render() {\n const {\n authoring = {},\n gridConfigurations = [],\n graphDimensions = {},\n labelsPlaceholders,\n model,\n showLabels,\n dimensionsEnabled,\n showTitle,\n titlePlaceholder,\n mathMlOptions = {},\n } = this.props;\n const { arrows, coordinatesOnHover, defaultGridConfiguration, domain, labels, range, standardGrid, title } =\n model || {};\n const graph = (model || {}).graph || {};\n const { min, max, step } = graphDimensions || {};\n const { dialog = {}, gridValues, labelValues, showPixelGuides } = this.state;\n const sizeConstraints = {\n min: Math.max(150, min),\n max: Math.min(800, max),\n step: step >= 1 ? Math.min(200, step) : 20,\n };\n const displayedFields = {\n axisLabel: authoring.axisLabel,\n dimensionsEnabled,\n includeAxesEnabled: false, //Setting false by default as per requirement\n labelStep: authoring.labelStep,\n min: authoring.min,\n max: authoring.max,\n standardGridEnabled: authoring.standardGridEnabled,\n step: authoring.step,\n };\n const displayGridSetup =\n authoring.enabled &&\n Object.values(displayedFields).some((field) => (typeof field === 'object' ? field.enabled : field));\n return (\n <Container>\n <GridConfigWrapper>\n {gridConfigurations && gridConfigurations.length ? (\n <GridConfig>\n <GridConfigLabel component=\"div\" variant=\"h6\">\n Grid Configuration\n </GridConfigLabel>\n <GridConfigSelect\n input={<OutlinedInput labelWidth={10} />}\n displayEmpty\n onChange={this.changeGridConfiguration}\n value={defaultGridConfiguration}\n MenuProps={{ transitionDuration: { enter: 225, exit: 195 } }}\n >\n {(gridConfigurations || []).map((config, index) => (\n <MenuItem key={index} value={index}>\n {config.label}\n </MenuItem>\n ))}\n </GridConfigSelect>\n </GridConfig>\n ) : null}\n {displayGridSetup && (\n <GridSetup\n displayedFields={displayedFields}\n domain={domain}\n gridValues={gridValues}\n includeAxes={true} //Setting true by default as per requirement\n labelValues={labelValues}\n range={range}\n size={graph}\n sizeConstraints={sizeConstraints}\n standardGrid={standardGrid}\n onChange={this.onConfigChange}\n onChangeView={this.onChangeView}\n />\n )}\n </GridConfigWrapper>\n <GraphConfig key=\"graph\">\n <Typography component=\"div\" variant=\"h6\">\n Define Graph Attributes\n </Typography>\n <SubtitleText component=\"div\" variant=\"body1\">\n Use this interface to add/edit a title and/or labels\n </SubtitleText>\n <GraphContainer\n axesSettings={{ includeArrows: arrows }}\n backgroundMarks={[]}\n coordinatesOnHover={coordinatesOnHover}\n collapsibleToolbar={true}\n collapsibleToolbarTitle={'Add Background Shapes to Graph'}\n domain={domain}\n key=\"graphing-config\"\n labels={labels}\n labelsPlaceholders={labelsPlaceholders}\n marks={[]}\n onChangeLabels={this.changeLabels}\n onChangeTitle={this.changeTitle}\n range={range}\n showLabels={showLabels}\n showPixelGuides={showPixelGuides}\n showTitle={showTitle}\n size={{ width: graph.width, height: graph.height }}\n title={title}\n titlePlaceholder={titlePlaceholder}\n disableToolbar={true}\n mathMlOptions={mathMlOptions}\n />\n </GraphConfig>\n <AlertDialog\n open={dialog.isOpened}\n title=\"Warning\"\n text=\"This change would make it impossible for students to plot one or more graph objects in the current correct answers. If you proceed, all such graph objects will be removed from the correct answers.\"\n onClose={dialog.onClose}\n onConfirm={dialog.onConfirm}\n />\n </Container>\n );\n }\n}\n\nexport default GraphingConfig;\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,163 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
Object.defineProperty(exports, "__esModule", {
|
|
5
|
+
value: true
|
|
6
|
+
});
|
|
7
|
+
exports.default = void 0;
|
|
8
|
+
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
9
|
+
var _react = _interopRequireDefault(require("react"));
|
|
10
|
+
var _client = require("react-dom/client");
|
|
11
|
+
var _configure = _interopRequireDefault(require("./configure"));
|
|
12
|
+
var _pieConfigureEvents = require("@pie-framework/pie-configure-events");
|
|
13
|
+
var _debug = _interopRequireDefault(require("debug"));
|
|
14
|
+
var _defaults = _interopRequireDefault(require("./defaults"));
|
|
15
|
+
var _mathRendering = require("@pie-lib/math-rendering");
|
|
16
|
+
const log = (0, _debug.default)('pie-elements:graphing-solution-set:configure');
|
|
17
|
+
|
|
18
|
+
// this function is implemented in controller as well
|
|
19
|
+
const sortedAnswers = answers => Object.keys(answers || {}).sort().reduce((result, key) => {
|
|
20
|
+
if (key !== 'correctAnswer') {
|
|
21
|
+
result[key] = answers[key];
|
|
22
|
+
}
|
|
23
|
+
return result;
|
|
24
|
+
}, {});
|
|
25
|
+
class GraphLinesConfigure extends HTMLElement {
|
|
26
|
+
constructor() {
|
|
27
|
+
super();
|
|
28
|
+
/*
|
|
29
|
+
* Triggered when the model is changed
|
|
30
|
+
* @param {object} model - the new model
|
|
31
|
+
* */
|
|
32
|
+
(0, _defineProperty2.default)(this, "onModelChanged", model => {
|
|
33
|
+
this._model = model;
|
|
34
|
+
this._render();
|
|
35
|
+
log('[onModelChanged]: ', this._model);
|
|
36
|
+
this.dispatchEvent(new _pieConfigureEvents.ModelUpdatedEvent(this._model));
|
|
37
|
+
});
|
|
38
|
+
/*
|
|
39
|
+
* Triggered when the configuration is changed
|
|
40
|
+
* @param {object} config - the new configuration
|
|
41
|
+
* */
|
|
42
|
+
(0, _defineProperty2.default)(this, "onConfigurationChanged", config => {
|
|
43
|
+
this._configuration = config;
|
|
44
|
+
this._render();
|
|
45
|
+
});
|
|
46
|
+
(0, _defineProperty2.default)(this, "insertImage", handler => {
|
|
47
|
+
this.dispatchEvent(new _pieConfigureEvents.InsertImageEvent(handler));
|
|
48
|
+
});
|
|
49
|
+
(0, _defineProperty2.default)(this, "onDeleteImage", (src, done) => {
|
|
50
|
+
this.dispatchEvent(new _pieConfigureEvents.DeleteImageEvent(src, done));
|
|
51
|
+
});
|
|
52
|
+
this._root = null;
|
|
53
|
+
this._model = GraphLinesConfigure.createDefaultModel();
|
|
54
|
+
this._configuration = _defaults.default.configuration;
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
/*
|
|
58
|
+
* Function to set the model
|
|
59
|
+
* */
|
|
60
|
+
set model(m) {
|
|
61
|
+
this._model = GraphLinesConfigure.createDefaultModel(m);
|
|
62
|
+
this._render();
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
/*
|
|
66
|
+
* Function to set the configuration
|
|
67
|
+
* */
|
|
68
|
+
set configuration(c) {
|
|
69
|
+
this._configuration = c;
|
|
70
|
+
// if language:enabled is true, then the corresponding default item model should include a language value;
|
|
71
|
+
// if it is false, then the language field should be omitted from the item model.
|
|
72
|
+
// if a default item model includes a language value (e.g., en_US) and the corresponding authoring view settings have language:settings = true,
|
|
73
|
+
// then (a) language:enabled should also be true, and (b) that default language value should be represented in languageChoices[] (as a key).
|
|
74
|
+
//TODO: add logic in controller and add tests
|
|
75
|
+
if (c.language?.enabled) {
|
|
76
|
+
if (c.languageChoices?.options?.length) {
|
|
77
|
+
this._model.language = c.languageChoices.options[0].value;
|
|
78
|
+
}
|
|
79
|
+
} else {
|
|
80
|
+
if (c.language.settings) {
|
|
81
|
+
if (this._model.language) {
|
|
82
|
+
this._configuration.language.enabled = true;
|
|
83
|
+
}
|
|
84
|
+
} else {
|
|
85
|
+
delete this._model.language;
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
this._render();
|
|
89
|
+
}
|
|
90
|
+
insertSound(handler) {
|
|
91
|
+
this.dispatchEvent(new _pieConfigureEvents.InsertSoundEvent(handler));
|
|
92
|
+
}
|
|
93
|
+
onDeleteSound(src, done) {
|
|
94
|
+
this.dispatchEvent(new _pieConfigureEvents.DeleteSoundEvent(src, done));
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
/*
|
|
98
|
+
* Render the component
|
|
99
|
+
* */
|
|
100
|
+
_render() {
|
|
101
|
+
if (this._model) {
|
|
102
|
+
const el = /*#__PURE__*/_react.default.createElement(_configure.default, {
|
|
103
|
+
onModelChanged: this.onModelChanged,
|
|
104
|
+
onConfigurationChanged: this.onConfigurationChanged,
|
|
105
|
+
model: this._model,
|
|
106
|
+
configuration: this._configuration,
|
|
107
|
+
imageSupport: {
|
|
108
|
+
add: this.insertImage,
|
|
109
|
+
delete: this.onDeleteImage
|
|
110
|
+
},
|
|
111
|
+
uploadSoundSupport: {
|
|
112
|
+
add: this.insertSound.bind(this),
|
|
113
|
+
delete: this.onDeleteSound.bind(this)
|
|
114
|
+
}
|
|
115
|
+
});
|
|
116
|
+
if (!this._root) {
|
|
117
|
+
this._root = (0, _client.createRoot)(this);
|
|
118
|
+
}
|
|
119
|
+
this._root.render(el);
|
|
120
|
+
queueMicrotask(() => {
|
|
121
|
+
(0, _mathRendering.renderMath)(this);
|
|
122
|
+
});
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
disconnectedCallback() {
|
|
126
|
+
if (this._root) {
|
|
127
|
+
this._root.unmount();
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
exports.default = GraphLinesConfigure;
|
|
132
|
+
(0, _defineProperty2.default)(GraphLinesConfigure, "createDefaultModel", (model = {}) => {
|
|
133
|
+
const normalizedModel = {
|
|
134
|
+
..._defaults.default.model,
|
|
135
|
+
...model
|
|
136
|
+
};
|
|
137
|
+
const {
|
|
138
|
+
answers = {},
|
|
139
|
+
domain = {},
|
|
140
|
+
graph = {},
|
|
141
|
+
range = {},
|
|
142
|
+
standardGrid
|
|
143
|
+
} = normalizedModel;
|
|
144
|
+
return {
|
|
145
|
+
...normalizedModel,
|
|
146
|
+
answers: answers && answers.correctAnswer && {
|
|
147
|
+
correctAnswer: answers.correctAnswer,
|
|
148
|
+
...sortedAnswers(answers)
|
|
149
|
+
} || answers,
|
|
150
|
+
range: standardGrid && {
|
|
151
|
+
...range,
|
|
152
|
+
min: domain.min,
|
|
153
|
+
max: domain.max,
|
|
154
|
+
step: domain.step,
|
|
155
|
+
labelStep: domain.labelStep
|
|
156
|
+
} || range,
|
|
157
|
+
graph: standardGrid && {
|
|
158
|
+
...graph,
|
|
159
|
+
height: graph.width
|
|
160
|
+
} || graph
|
|
161
|
+
};
|
|
162
|
+
});
|
|
163
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","names":["_react","_interopRequireDefault","require","_client","_configure","_pieConfigureEvents","_debug","_defaults","_mathRendering","log","debug","sortedAnswers","answers","Object","keys","sort","reduce","result","key","GraphLinesConfigure","HTMLElement","constructor","_defineProperty2","default","model","_model","_render","dispatchEvent","ModelUpdatedEvent","config","_configuration","handler","InsertImageEvent","src","done","DeleteImageEvent","_root","createDefaultModel","defaultValues","configuration","m","c","language","enabled","languageChoices","options","length","value","settings","insertSound","InsertSoundEvent","onDeleteSound","DeleteSoundEvent","el","React","createElement","Configure","onModelChanged","onConfigurationChanged","imageSupport","add","insertImage","delete","onDeleteImage","uploadSoundSupport","bind","createRoot","render","queueMicrotask","renderMath","disconnectedCallback","unmount","exports","normalizedModel","domain","graph","range","standardGrid","correctAnswer","min","max","step","labelStep","height","width"],"sources":["../src/index.js"],"sourcesContent":["import React from 'react';\nimport { createRoot } from 'react-dom/client';\nimport Configure from './configure';\nimport {\n ModelUpdatedEvent,\n DeleteImageEvent,\n InsertImageEvent,\n InsertSoundEvent,\n DeleteSoundEvent,\n} from '@pie-framework/pie-configure-events';\nimport debug from 'debug';\nimport defaultValues from './defaults';\nimport { renderMath } from '@pie-lib/math-rendering';\n\nconst log = debug('pie-elements:graphing-solution-set:configure');\n\n// this function is implemented in controller as well\nconst sortedAnswers = (answers) =>\n Object.keys(answers || {})\n .sort()\n .reduce((result, key) => {\n if (key !== 'correctAnswer') {\n result[key] = answers[key];\n }\n\n return result;\n }, {});\n\nexport default class GraphLinesConfigure extends HTMLElement {\n static createDefaultModel = (model = {}) => {\n const normalizedModel = { ...defaultValues.model, ...model };\n const { answers = {}, domain = {}, graph = {}, range = {}, standardGrid } = normalizedModel;\n return {\n ...normalizedModel,\n answers:\n (answers &&\n answers.correctAnswer && {\n correctAnswer: answers.correctAnswer,\n ...sortedAnswers(answers),\n }) ||\n answers,\n range:\n (standardGrid && {\n ...range,\n min: domain.min,\n max: domain.max,\n step: domain.step,\n labelStep: domain.labelStep,\n }) ||\n range,\n graph: (standardGrid && { ...graph, height: graph.width }) || graph,\n };\n };\n\n constructor() {\n super();\n this._root = null;\n this._model = GraphLinesConfigure.createDefaultModel();\n this._configuration = defaultValues.configuration;\n }\n\n /*\n * Function to set the model\n * */\n set model(m) {\n this._model = GraphLinesConfigure.createDefaultModel(m);\n this._render();\n }\n\n /*\n * Function to set the configuration\n * */\n set configuration(c) {\n this._configuration = c;\n // if language:enabled is true, then the corresponding default item model should include a language value;\n // if it is false, then the language field should be omitted from the item model.\n // if a default item model includes a language value (e.g., en_US) and the corresponding authoring view settings have language:settings = true,\n // then (a) language:enabled should also be true, and (b) that default language value should be represented in languageChoices[] (as a key).\n //TODO: add logic in controller and add tests\n if (c.language?.enabled) {\n if (c.languageChoices?.options?.length) {\n this._model.language = c.languageChoices.options[0].value;\n }\n } else {\n if (c.language.settings) {\n if (this._model.language) {\n this._configuration.language.enabled = true;\n }\n } else {\n delete this._model.language;\n }\n }\n this._render();\n }\n\n /*\n * Triggered when the model is changed\n * @param {object} model - the new model\n * */\n onModelChanged = (model) => {\n this._model = model;\n this._render();\n log('[onModelChanged]: ', this._model);\n this.dispatchEvent(new ModelUpdatedEvent(this._model));\n };\n\n /*\n * Triggered when the configuration is changed\n * @param {object} config - the new configuration\n * */\n onConfigurationChanged = (config) => {\n this._configuration = config;\n this._render();\n };\n\n insertImage = (handler) => {\n this.dispatchEvent(new InsertImageEvent(handler));\n };\n\n onDeleteImage = (src, done) => {\n this.dispatchEvent(new DeleteImageEvent(src, done));\n };\n\n insertSound(handler) {\n this.dispatchEvent(new InsertSoundEvent(handler));\n }\n\n onDeleteSound(src, done) {\n this.dispatchEvent(new DeleteSoundEvent(src, done));\n }\n\n /*\n * Render the component\n * */\n _render() {\n if (this._model) {\n const el = React.createElement(Configure, {\n onModelChanged: this.onModelChanged,\n onConfigurationChanged: this.onConfigurationChanged,\n model: this._model,\n configuration: this._configuration,\n imageSupport: {\n add: this.insertImage,\n delete: this.onDeleteImage,\n },\n uploadSoundSupport: {\n add: this.insertSound.bind(this),\n delete: this.onDeleteSound.bind(this),\n },\n });\n if (!this._root) {\n this._root = createRoot(this);\n }\n this._root.render(el);\n queueMicrotask(() => {\n renderMath(this);\n });\n }\n }\n\n disconnectedCallback() {\n if (this._root) {\n this._root.unmount();\n }\n }\n}\n"],"mappings":"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","ignoreList":[]}
|