@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.
Files changed (88) hide show
  1. package/CHANGELOG.json +1 -0
  2. package/CHANGELOG.md +856 -0
  3. package/LICENSE.md +5 -0
  4. package/README.md +20 -0
  5. package/configure/CHANGELOG.json +1 -0
  6. package/configure/CHANGELOG.md +816 -0
  7. package/configure/lib/configure.js +312 -0
  8. package/configure/lib/configure.js.map +1 -0
  9. package/configure/lib/correct-response.js +435 -0
  10. package/configure/lib/correct-response.js.map +1 -0
  11. package/configure/lib/defaults.js +357 -0
  12. package/configure/lib/defaults.js.map +1 -0
  13. package/configure/lib/graphing-config.js +408 -0
  14. package/configure/lib/graphing-config.js.map +1 -0
  15. package/configure/lib/index.js +163 -0
  16. package/configure/lib/index.js.map +1 -0
  17. package/configure/lib/utils.js +630 -0
  18. package/configure/lib/utils.js.map +1 -0
  19. package/configure/package.json +29 -0
  20. package/controller/CHANGELOG.json +1 -0
  21. package/controller/CHANGELOG.md +675 -0
  22. package/controller/lib/defaults.js +69 -0
  23. package/controller/lib/defaults.js.map +1 -0
  24. package/controller/lib/index.js +351 -0
  25. package/controller/lib/index.js.map +1 -0
  26. package/controller/lib/utils.js +212 -0
  27. package/controller/lib/utils.js.map +1 -0
  28. package/controller/package.json +22 -0
  29. package/demo-gss.gif +0 -0
  30. package/docs/config-schema.json +1560 -0
  31. package/docs/config-schema.json.md +1114 -0
  32. package/docs/demo/config.js +8 -0
  33. package/docs/demo/generate.js +54 -0
  34. package/docs/demo/index.html +1 -0
  35. package/docs/demo/session.js +6 -0
  36. package/docs/pie-schema.json +1800 -0
  37. package/docs/pie-schema.json.md +952 -0
  38. package/lib/index.js +164 -0
  39. package/lib/index.js.map +1 -0
  40. package/lib/main.js +355 -0
  41. package/lib/main.js.map +1 -0
  42. package/lib/utils.js +515 -0
  43. package/lib/utils.js.map +1 -0
  44. package/package.json +23 -86
  45. package/configure.js +0 -2
  46. package/controller.js +0 -1
  47. package/dist/author/configure.d.ts +0 -26
  48. package/dist/author/configure.js +0 -190
  49. package/dist/author/correct-response.d.ts +0 -33
  50. package/dist/author/correct-response.js +0 -206
  51. package/dist/author/defaults.d.ts +0 -238
  52. package/dist/author/defaults.js +0 -339
  53. package/dist/author/graphing-config.d.ts +0 -33
  54. package/dist/author/graphing-config.js +0 -237
  55. package/dist/author/index.d.ts +0 -62
  56. package/dist/author/index.js +0 -87
  57. package/dist/author/utils.d.ts +0 -46
  58. package/dist/author/utils.js +0 -474
  59. package/dist/browser/author/index.js +0 -1942
  60. package/dist/browser/author/index.js.map +0 -1
  61. package/dist/browser/browser-pUycHh7Y.js +0 -348
  62. package/dist/browser/browser-pUycHh7Y.js.map +0 -1
  63. package/dist/browser/controller/index.js +0 -193
  64. package/dist/browser/controller/index.js.map +0 -1
  65. package/dist/browser/delivery/index.js +0 -782
  66. package/dist/browser/delivery/index.js.map +0 -1
  67. package/dist/browser/dist-BxTk7Laj.js +0 -57671
  68. package/dist/browser/dist-BxTk7Laj.js.map +0 -1
  69. package/dist/browser/graphing-solution-set.css +0 -2
  70. package/dist/controller/defaults.d.ts +0 -64
  71. package/dist/controller/defaults.js +0 -54
  72. package/dist/controller/index.d.ts +0 -24
  73. package/dist/controller/index.js +0 -110
  74. package/dist/controller/utils.d.ts +0 -20
  75. package/dist/controller/utils.js +0 -39
  76. package/dist/delivery/index.d.ts +0 -22
  77. package/dist/delivery/index.js +0 -62
  78. package/dist/delivery/main.d.ts +0 -31
  79. package/dist/delivery/main.js +0 -198
  80. package/dist/delivery/utils.d.ts +0 -12
  81. package/dist/delivery/utils.js +0 -220
  82. package/dist/graphing-solution-set.css +0 -2
  83. package/dist/index.d.ts +0 -1
  84. package/dist/index.iife.d.ts +0 -8
  85. package/dist/index.iife.js +0 -405
  86. package/dist/index.js +0 -2
  87. package/dist/runtime-support.d.ts +0 -12
  88. package/dist/runtime-support.js +0 -12
@@ -0,0 +1,435 @@
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.CorrectResponse = 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 _styles = require("@mui/material/styles");
12
+ var _graphingSolutionSet = require("@pie-lib/graphing-solution-set");
13
+ var _configUi = require("@pie-lib/config-ui");
14
+ var _lodashEs = require("lodash-es");
15
+ var _material = require("@mui/material");
16
+ var _Radio = _interopRequireDefault(require("@mui/material/Radio"));
17
+ var _FormControlLabel = _interopRequireDefault(require("@mui/material/FormControlLabel"));
18
+ var _utils = require("./utils");
19
+ 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); }
20
+ const SubtitleText = (0, _styles.styled)(_material.Typography)(({
21
+ theme
22
+ }) => ({
23
+ marginTop: theme.spacing(1.5),
24
+ marginBottom: theme.spacing(1)
25
+ }));
26
+ const RadioButtonClass = (0, _styles.styled)(_FormControlLabel.default)({
27
+ height: '20px',
28
+ width: 'fit-content',
29
+ padding: '.5rem 0'
30
+ });
31
+ const StyledRadio = (0, _styles.styled)(_Radio.default)({
32
+ color: '#000000 !important'
33
+ });
34
+ const ErrorMessage = (0, _styles.styled)('div')(({
35
+ theme
36
+ }) => ({
37
+ fontSize: theme.typography.fontSize - 2,
38
+ color: theme.palette.error.main,
39
+ paddingTop: theme.spacing(1)
40
+ }));
41
+ class CorrectResponse extends React.Component {
42
+ constructor(...args) {
43
+ super(...args);
44
+ (0, _defineProperty2.default)(this, "state", {
45
+ dialog: {
46
+ open: false
47
+ }
48
+ });
49
+ /*
50
+ * Function to handle the alert dialog open and close
51
+ * @param {boolean} open - open or close the dialog
52
+ * @param {function} callback - callback function to be called after setting the state
53
+ * */
54
+ (0, _defineProperty2.default)(this, "handleAlertDialog", (open, callback) => this.setState({
55
+ dialog: {
56
+ open
57
+ }
58
+ }, callback));
59
+ /*
60
+ * Function to change the marks on the graph
61
+ * @param {array} marks - marks to be added on the graph
62
+ * */
63
+ (0, _defineProperty2.default)(this, "changeMarks", marks => {
64
+ const {
65
+ model,
66
+ onChange
67
+ } = this.props;
68
+ const {
69
+ gssLineData
70
+ } = model;
71
+ if (gssLineData.selectedTool === 'lineA' && marks.length > 0) {
72
+ marks[0].fill = gssLineData['lineA'].lineType;
73
+ }
74
+ if (gssLineData.selectedTool === 'lineB' && marks.length > 1) {
75
+ marks[1].fill = gssLineData['lineB'].lineType;
76
+ }
77
+ if (marks.length === 0) {
78
+ gssLineData.selectedTool = 'lineA';
79
+ (0, _lodashEs.set)(model, 'gssLineData', gssLineData);
80
+ }
81
+ (0, _lodashEs.set)(model, 'answers.correctAnswer.marks', marks);
82
+ onChange(model);
83
+ });
84
+ /*
85
+ * Reset the graph to original state and remove all the elements added on the graph
86
+ * */
87
+ (0, _defineProperty2.default)(this, "onResetClick", () => {
88
+ const {
89
+ model,
90
+ onChange
91
+ } = this.props;
92
+ const {
93
+ gssLineData,
94
+ answers
95
+ } = model;
96
+ this.setState({
97
+ dialog: {
98
+ open: true,
99
+ title: 'Warning',
100
+ text: 'This will remove all the elements added on the graph and reset graph to original state. Are you sure you want to continue?',
101
+ onConfirm: () => {
102
+ // Reset the graph to original state
103
+ answers.correctAnswer.marks = [];
104
+ gssLineData.selectedTool = 'lineA';
105
+ gssLineData.lineA.lineType = 'Solid';
106
+ if (gssLineData.lineB) gssLineData.lineB.lineType = 'Solid';
107
+ (0, _lodashEs.set)(model, 'answers', answers);
108
+ (0, _lodashEs.set)(model, 'gssLineData', gssLineData);
109
+ onChange(model);
110
+ this.handleAlertDialog(false);
111
+ },
112
+ onClose: () => this.handleAlertDialog(false)
113
+ }
114
+ });
115
+ });
116
+ /*
117
+ * Function to change the number of lines on the graph
118
+ * @param {object} e - event object
119
+ * @param {number} value - number of lines to be added on the graph
120
+ * */
121
+ (0, _defineProperty2.default)(this, "changeNumberOfLines", (e, value) => {
122
+ const {
123
+ model
124
+ } = this.props;
125
+ let gssLineData = model.gssLineData;
126
+ if (gssLineData.selectedTool === 'solutionSet') {
127
+ this.setState({
128
+ dialog: {
129
+ open: true,
130
+ title: 'Warning',
131
+ text: 'Changing number of lines after adding solution set will remove added solution set. Are you sure you want to continue?',
132
+ onConfirm: () => {
133
+ this.changeLine(e, value);
134
+ this.handleAlertDialog(false);
135
+ },
136
+ onClose: () => this.handleAlertDialog(false)
137
+ }
138
+ });
139
+ } else {
140
+ this.changeLine(e, value);
141
+ }
142
+ });
143
+ /*
144
+ * Function to change the number of line on the graph
145
+ * @param {object} e - event object
146
+ * @param {number} value - number of lines to be added on the graph
147
+ * */
148
+ (0, _defineProperty2.default)(this, "changeLine", (e, value) => {
149
+ const {
150
+ model,
151
+ onChange
152
+ } = this.props;
153
+ const {
154
+ answers
155
+ } = model;
156
+ let gssLineData = model.gssLineData;
157
+ //remove polygon from correct answer
158
+ answers.correctAnswer.marks = answers.correctAnswer.marks.filter(mark => mark.type !== 'polygon');
159
+ if (Number.parseInt(value) === 1) {
160
+ //remove lineB from gssLineData and correct answer
161
+ delete gssLineData.lineB;
162
+ if (answers.correctAnswer.marks.length > 1) answers.correctAnswer.marks.pop();
163
+ gssLineData.numberOfLines = 1;
164
+ gssLineData.selectedTool = 'lineA';
165
+ } else {
166
+ gssLineData.numberOfLines = 2;
167
+ if (answers.correctAnswer.marks.length > 0) gssLineData.selectedTool = 'lineB';
168
+ gssLineData.lineB = {
169
+ lineType: 'Solid'
170
+ };
171
+ }
172
+ //reset solution set
173
+ (0, _lodashEs.set)(model, 'answers', answers);
174
+ (0, _lodashEs.set)(model, 'gssLineData', gssLineData);
175
+ onChange(model);
176
+ });
177
+ /*
178
+ * Function to handle the changes to solution set on the graph
179
+ * @param {object} point - point selected on the graph
180
+ * */
181
+ (0, _defineProperty2.default)(this, "onSolutionSetSelected", point => {
182
+ const {
183
+ model,
184
+ onChange
185
+ } = this.props;
186
+ const {
187
+ answers,
188
+ gssLineData
189
+ } = model;
190
+ for (const section of gssLineData.sections) {
191
+ //check if the point is inside the polygon
192
+ if ((0, _utils.pointInsidePolygon)(point, section)) {
193
+ let polygon = {
194
+ points: section,
195
+ building: false,
196
+ type: 'polygon',
197
+ closed: true,
198
+ isSolution: true
199
+ };
200
+ //remove old answer section from correct answer
201
+ answers.correctAnswer.marks = answers.correctAnswer.marks.filter(mark => mark.type !== 'polygon');
202
+ //add new answer section to correct answer
203
+ answers.correctAnswer.marks.push(polygon);
204
+ break;
205
+ }
206
+ }
207
+ (0, _lodashEs.set)(model, 'answers', answers);
208
+ onChange(model);
209
+ });
210
+ /*
211
+ * Function to handle the changes to line data on the graph
212
+ * @param {object} gssLineData - line data on the graph
213
+ * @param {string} oldSelectedTool - old selected tool
214
+ * */
215
+ (0, _defineProperty2.default)(this, "onChangeGssLineData", (gssLineData, oldSelectedTool) => {
216
+ const {
217
+ model
218
+ } = this.props;
219
+ const {
220
+ answers,
221
+ domain,
222
+ range
223
+ } = model;
224
+ //handle solution set changes
225
+ if (gssLineData.selectedTool === 'solutionSet') {
226
+ let lines = answers.correctAnswer.marks.filter(mark => mark.type !== 'polygon');
227
+ if (!(0, _utils.checkIfLinesAreAdded)(gssLineData, lines)) {
228
+ gssLineData.selectedTool = oldSelectedTool;
229
+ this.setState({
230
+ dialog: {
231
+ open: true,
232
+ title: 'Warning',
233
+ text: 'Please define the line(s) and then select a solution set for the item.',
234
+ onConfirm: () => this.handleAlertDialog(false)
235
+ }
236
+ });
237
+ } else {
238
+ let lines = answers.correctAnswer.marks.filter(mark => mark.type !== 'polygon');
239
+ gssLineData = (0, _utils.findSectionsInSolutionSet)(gssLineData, lines, domain, range);
240
+ }
241
+ this.handleGssLineDataChange(gssLineData, answers);
242
+ } else {
243
+ let polygons = answers.correctAnswer.marks.filter(mark => mark.type === 'polygon');
244
+ if (oldSelectedTool === 'solutionSet' && polygons.length > 0) {
245
+ this.setState({
246
+ dialog: {
247
+ open: true,
248
+ title: 'Warning',
249
+ text: 'Changing a line after adding a solution set will clear your selected solution set. Click \'Clear Solution Set\' to change the line. Otherwise, click \'Cancel\'.',
250
+ onConfirm: () => {
251
+ answers.correctAnswer.marks = answers.correctAnswer.marks.filter(mark => mark.type !== 'polygon');
252
+ this.handleGssLineDataChange(gssLineData, answers);
253
+ this.handleAlertDialog(false);
254
+ },
255
+ onConfirmText: 'CLEAR SOLUTION SET',
256
+ onClose: () => {
257
+ gssLineData.selectedTool = oldSelectedTool;
258
+ this.handleGssLineDataChange(gssLineData, answers);
259
+ this.handleAlertDialog(false);
260
+ }
261
+ }
262
+ });
263
+ } else {
264
+ this.handleGssLineDataChange(gssLineData, answers);
265
+ }
266
+ }
267
+ });
268
+ /*
269
+ * Function to handle the changes to line data on the graph
270
+ * @param {object} gssLineData - line data on the graph
271
+ * @param {object} answers - correct answer
272
+ * */
273
+ (0, _defineProperty2.default)(this, "handleGssLineDataChange", (gssLineData, answers) => {
274
+ const {
275
+ model,
276
+ onChange
277
+ } = this.props;
278
+ //handle line type changes from solid to dashed and vice versa
279
+ if (answers.correctAnswer.marks.length > 0 && answers.correctAnswer.marks[0] && gssLineData.lineA) {
280
+ answers.correctAnswer.marks[0].fill = gssLineData.lineA.lineType;
281
+ }
282
+ if (answers.correctAnswer.marks.length > 1 && answers.correctAnswer.marks[1] && gssLineData.lineB) {
283
+ answers.correctAnswer.marks[1].fill = gssLineData.lineB.lineType;
284
+ }
285
+ //check if line is added to the graph before switching to lineB
286
+ if (gssLineData.selectedTool === 'lineB' && answers.correctAnswer.marks.length === 0 || gssLineData.selectedTool === 'lineB' && answers.correctAnswer.marks[0].building) {
287
+ this.setState({
288
+ dialog: {
289
+ open: true,
290
+ title: 'Warning',
291
+ text: 'Please add Line A to the graph before adding Line B',
292
+ onConfirm: () => this.handleAlertDialog(false)
293
+ }
294
+ });
295
+ gssLineData.selectedTool = 'lineA';
296
+ }
297
+ //check if lineB is added to the graph before switching to lineA
298
+ if (gssLineData.selectedTool === 'lineA' && answers.correctAnswer.marks.length > 1 && answers.correctAnswer.marks[1].building) {
299
+ this.setState({
300
+ dialog: {
301
+ open: true,
302
+ title: 'Warning',
303
+ text: 'Please add Line B to the graph before switching to Line A',
304
+ onConfirm: () => this.handleAlertDialog(false)
305
+ }
306
+ });
307
+ gssLineData.selectedTool = 'lineB';
308
+ }
309
+ (0, _lodashEs.set)(model, 'gssLineData', gssLineData);
310
+ (0, _lodashEs.set)(model, 'answers', answers);
311
+ onChange(model);
312
+ });
313
+ /*
314
+ * Function to update the model
315
+ * @param {object} props - updated props
316
+ * */
317
+ (0, _defineProperty2.default)(this, "updateModel", props => {
318
+ const {
319
+ model,
320
+ onChange
321
+ } = this.props;
322
+ onChange({
323
+ ...model,
324
+ ...props
325
+ });
326
+ });
327
+ }
328
+ /*
329
+ * Render the component
330
+ * */
331
+ render() {
332
+ const {
333
+ errors,
334
+ model,
335
+ mathMlOptions = {}
336
+ } = this.props;
337
+ const {
338
+ dialog
339
+ } = this.state;
340
+ //get the default values to GssLineData
341
+ const {
342
+ gssLineData = {
343
+ numberOfLines: 1,
344
+ selectedTool: 'lineA',
345
+ lineA: {
346
+ lineType: 'Solid'
347
+ }
348
+ },
349
+ arrows,
350
+ coordinatesOnHover,
351
+ domain,
352
+ graph = {},
353
+ labels,
354
+ labelsEnabled,
355
+ range,
356
+ title,
357
+ titleEnabled,
358
+ answers
359
+ } = model || {};
360
+ const {
361
+ correctAnswerErrors = ''
362
+ } = errors || {};
363
+ return /*#__PURE__*/React.createElement("div", null, /*#__PURE__*/React.createElement(_material.Typography, {
364
+ component: "div",
365
+ variant: "h6"
366
+ }, "Define Line Type(s) and Correct Response"), /*#__PURE__*/React.createElement(SubtitleText, {
367
+ component: "div",
368
+ variant: "body1"
369
+ }, "Use this interface to choose how many lines students will be able to draw, and to define the correct answer."), /*#__PURE__*/React.createElement(SubtitleText, {
370
+ component: "div",
371
+ variant: "body1"
372
+ }, "Choose Number of Lines"), /*#__PURE__*/React.createElement(_material.RadioGroup, {
373
+ name: "numberOfLines",
374
+ value: gssLineData.numberOfLines,
375
+ onChange: this.changeNumberOfLines
376
+ }, /*#__PURE__*/React.createElement(RadioButtonClass, {
377
+ value: "1",
378
+ control: /*#__PURE__*/React.createElement(StyledRadio, {
379
+ checked: gssLineData.numberOfLines === 1
380
+ }),
381
+ label: "One"
382
+ }), /*#__PURE__*/React.createElement(RadioButtonClass, {
383
+ value: "2",
384
+ control: /*#__PURE__*/React.createElement(StyledRadio, {
385
+ checked: gssLineData.numberOfLines === 2
386
+ }),
387
+ label: "Two"
388
+ })), /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(_graphingSolutionSet.GraphContainer, {
389
+ style: correctAnswerErrors['correctAnswer'] && {
390
+ border: '2px solid red'
391
+ },
392
+ axesSettings: {
393
+ includeArrows: arrows
394
+ },
395
+ backgroundMarks: [],
396
+ coordinatesOnHover: coordinatesOnHover,
397
+ disabledLabels: true,
398
+ disabledTitle: true,
399
+ domain: domain,
400
+ draggableTools: true,
401
+ labels: labels,
402
+ marks: answers && answers.correctAnswer && answers.correctAnswer.marks ? answers.correctAnswer.marks : [],
403
+ onChangeMarks: newMarks => this.changeMarks(newMarks),
404
+ onCustomReset: this.onResetClick,
405
+ range: range,
406
+ showLabels: labelsEnabled,
407
+ showTitle: titleEnabled,
408
+ size: {
409
+ width: graph.width,
410
+ height: graph.height
411
+ },
412
+ title: title,
413
+ gssLineData: gssLineData,
414
+ onChangeGssLineData: this.onChangeGssLineData,
415
+ onSolutionSetSelected: this.onSolutionSetSelected,
416
+ toolbarTools: ['line', 'polygon'],
417
+ mathMlOptions: mathMlOptions
418
+ }), correctAnswerErrors['correctAnswer'] && /*#__PURE__*/React.createElement(ErrorMessage, null, correctAnswerErrors['correctAnswer'])), /*#__PURE__*/React.createElement(_configUi.AlertDialog, {
419
+ open: dialog.open,
420
+ title: dialog.title,
421
+ text: dialog.text,
422
+ onClose: dialog.onClose,
423
+ onConfirm: dialog.onConfirm,
424
+ onConfirmText: dialog.onConfirmText ? dialog.onConfirmText : 'OK'
425
+ }));
426
+ }
427
+ }
428
+ exports.CorrectResponse = CorrectResponse;
429
+ (0, _defineProperty2.default)(CorrectResponse, "propTypes", {
430
+ errors: _propTypes.default.object,
431
+ model: _propTypes.default.object.isRequired,
432
+ onChange: _propTypes.default.func.isRequired
433
+ });
434
+ var _default = exports.default = CorrectResponse;
435
+ //# sourceMappingURL=correct-response.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"correct-response.js","names":["React","_interopRequireWildcard","require","_propTypes","_interopRequireDefault","_styles","_graphingSolutionSet","_configUi","_lodashEs","_material","_Radio","_FormControlLabel","_utils","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","SubtitleText","styled","Typography","theme","marginTop","spacing","marginBottom","RadioButtonClass","FormControlLabel","height","width","padding","StyledRadio","Radio","color","ErrorMessage","fontSize","typography","palette","error","main","paddingTop","CorrectResponse","Component","constructor","args","_defineProperty2","dialog","open","callback","setState","marks","model","onChange","props","gssLineData","selectedTool","length","fill","lineType","answers","title","text","onConfirm","correctAnswer","lineA","lineB","handleAlertDialog","onClose","value","changeLine","filter","mark","type","Number","parseInt","pop","numberOfLines","point","section","sections","pointInsidePolygon","polygon","points","building","closed","isSolution","push","oldSelectedTool","domain","range","lines","checkIfLinesAreAdded","findSectionsInSolutionSet","handleGssLineDataChange","polygons","onConfirmText","render","errors","mathMlOptions","state","arrows","coordinatesOnHover","graph","labels","labelsEnabled","titleEnabled","correctAnswerErrors","createElement","component","variant","RadioGroup","name","changeNumberOfLines","control","checked","label","Fragment","GraphContainer","style","border","axesSettings","includeArrows","backgroundMarks","disabledLabels","disabledTitle","draggableTools","onChangeMarks","newMarks","changeMarks","onCustomReset","onResetClick","showLabels","showTitle","size","onChangeGssLineData","onSolutionSetSelected","toolbarTools","AlertDialog","exports","PropTypes","object","isRequired","func","_default"],"sources":["../src/correct-response.jsx"],"sourcesContent":["import * as React from 'react';\nimport PropTypes from 'prop-types';\nimport { styled } from '@mui/material/styles';\nimport { GraphContainer as Graph } from '@pie-lib/graphing-solution-set';\nimport { AlertDialog } from '@pie-lib/config-ui';\nimport { set } from 'lodash-es';\nimport { RadioGroup, Typography } from '@mui/material';\nimport Radio from '@mui/material/Radio';\nimport FormControlLabel from '@mui/material/FormControlLabel';\nimport { findSectionsInSolutionSet, pointInsidePolygon, checkIfLinesAreAdded } from './utils';\n\nconst SubtitleText = styled(Typography)(({ theme }) => ({\n marginTop: theme.spacing(1.5),\n marginBottom: theme.spacing(1),\n}));\n\nconst RadioButtonClass = styled(FormControlLabel)({\n height: '20px',\n width: 'fit-content',\n padding: '.5rem 0',\n});\n\nconst StyledRadio = styled(Radio)({\n color: '#000000 !important',\n});\n\nconst ErrorMessage = styled('div')(({ theme }) => ({\n fontSize: theme.typography.fontSize - 2,\n color: theme.palette.error.main,\n paddingTop: theme.spacing(1),\n}));\n\nexport class CorrectResponse extends React.Component {\n static propTypes = {\n errors: PropTypes.object,\n model: PropTypes.object.isRequired,\n onChange: PropTypes.func.isRequired,\n };\n\n state = {\n dialog: {\n open: false,\n },\n };\n\n /*\n * Function to handle the alert dialog open and close\n * @param {boolean} open - open or close the dialog\n * @param {function} callback - callback function to be called after setting the state\n * */\n handleAlertDialog = (open, callback) =>\n this.setState(\n {\n dialog: { open },\n },\n callback,\n );\n\n /*\n * Function to change the marks on the graph\n * @param {array} marks - marks to be added on the graph\n * */\n changeMarks = (marks) => {\n const { model, onChange } = this.props;\n const { gssLineData } = model;\n if (gssLineData.selectedTool === 'lineA' && marks.length > 0) {\n marks[0].fill = gssLineData['lineA'].lineType;\n }\n if (gssLineData.selectedTool === 'lineB' && marks.length > 1) {\n marks[1].fill = gssLineData['lineB'].lineType;\n }\n if (marks.length === 0) {\n gssLineData.selectedTool = 'lineA';\n set(model, 'gssLineData', gssLineData);\n }\n set(model, 'answers.correctAnswer.marks', marks);\n onChange(model);\n };\n\n /*\n * Reset the graph to original state and remove all the elements added on the graph\n * */\n onResetClick = () => {\n const { model, onChange } = this.props;\n const { gssLineData, answers } = model;\n this.setState({\n dialog: {\n open: true,\n title: 'Warning',\n text: 'This will remove all the elements added on the graph and reset graph to original state. Are you sure you want to continue?',\n onConfirm: () => {\n // Reset the graph to original state\n answers.correctAnswer.marks = [];\n gssLineData.selectedTool = 'lineA';\n gssLineData.lineA.lineType = 'Solid';\n if (gssLineData.lineB) gssLineData.lineB.lineType = 'Solid';\n set(model, 'answers', answers);\n set(model, 'gssLineData', gssLineData);\n onChange(model);\n this.handleAlertDialog(false);\n },\n onClose: () => this.handleAlertDialog(false),\n },\n });\n };\n\n /*\n * Function to change the number of lines on the graph\n * @param {object} e - event object\n * @param {number} value - number of lines to be added on the graph\n * */\n changeNumberOfLines = (e, value) => {\n const { model } = this.props;\n let gssLineData = model.gssLineData;\n if (gssLineData.selectedTool === 'solutionSet') {\n this.setState({\n dialog: {\n open: true,\n title: 'Warning',\n text: 'Changing number of lines after adding solution set will remove added solution set. Are you sure you want to continue?',\n onConfirm: () => {\n this.changeLine(e, value);\n this.handleAlertDialog(false);\n },\n onClose: () => this.handleAlertDialog(false),\n },\n });\n } else {\n this.changeLine(e, value);\n }\n };\n\n /*\n * Function to change the number of line on the graph\n * @param {object} e - event object\n * @param {number} value - number of lines to be added on the graph\n * */\n changeLine = (e, value) => {\n const { model, onChange } = this.props;\n const { answers } = model;\n let gssLineData = model.gssLineData;\n //remove polygon from correct answer\n answers.correctAnswer.marks = answers.correctAnswer.marks.filter((mark) => mark.type !== 'polygon');\n if (Number.parseInt(value) === 1) {\n //remove lineB from gssLineData and correct answer\n delete gssLineData.lineB;\n if (answers.correctAnswer.marks.length > 1) answers.correctAnswer.marks.pop();\n gssLineData.numberOfLines = 1;\n gssLineData.selectedTool = 'lineA';\n } else {\n gssLineData.numberOfLines = 2;\n if (answers.correctAnswer.marks.length > 0) gssLineData.selectedTool = 'lineB';\n gssLineData.lineB = {\n lineType: 'Solid',\n };\n }\n //reset solution set\n set(model, 'answers', answers);\n set(model, 'gssLineData', gssLineData);\n onChange(model);\n };\n\n /*\n * Function to handle the changes to solution set on the graph\n * @param {object} point - point selected on the graph\n * */\n onSolutionSetSelected = (point) => {\n const { model, onChange } = this.props;\n const { answers, gssLineData } = model;\n for (const section of gssLineData.sections) {\n //check if the point is inside the polygon\n if (pointInsidePolygon(point, section)) {\n let polygon = {\n points: section,\n building: false,\n type: 'polygon',\n closed: true,\n isSolution: true,\n };\n //remove old answer section from correct answer\n answers.correctAnswer.marks = answers.correctAnswer.marks.filter((mark) => mark.type !== 'polygon');\n //add new answer section to correct answer\n answers.correctAnswer.marks.push(polygon);\n break;\n }\n }\n set(model, 'answers', answers);\n onChange(model);\n };\n\n /*\n * Function to handle the changes to line data on the graph\n * @param {object} gssLineData - line data on the graph\n * @param {string} oldSelectedTool - old selected tool\n * */\n onChangeGssLineData = (gssLineData, oldSelectedTool) => {\n const { model } = this.props;\n const { answers, domain, range } = model;\n //handle solution set changes\n if (gssLineData.selectedTool === 'solutionSet') {\n let lines = answers.correctAnswer.marks.filter((mark) => mark.type !== 'polygon');\n if (!checkIfLinesAreAdded(gssLineData, lines)) {\n gssLineData.selectedTool = oldSelectedTool;\n this.setState({\n dialog: {\n open: true,\n title: 'Warning',\n text: 'Please define the line(s) and then select a solution set for the item.',\n onConfirm: () => this.handleAlertDialog(false),\n },\n });\n } else {\n let lines = answers.correctAnswer.marks.filter((mark) => mark.type !== 'polygon');\n gssLineData = findSectionsInSolutionSet(gssLineData, lines, domain, range);\n }\n this.handleGssLineDataChange(gssLineData, answers);\n } else {\n let polygons = answers.correctAnswer.marks.filter((mark) => mark.type === 'polygon');\n if (oldSelectedTool === 'solutionSet' && polygons.length > 0) {\n this.setState({\n dialog: {\n open: true,\n title: 'Warning',\n text: 'Changing a line after adding a solution set will clear your selected solution set. Click \\'Clear Solution Set\\' to change the line. Otherwise, click \\'Cancel\\'.',\n onConfirm: () => {\n answers.correctAnswer.marks = answers.correctAnswer.marks.filter((mark) => mark.type !== 'polygon');\n this.handleGssLineDataChange(gssLineData, answers);\n this.handleAlertDialog(false);\n },\n onConfirmText: 'CLEAR SOLUTION SET',\n onClose: () => {\n gssLineData.selectedTool = oldSelectedTool;\n this.handleGssLineDataChange(gssLineData, answers);\n this.handleAlertDialog(false);\n },\n },\n });\n } else {\n this.handleGssLineDataChange(gssLineData, answers);\n }\n }\n };\n\n /*\n * Function to handle the changes to line data on the graph\n * @param {object} gssLineData - line data on the graph\n * @param {object} answers - correct answer\n * */\n handleGssLineDataChange = (gssLineData, answers) => {\n const { model, onChange } = this.props;\n //handle line type changes from solid to dashed and vice versa\n if (answers.correctAnswer.marks.length > 0 && answers.correctAnswer.marks[0] && gssLineData.lineA) {\n answers.correctAnswer.marks[0].fill = gssLineData.lineA.lineType;\n }\n if (answers.correctAnswer.marks.length > 1 && answers.correctAnswer.marks[1] && gssLineData.lineB) {\n answers.correctAnswer.marks[1].fill = gssLineData.lineB.lineType;\n }\n //check if line is added to the graph before switching to lineB\n if (\n (gssLineData.selectedTool === 'lineB' && answers.correctAnswer.marks.length === 0) ||\n (gssLineData.selectedTool === 'lineB' && answers.correctAnswer.marks[0].building)\n ) {\n this.setState({\n dialog: {\n open: true,\n title: 'Warning',\n text: 'Please add Line A to the graph before adding Line B',\n onConfirm: () => this.handleAlertDialog(false),\n },\n });\n gssLineData.selectedTool = 'lineA';\n }\n //check if lineB is added to the graph before switching to lineA\n if (\n gssLineData.selectedTool === 'lineA' &&\n answers.correctAnswer.marks.length > 1 &&\n answers.correctAnswer.marks[1].building\n ) {\n this.setState({\n dialog: {\n open: true,\n title: 'Warning',\n text: 'Please add Line B to the graph before switching to Line A',\n onConfirm: () => this.handleAlertDialog(false),\n },\n });\n gssLineData.selectedTool = 'lineB';\n }\n set(model, 'gssLineData', gssLineData);\n set(model, 'answers', answers);\n onChange(model);\n };\n\n /*\n * Function to update the model\n * @param {object} props - updated props\n * */\n updateModel = (props) => {\n const { model, onChange } = this.props;\n onChange({\n ...model,\n ...props,\n });\n };\n\n /*\n * Render the component\n * */\n render() {\n const { errors, model, mathMlOptions = {} } = this.props;\n const { dialog } = this.state;\n //get the default values to GssLineData\n const {\n gssLineData = {\n numberOfLines: 1,\n selectedTool: 'lineA',\n lineA: {\n lineType: 'Solid',\n },\n },\n arrows,\n coordinatesOnHover,\n domain,\n graph = {},\n labels,\n labelsEnabled,\n range,\n title,\n titleEnabled,\n answers,\n } = model || {};\n const { correctAnswerErrors = '' } = errors || {};\n return (\n <div>\n <Typography component=\"div\" variant=\"h6\">\n Define Line Type(s) and Correct Response\n </Typography>\n <SubtitleText component=\"div\" variant=\"body1\">\n Use this interface to choose how many lines students will be able to draw, and to define the correct answer.\n </SubtitleText>\n <SubtitleText component=\"div\" variant=\"body1\">\n Choose Number of Lines\n </SubtitleText>\n <RadioGroup name=\"numberOfLines\" value={gssLineData.numberOfLines} onChange={this.changeNumberOfLines}>\n <RadioButtonClass\n value=\"1\"\n control={<StyledRadio checked={gssLineData.numberOfLines === 1} />}\n label=\"One\"\n />\n <RadioButtonClass\n value=\"2\"\n control={<StyledRadio checked={gssLineData.numberOfLines === 2} />}\n label=\"Two\"\n />\n </RadioGroup>\n <React.Fragment>\n <Graph\n style={correctAnswerErrors['correctAnswer'] && { border: '2px solid red' }}\n axesSettings={{ includeArrows: arrows }}\n backgroundMarks={[]}\n coordinatesOnHover={coordinatesOnHover}\n disabledLabels={true}\n disabledTitle={true}\n domain={domain}\n draggableTools={true}\n labels={labels}\n marks={answers && answers.correctAnswer && answers.correctAnswer.marks ? answers.correctAnswer.marks : []}\n onChangeMarks={(newMarks) => this.changeMarks(newMarks)}\n onCustomReset={this.onResetClick}\n range={range}\n showLabels={labelsEnabled}\n showTitle={titleEnabled}\n size={{ width: graph.width, height: graph.height }}\n title={title}\n gssLineData={gssLineData}\n onChangeGssLineData={this.onChangeGssLineData}\n onSolutionSetSelected={this.onSolutionSetSelected}\n toolbarTools={['line', 'polygon']}\n mathMlOptions={mathMlOptions}\n />\n {correctAnswerErrors['correctAnswer'] && (\n <ErrorMessage>{correctAnswerErrors['correctAnswer']}</ErrorMessage>\n )}\n </React.Fragment>\n <AlertDialog\n open={dialog.open}\n title={dialog.title}\n text={dialog.text}\n onClose={dialog.onClose}\n onConfirm={dialog.onConfirm}\n onConfirmText={dialog.onConfirmText ? dialog.onConfirmText : 'OK'}\n />\n </div>\n );\n }\n}\n\nexport default CorrectResponse;\n"],"mappings":"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","ignoreList":[]}