@pie-element/graphing 3.5.0 → 3.5.1-beta.587

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.
@@ -1,13 +1,15 @@
1
1
  "use strict";
2
2
 
3
- var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard");
4
-
5
3
  var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
6
4
 
5
+ var _typeof = require("@babel/runtime/helpers/typeof");
6
+
7
7
  Object.defineProperty(exports, "__esModule", {
8
8
  value: true
9
9
  });
10
- exports["default"] = exports.CorrectResponse = exports.Tools = void 0;
10
+ exports["default"] = exports.Tools = exports.CorrectResponse = void 0;
11
+
12
+ var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
11
13
 
12
14
  var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
13
15
 
@@ -35,13 +37,27 @@ var _styles = require("@material-ui/core/styles");
35
37
 
36
38
  var _graphing = require("@pie-lib/graphing");
37
39
 
40
+ var _configUi = require("@pie-lib/config-ui");
41
+
42
+ var _Delete = _interopRequireDefault(require("@material-ui/icons/Delete"));
43
+
38
44
  var _lodash = require("lodash");
39
45
 
40
- function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = (0, _getPrototypeOf2["default"])(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = (0, _getPrototypeOf2["default"])(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return (0, _possibleConstructorReturn2["default"])(this, result); }; }
46
+ var _core = require("@material-ui/core");
47
+
48
+ var _renderUi = require("@pie-lib/render-ui");
49
+
50
+ function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
41
51
 
42
- function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }
52
+ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { "default": obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
43
53
 
44
- var allTools = _graphing.tools.allTools;
54
+ function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
55
+
56
+ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { (0, _defineProperty2["default"])(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
57
+
58
+ function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = (0, _getPrototypeOf2["default"])(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = (0, _getPrototypeOf2["default"])(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return (0, _possibleConstructorReturn2["default"])(this, result); }; }
59
+
60
+ function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
45
61
 
46
62
  var styles = function styles(theme) {
47
63
  return {
@@ -49,19 +65,21 @@ var styles = function styles(theme) {
49
65
  flex: 1
50
66
  },
51
67
  graphingTools: {
52
- marginTop: theme.spacing.unit * 3,
53
68
  color: '#ababab'
54
69
  },
55
70
  availableTools: {
56
- marginTop: theme.spacing.unit * 3,
57
- marginBottom: theme.spacing.unit * 3,
71
+ marginTop: theme.spacing.unit,
58
72
  display: 'flex'
59
73
  },
60
74
  availableTool: {
61
75
  cursor: 'pointer',
62
76
  margin: theme.spacing.unit,
63
77
  padding: theme.spacing.unit,
64
- textTransform: 'capitalize'
78
+ border: '2px solid white',
79
+ textTransform: 'capitalize',
80
+ '&:hover': {
81
+ color: '#4d4d4d'
82
+ }
65
83
  },
66
84
  selectedTool: {
67
85
  background: '#d8d8d8',
@@ -70,39 +88,123 @@ var styles = function styles(theme) {
70
88
  container: {
71
89
  border: '2px solid #ababab',
72
90
  borderRadius: '4px',
73
- padding: "".concat(theme.spacing.unit * 2, "px ").concat(theme.spacing.unit * 4, "px"),
91
+ padding: "0 ".concat(theme.spacing.unit * 4, "px ").concat(theme.spacing.unit * 2, "px"),
74
92
  background: '#fafafa'
75
93
  },
76
94
  button: {
77
- marginTop: theme.spacing.unit * 3,
95
+ margin: "".concat(theme.spacing.unit * 3, "px 0"),
78
96
  cursor: 'pointer',
79
97
  background: '#eee',
80
- padding: theme.spacing.unit * 2,
98
+ padding: theme.spacing.unit * 1.5,
81
99
  width: 'fit-content',
82
- borderRadius: '4px'
100
+ borderRadius: '4px',
101
+ '&:hover': {
102
+ background: '#d8d8d8'
103
+ }
104
+ },
105
+ responseTitle: {
106
+ display: 'flex',
107
+ alignItems: 'center',
108
+ marginTop: '20px'
109
+ },
110
+ iconButton: {
111
+ marginLeft: '6px',
112
+ color: '#6d6d6d',
113
+ '&:hover': {
114
+ cursor: 'pointer',
115
+ color: '#000000'
116
+ }
117
+ },
118
+ name: {
119
+ margin: '5px 0'
120
+ },
121
+ subtitleText: {
122
+ marginTop: theme.spacing.unit * 1.5,
123
+ marginBottom: theme.spacing.unit
124
+ },
125
+ toolsHeader: {
126
+ display: 'flex',
127
+ alignItems: 'center',
128
+ justifyContent: 'space-between'
129
+ },
130
+ defaultTool: {
131
+ display: 'flex',
132
+ alignItems: 'center',
133
+ width: '300px'
134
+ },
135
+ defaultToolSelect: {
136
+ marginLeft: theme.spacing.unit,
137
+ textTransform: 'uppercase',
138
+ color: '#4d4d4d'
139
+ },
140
+ menuItem: {
141
+ textTransform: 'uppercase'
142
+ },
143
+ noDefaultTool: {
144
+ padding: theme.spacing.unit / 2
145
+ },
146
+ error: {
147
+ color: 'red'
148
+ },
149
+ errorMessage: {
150
+ fontSize: '14px',
151
+ color: 'red',
152
+ marginTop: theme.spacing.unit
153
+ },
154
+ graphError: {
155
+ border: '2px solid red'
83
156
  }
84
157
  };
85
158
  };
86
159
 
87
160
  var Tools = function Tools(_ref) {
88
161
  var classes = _ref.classes,
162
+ availableTools = _ref.availableTools,
163
+ defaultTool = _ref.defaultTool,
164
+ hasErrors = _ref.hasErrors,
89
165
  toolbarTools = _ref.toolbarTools,
90
- toggleToolBarTool = _ref.toggleToolBarTool;
91
- // label has to be placed at the end of the list
92
- var allToolsNoLabel = (allTools || []).filter(function (tool) {
166
+ toggleToolBarTool = _ref.toggleToolBarTool,
167
+ onDefaultToolChange = _ref.onDefaultToolChange;
168
+ var allTools = availableTools || [];
169
+ var isLabelAvailable = allTools.includes('label');
170
+ var toolbarToolsNoLabel = (toolbarTools || []).filter(function (tool) {
93
171
  return tool !== 'label';
94
172
  });
173
+
174
+ if (isLabelAvailable) {
175
+ // label has to be placed at the end of the list
176
+ var allToolsNoLabel = allTools.filter(function (tool) {
177
+ return tool !== 'label';
178
+ });
179
+ allTools = [].concat((0, _toConsumableArray2["default"])(allToolsNoLabel), ['label']);
180
+ }
181
+
95
182
  return /*#__PURE__*/React.createElement("div", {
96
183
  className: classes.graphingTools
97
- }, "GRAPHING TOOLS", /*#__PURE__*/React.createElement("div", {
184
+ }, /*#__PURE__*/React.createElement("div", {
185
+ className: classes.toolsHeader
186
+ }, /*#__PURE__*/React.createElement("span", null, "GRAPHING TOOLS"), toolbarToolsNoLabel.length > 0 && /*#__PURE__*/React.createElement("div", {
187
+ className: classes.defaultTool
188
+ }, /*#__PURE__*/React.createElement("span", null, "Default graphing tool:"), /*#__PURE__*/React.createElement(_core.Select, {
189
+ className: classes.defaultToolSelect,
190
+ onChange: onDefaultToolChange,
191
+ value: defaultTool,
192
+ disableUnderline: true
193
+ }, toolbarToolsNoLabel.map(function (tool, index) {
194
+ return /*#__PURE__*/React.createElement(_core.MenuItem, {
195
+ key: index,
196
+ className: classes.menuItem,
197
+ value: tool
198
+ }, tool);
199
+ })))), /*#__PURE__*/React.createElement("div", {
98
200
  className: classes.availableTools
99
- }, [].concat((0, _toConsumableArray2["default"])(allToolsNoLabel), ['label']).map(function (tool) {
201
+ }, allTools.map(function (tool) {
100
202
  var selected = toolbarTools.find(function (t) {
101
203
  return t === tool;
102
204
  });
103
205
  return /*#__PURE__*/React.createElement("div", {
104
206
  key: tool,
105
- className: (0, _classnames["default"])(classes.availableTool, selected && classes.selectedTool),
207
+ className: (0, _classnames["default"])(classes.availableTool, selected && classes.selectedTool, hasErrors && tool !== 'label' && classes.error),
106
208
  onClick: function onClick() {
107
209
  return toggleToolBarTool(tool);
108
210
  }
@@ -132,6 +234,18 @@ var CorrectResponse = /*#__PURE__*/function (_React$Component) {
132
234
  }
133
235
 
134
236
  _this = _super.call.apply(_super, [this].concat(args));
237
+ (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "state", {
238
+ dialog: {
239
+ open: false
240
+ }
241
+ });
242
+ (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "handleAlertDialog", function (open, callback) {
243
+ return _this.setState({
244
+ dialog: {
245
+ open: open
246
+ }
247
+ }, callback);
248
+ });
135
249
  (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "changeMarks", function (key, marks) {
136
250
  var _this$props = _this.props,
137
251
  model = _this$props.model,
@@ -139,6 +253,21 @@ var CorrectResponse = /*#__PURE__*/function (_React$Component) {
139
253
  (0, _lodash.set)(model, "answers.".concat(key, ".marks"), marks);
140
254
  onChange(model);
141
255
  });
256
+ (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "filterMarks", function (tool) {
257
+ var answers = _this.props.model.answers;
258
+ return Object.entries(answers || {}).reduce(function (object, _ref2) {
259
+ var _ref3 = (0, _slicedToArray2["default"])(_ref2, 2),
260
+ key = _ref3[0],
261
+ answer = _ref3[1];
262
+
263
+ object[key] = _objectSpread(_objectSpread({}, answer), {}, {
264
+ marks: (answer.marks || []).filter(function (mark) {
265
+ return mark.type !== tool;
266
+ })
267
+ });
268
+ return object;
269
+ }, {});
270
+ });
142
271
  (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "changeToolbarTools", function (toolbarTools) {
143
272
  var _this$props2 = _this.props,
144
273
  model = _this$props2.model,
@@ -146,28 +275,84 @@ var CorrectResponse = /*#__PURE__*/function (_React$Component) {
146
275
  model.toolbarTools = toolbarTools;
147
276
  onChange(model);
148
277
  });
278
+ (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "updateModel", function (props) {
279
+ var _this$props3 = _this.props,
280
+ model = _this$props3.model,
281
+ onChange = _this$props3.onChange;
282
+ onChange(_objectSpread(_objectSpread({}, model), props));
283
+ });
149
284
  (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "toggleToolBarTool", function (tool) {
150
- var toolbarTools = _this.props.model.toolbarTools;
285
+ var _this$props$model = _this.props.model,
286
+ defaultTool = _this$props$model.defaultTool,
287
+ toolbarTools = _this$props$model.toolbarTools,
288
+ _this$props$model$ans = _this$props$model.answers,
289
+ answers = _this$props$model$ans === void 0 ? {} : _this$props$model$ans;
290
+ var updatedToolbarTools = (0, _toConsumableArray2["default"])(toolbarTools);
291
+ var newDefaultTool = defaultTool;
151
292
  var index = toolbarTools.findIndex(function (t) {
152
293
  return tool === t;
153
294
  });
154
295
 
155
296
  if (index >= 0) {
156
- var update = (0, _toConsumableArray2["default"])(toolbarTools);
157
- update.splice(index, 1);
158
-
159
- _this.changeToolbarTools(update);
297
+ var updatedAnswers = _this.filterMarks(tool);
298
+
299
+ updatedToolbarTools.splice(index, 1);
300
+
301
+ if (tool === defaultTool) {
302
+ var toolbarToolsNoLabel = (updatedToolbarTools || []).filter(function (tool) {
303
+ return tool !== 'label';
304
+ });
305
+ newDefaultTool = toolbarToolsNoLabel.length && toolbarToolsNoLabel[0] || '';
306
+ }
307
+
308
+ if (!(0, _lodash.isEqual)(answers, updatedAnswers)) {
309
+ _this.setState({
310
+ dialog: {
311
+ open: true,
312
+ title: 'Warning',
313
+ text: "Correct answer includes one or more ".concat(tool, " objects and all of them will be deleted."),
314
+ onConfirm: function onConfirm() {
315
+ return _this.handleAlertDialog(false, _this.updateModel({
316
+ toolbarTools: updatedToolbarTools,
317
+ answers: updatedAnswers,
318
+ defaultTool: newDefaultTool
319
+ }));
320
+ },
321
+ onClose: function onClose() {
322
+ return _this.handleAlertDialog(false);
323
+ }
324
+ }
325
+ });
326
+
327
+ return;
328
+ }
160
329
  } else {
161
- _this.changeToolbarTools([].concat((0, _toConsumableArray2["default"])(toolbarTools), [tool]));
330
+ updatedToolbarTools.push(tool);
331
+
332
+ if (defaultTool === '' && tool !== 'label') {
333
+ newDefaultTool = tool;
334
+ }
162
335
  }
336
+
337
+ _this.updateModel({
338
+ toolbarTools: updatedToolbarTools,
339
+ defaultTool: newDefaultTool
340
+ });
341
+ });
342
+ (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "onDefaultToolChange", function (event) {
343
+ var value = event.target.value;
344
+
345
+ _this.updateModel({
346
+ defaultTool: value
347
+ });
163
348
  });
164
349
  (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "addAlternateResponse", function () {
165
- var _this$props3 = _this.props,
166
- model = _this$props3.model,
167
- onChange = _this$props3.onChange;
350
+ var _this$props4 = _this.props,
351
+ model = _this$props4.model,
352
+ onChange = _this$props4.onChange;
168
353
 
169
- var _ref2 = model || {},
170
- answers = _ref2.answers;
354
+ var _ref4 = model || {},
355
+ answers = _ref4.answers;
171
356
 
172
357
  var answersKeys = Object.keys(answers || {});
173
358
  (0, _lodash.set)(model, "answers.".concat("alternate".concat(answersKeys.length)), {
@@ -176,6 +361,44 @@ var CorrectResponse = /*#__PURE__*/function (_React$Component) {
176
361
  });
177
362
  onChange(model);
178
363
  });
364
+ (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "deleteAlternateResponse", function (key, answer) {
365
+ var _this$props5 = _this.props,
366
+ model = _this$props5.model,
367
+ onChange = _this$props5.onChange;
368
+
369
+ var _ref5 = model || {},
370
+ answers = _ref5.answers;
371
+
372
+ var _ref6 = answer || {},
373
+ _ref6$marks = _ref6.marks,
374
+ marks = _ref6$marks === void 0 ? [] : _ref6$marks,
375
+ name = _ref6.name;
376
+
377
+ var deleteAnswer = function deleteAnswer() {
378
+ delete answers[key];
379
+ onChange(model);
380
+ };
381
+
382
+ if (marks.length) {
383
+ _this.setState({
384
+ dialog: {
385
+ open: true,
386
+ title: 'Warning',
387
+ text: "".concat(name, " includes one or more shapes and the entire response will be deleted."),
388
+ onConfirm: function onConfirm() {
389
+ return _this.handleAlertDialog(false, deleteAnswer);
390
+ },
391
+ onClose: function onClose() {
392
+ return _this.handleAlertDialog(false);
393
+ }
394
+ }
395
+ });
396
+
397
+ return;
398
+ }
399
+
400
+ deleteAnswer();
401
+ });
179
402
  return _this;
180
403
  }
181
404
 
@@ -184,61 +407,116 @@ var CorrectResponse = /*#__PURE__*/function (_React$Component) {
184
407
  value: function render() {
185
408
  var _this2 = this;
186
409
 
187
- var _this$props4 = this.props,
188
- classes = _this$props4.classes,
189
- model = _this$props4.model;
190
-
191
- var _ref3 = model || {},
192
- graph = _ref3.graph;
193
-
194
- var _ref4 = model || {},
195
- answers = _ref4.answers,
196
- arrows = _ref4.arrows,
197
- backgroundMarks = _ref4.backgroundMarks,
198
- domain = _ref4.domain,
199
- labels = _ref4.labels,
200
- range = _ref4.range,
201
- title = _ref4.title,
202
- toolbarTools = _ref4.toolbarTools;
203
-
204
- graph = graph || {};
205
- var answersKeys = Object.keys(answers || {});
206
- return /*#__PURE__*/React.createElement("div", null, "Define Correct Response", /*#__PURE__*/React.createElement(Tools, {
410
+ var _this$props6 = this.props,
411
+ availableTools = _this$props6.availableTools,
412
+ classes = _this$props6.classes,
413
+ errors = _this$props6.errors,
414
+ model = _this$props6.model;
415
+ var dialog = this.state.dialog;
416
+
417
+ var _ref7 = model || {},
418
+ _ref7$answers = _ref7.answers,
419
+ answers = _ref7$answers === void 0 ? {} : _ref7$answers,
420
+ arrows = _ref7.arrows,
421
+ backgroundMarks = _ref7.backgroundMarks,
422
+ coordinatesOnHover = _ref7.coordinatesOnHover,
423
+ defaultTool = _ref7.defaultTool,
424
+ domain = _ref7.domain,
425
+ _ref7$graph = _ref7.graph,
426
+ graph = _ref7$graph === void 0 ? {} : _ref7$graph,
427
+ labels = _ref7.labels,
428
+ labelsEnabled = _ref7.labelsEnabled,
429
+ range = _ref7.range,
430
+ title = _ref7.title,
431
+ titleEnabled = _ref7.titleEnabled,
432
+ toolbarTools = _ref7.toolbarTools;
433
+
434
+ var _ref8 = errors || {},
435
+ _ref8$correctAnswerEr = _ref8.correctAnswerErrors,
436
+ correctAnswerErrors = _ref8$correctAnswerEr === void 0 ? {} : _ref8$correctAnswerEr,
437
+ toolbarToolsError = _ref8.toolbarToolsError;
438
+
439
+ return /*#__PURE__*/React.createElement("div", null, /*#__PURE__*/React.createElement(_core.Typography, {
440
+ component: "div",
441
+ variant: "subheading"
442
+ }, /*#__PURE__*/React.createElement("span", null, "Define Tool Set and Correct Response")), /*#__PURE__*/React.createElement(_core.Typography, {
443
+ component: "div",
444
+ variant: "body1",
445
+ className: classes.subtitleText
446
+ }, /*#__PURE__*/React.createElement("span", null, "Use this interface to choose which graphing tools students will be able to use, and to define the correct answer")), /*#__PURE__*/React.createElement(Tools, {
207
447
  classes: classes,
448
+ availableTools: availableTools,
449
+ defaultTool: defaultTool,
450
+ hasErrors: !!toolbarToolsError,
451
+ onDefaultToolChange: this.onDefaultToolChange,
208
452
  toggleToolBarTool: this.toggleToolBarTool,
209
453
  toolbarTools: toolbarTools
210
- }), /*#__PURE__*/React.createElement("div", {
211
- className: classes.container
212
- }, answersKeys.map(function (mark) {
213
- var _ref5 = answers[mark] || {},
214
- marks = _ref5.marks,
215
- name = _ref5.name;
454
+ }), toolbarToolsError && /*#__PURE__*/React.createElement("div", {
455
+ className: classes.errorMessage
456
+ }, toolbarToolsError), Object.entries(answers || {}).map(function (_ref9) {
457
+ var _ref10 = (0, _slicedToArray2["default"])(_ref9, 2),
458
+ key = _ref10[0],
459
+ answer = _ref10[1];
460
+
461
+ var _ref11 = answer || {},
462
+ _ref11$marks = _ref11.marks,
463
+ marks = _ref11$marks === void 0 ? [] : _ref11$marks,
464
+ name = _ref11.name;
216
465
 
217
466
  return /*#__PURE__*/React.createElement("div", {
218
467
  key: "correct-response-graph-".concat(name)
219
- }, /*#__PURE__*/React.createElement("p", null, name), /*#__PURE__*/React.createElement(_graphing.GraphContainer, {
468
+ }, /*#__PURE__*/React.createElement("div", {
469
+ className: classes.responseTitle
470
+ }, /*#__PURE__*/React.createElement("p", {
471
+ className: classes.name
472
+ }, name), key !== 'correctAnswer' && /*#__PURE__*/React.createElement(_Delete["default"], {
473
+ className: classes.iconButton,
474
+ onClick: function onClick() {
475
+ return _this2.deleteAlternateResponse(key, answer);
476
+ }
477
+ })), /*#__PURE__*/React.createElement(_graphing.GraphContainer, {
478
+ className: correctAnswerErrors[key] && classes.graphError,
220
479
  axesSettings: {
221
480
  includeArrows: arrows
222
481
  },
223
482
  backgroundMarks: backgroundMarks,
483
+ coordinatesOnHover: coordinatesOnHover,
484
+ disabledLabels: true,
485
+ disabledTitle: true,
224
486
  domain: domain,
487
+ draggableTools: key === 'correctAnswer',
225
488
  labels: labels,
226
489
  marks: marks,
227
490
  onChangeMarks: function onChangeMarks(newMarks) {
228
- return _this2.changeMarks(mark, newMarks);
491
+ return _this2.changeMarks(key, newMarks);
229
492
  },
230
493
  range: range,
494
+ showLabels: labelsEnabled,
495
+ showTitle: titleEnabled,
231
496
  size: {
232
497
  width: graph.width,
233
498
  height: graph.height
234
499
  },
235
500
  title: title,
236
- toolbarTools: toolbarTools
237
- }));
501
+ toolbarTools: toolbarTools,
502
+ onChangeTools: function onChangeTools(toolbarTools) {
503
+ return _this2.updateModel({
504
+ toolbarTools: toolbarTools
505
+ });
506
+ }
507
+ }), correctAnswerErrors[key] && /*#__PURE__*/React.createElement("div", {
508
+ className: classes.errorMessage
509
+ }, correctAnswerErrors[key]));
238
510
  }), /*#__PURE__*/React.createElement("div", {
239
511
  className: classes.button,
240
512
  onClick: this.addAlternateResponse
241
- }, "ADD ALTERNATE")));
513
+ }, "ADD ALTERNATE"), /*#__PURE__*/React.createElement(_configUi.AlertDialog, {
514
+ open: dialog.open,
515
+ title: dialog.title,
516
+ text: dialog.text,
517
+ onClose: dialog.onClose,
518
+ onConfirm: dialog.onConfirm
519
+ }));
242
520
  }
243
521
  }]);
244
522
  return CorrectResponse;
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/correct-response.jsx"],"names":["allTools","tools","styles","theme","column","flex","graphingTools","marginTop","spacing","unit","color","availableTools","marginBottom","display","availableTool","cursor","margin","padding","textTransform","selectedTool","background","border","container","borderRadius","button","width","Tools","classes","toolbarTools","toggleToolBarTool","allToolsNoLabel","filter","tool","map","selected","find","t","toUpperCase","propTypes","PropTypes","object","isRequired","arrayOf","string","func","CorrectResponse","key","marks","props","model","onChange","index","findIndex","update","splice","changeToolbarTools","answers","answersKeys","Object","keys","length","name","graph","arrows","backgroundMarks","domain","labels","range","title","mark","includeArrows","newMarks","changeMarks","height","addAlternateResponse","React","Component","String"],"mappings":"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","sourcesContent":["import * as React from 'react';\nimport classnames from 'classnames';\nimport PropTypes from 'prop-types';\nimport { withStyles } from '@material-ui/core/styles';\nimport { GraphContainer as Graph, tools } from '@pie-lib/graphing';\n\nconst { allTools } = tools;\n\nimport { set } from 'lodash';\n\nconst styles = theme => ({\n column: {\n flex: 1\n },\n graphingTools: {\n marginTop: theme.spacing.unit * 3,\n color: '#ababab'\n },\n availableTools: {\n marginTop: theme.spacing.unit * 3,\n marginBottom: theme.spacing.unit * 3,\n display: 'flex'\n },\n availableTool: {\n cursor: 'pointer',\n margin: theme.spacing.unit,\n padding: theme.spacing.unit,\n textTransform: 'capitalize'\n },\n selectedTool: {\n background: '#d8d8d8',\n border: '2px solid #ababab'\n },\n container: {\n border: '2px solid #ababab',\n borderRadius: '4px',\n padding: `${theme.spacing.unit * 2}px ${theme.spacing.unit * 4}px`,\n background: '#fafafa'\n },\n button: {\n marginTop: theme.spacing.unit * 3,\n cursor: 'pointer',\n background: '#eee',\n padding: theme.spacing.unit * 2,\n width: 'fit-content',\n borderRadius: '4px'\n }\n});\n\nexport const Tools = ({ classes, toolbarTools, toggleToolBarTool }) => {\n // label has to be placed at the end of the list\n const allToolsNoLabel = (allTools || []).filter(tool => tool !== 'label');\n\n return (\n <div className={classes.graphingTools}>\n GRAPHING TOOLS\n\n <div className={classes.availableTools}>\n {([...allToolsNoLabel, 'label']).map(tool => {\n const selected = toolbarTools.find(t => t === tool);\n\n return (\n <div\n key={tool}\n className={classnames(\n classes.availableTool,\n selected && classes.selectedTool\n )}\n onClick={() => toggleToolBarTool(tool)}\n >\n {tool.toUpperCase()}\n </div>\n );\n })}\n </div>\n </div>\n );\n};\n\nTools.propTypes = {\n classes: PropTypes.object.isRequired,\n toolbarTools: PropTypes.arrayOf(PropTypes.string),\n toggleToolBarTool: PropTypes.func\n};\n\nexport class CorrectResponse extends React.Component {\n static propTypes = {\n classes: PropTypes.object.isRequired,\n model: PropTypes.object.isRequired,\n onChange: PropTypes.func.isRequired,\n toolbarTools: PropTypes.arrayOf(PropTypes.String)\n };\n\n changeMarks = (key, marks) => {\n const { model, onChange } = this.props;\n\n set(model, `answers.${key}.marks`, marks);\n onChange(model);\n };\n\n changeToolbarTools = toolbarTools => {\n const { model, onChange } = this.props;\n model.toolbarTools = toolbarTools;\n\n onChange(model);\n };\n\n toggleToolBarTool = tool => {\n const { toolbarTools } = this.props.model;\n\n const index = toolbarTools.findIndex(t => tool === t);\n\n if (index >= 0) {\n const update = [...toolbarTools];\n update.splice(index, 1);\n this.changeToolbarTools(update);\n } else {\n this.changeToolbarTools([...toolbarTools, tool]);\n }\n };\n\n addAlternateResponse = () => {\n const { model, onChange } = this.props;\n const { answers } = model || {};\n const answersKeys = Object.keys(answers || {});\n\n set(\n model,\n `answers.${`alternate${answersKeys.length}`}`,\n { name: `Alternate ${answersKeys.length}`, marks: [] }\n );\n onChange(model);\n };\n\n render() {\n const { classes, model } = this.props;\n let { graph } = model || {};\n const { answers, arrows, backgroundMarks, domain, labels, range, title, toolbarTools } = model || {};\n graph = graph || {};\n\n const answersKeys = Object.keys(answers || {});\n\n return (\n <div>\n Define Correct Response\n <Tools\n classes={classes}\n toggleToolBarTool={this.toggleToolBarTool}\n toolbarTools={toolbarTools}\n />\n\n <div className={classes.container}>\n {answersKeys.map(mark => {\n const { marks, name } = answers[mark] || {};\n\n return (\n <div key={`correct-response-graph-${name}`}>\n <p>{name}</p>\n\n <Graph\n axesSettings={{ includeArrows: arrows }}\n backgroundMarks={backgroundMarks}\n domain={domain}\n labels={labels}\n marks={marks}\n onChangeMarks={newMarks => this.changeMarks(mark, newMarks)}\n range={range}\n size={{ width: graph.width, height: graph.height }}\n title={title}\n toolbarTools={toolbarTools}\n />\n </div>\n )\n })}\n\n <div className={classes.button} onClick={this.addAlternateResponse}>\n ADD ALTERNATE\n </div>\n </div>\n </div>\n );\n }\n}\n\nexport default withStyles(styles)(CorrectResponse);\n"],"file":"correct-response.js"}
1
+ {"version":3,"sources":["../src/correct-response.jsx"],"names":["styles","theme","column","flex","graphingTools","color","availableTools","marginTop","spacing","unit","display","availableTool","cursor","margin","padding","border","textTransform","selectedTool","background","container","borderRadius","button","width","responseTitle","alignItems","iconButton","marginLeft","name","subtitleText","marginBottom","toolsHeader","justifyContent","defaultTool","defaultToolSelect","menuItem","noDefaultTool","error","errorMessage","fontSize","graphError","Tools","classes","hasErrors","toolbarTools","toggleToolBarTool","onDefaultToolChange","allTools","isLabelAvailable","includes","toolbarToolsNoLabel","filter","tool","allToolsNoLabel","length","map","index","selected","find","t","toUpperCase","propTypes","PropTypes","object","isRequired","arrayOf","string","func","CorrectResponse","dialog","open","callback","setState","key","marks","props","model","onChange","answers","Object","entries","reduce","answer","mark","type","updatedToolbarTools","newDefaultTool","findIndex","updatedAnswers","filterMarks","splice","title","text","onConfirm","handleAlertDialog","updateModel","onClose","push","event","value","target","answersKeys","keys","deleteAnswer","errors","state","arrows","backgroundMarks","coordinatesOnHover","domain","graph","labels","labelsEnabled","range","titleEnabled","correctAnswerErrors","toolbarToolsError","deleteAlternateResponse","includeArrows","newMarks","changeMarks","height","addAlternateResponse","React","Component","String"],"mappings":"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","sourcesContent":["import * as React from 'react';\nimport classnames from 'classnames';\nimport PropTypes from 'prop-types';\nimport { withStyles } from '@material-ui/core/styles';\nimport { GraphContainer as Graph } from '@pie-lib/graphing';\nimport { AlertDialog } from '@pie-lib/config-ui';\nimport Delete from '@material-ui/icons/Delete';\nimport { set, isEqual } from 'lodash';\nimport { MenuItem, Select, Typography } from '@material-ui/core';\nimport { color } from '@pie-lib/render-ui';\n\nconst styles = (theme) => ({\n column: {\n flex: 1,\n },\n graphingTools: {\n color: '#ababab',\n },\n availableTools: {\n marginTop: theme.spacing.unit,\n display: 'flex',\n },\n availableTool: {\n cursor: 'pointer',\n margin: theme.spacing.unit,\n padding: theme.spacing.unit,\n border: '2px solid white',\n textTransform: 'capitalize',\n '&:hover': {\n color: '#4d4d4d',\n },\n },\n selectedTool: {\n background: '#d8d8d8',\n border: '2px solid #ababab',\n },\n container: {\n border: '2px solid #ababab',\n borderRadius: '4px',\n padding: `0 ${theme.spacing.unit * 4}px ${theme.spacing.unit * 2}px`,\n background: '#fafafa',\n },\n button: {\n margin: `${theme.spacing.unit * 3}px 0`,\n cursor: 'pointer',\n background: '#eee',\n padding: theme.spacing.unit * 1.5,\n width: 'fit-content',\n borderRadius: '4px',\n '&:hover': {\n background: '#d8d8d8',\n },\n },\n responseTitle: {\n display: 'flex',\n alignItems: 'center',\n marginTop: '20px',\n },\n iconButton: {\n marginLeft: '6px',\n color: '#6d6d6d',\n '&:hover': {\n cursor: 'pointer',\n color: '#000000',\n },\n },\n name: {\n margin: '5px 0',\n },\n subtitleText: {\n marginTop: theme.spacing.unit * 1.5,\n marginBottom: theme.spacing.unit,\n },\n toolsHeader: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n },\n defaultTool: {\n display: 'flex',\n alignItems: 'center',\n width: '300px',\n },\n defaultToolSelect: {\n marginLeft: theme.spacing.unit,\n textTransform: 'uppercase',\n color: '#4d4d4d',\n },\n menuItem: {\n textTransform: 'uppercase',\n },\n noDefaultTool: {\n padding: theme.spacing.unit / 2,\n },\n error: {\n color: 'red',\n },\n errorMessage: {\n fontSize: '14px',\n color: 'red',\n marginTop: theme.spacing.unit,\n },\n graphError: {\n border: '2px solid red',\n },\n});\n\nexport const Tools = ({\n classes,\n availableTools,\n defaultTool,\n hasErrors,\n toolbarTools,\n toggleToolBarTool,\n onDefaultToolChange,\n}) => {\n let allTools = availableTools || [];\n const isLabelAvailable = allTools.includes('label');\n const toolbarToolsNoLabel = (toolbarTools || []).filter(\n (tool) => tool !== 'label'\n );\n\n if (isLabelAvailable) {\n // label has to be placed at the end of the list\n const allToolsNoLabel = allTools.filter((tool) => tool !== 'label');\n allTools = [...allToolsNoLabel, 'label'];\n }\n\n return (\n <div className={classes.graphingTools}>\n <div className={classes.toolsHeader}>\n <span>GRAPHING TOOLS</span>\n {toolbarToolsNoLabel.length > 0 && (\n <div className={classes.defaultTool}>\n <span>Default graphing tool:</span>\n <Select\n className={classes.defaultToolSelect}\n onChange={onDefaultToolChange}\n value={defaultTool}\n disableUnderline\n >\n {toolbarToolsNoLabel.map((tool, index) => (\n <MenuItem key={index} className={classes.menuItem} value={tool}>\n {tool}\n </MenuItem>\n ))}\n </Select>\n </div>\n )}\n </div>\n <div className={classes.availableTools}>\n {allTools.map((tool) => {\n const selected = toolbarTools.find((t) => t === tool);\n\n return (\n <div\n key={tool}\n className={classnames(\n classes.availableTool,\n selected && classes.selectedTool,\n hasErrors && tool !== 'label' && classes.error\n )}\n onClick={() => toggleToolBarTool(tool)}\n >\n {tool.toUpperCase()}\n </div>\n );\n })}\n </div>\n </div>\n );\n};\n\nTools.propTypes = {\n classes: PropTypes.object.isRequired,\n toolbarTools: PropTypes.arrayOf(PropTypes.string),\n toggleToolBarTool: PropTypes.func,\n};\n\nexport class CorrectResponse extends React.Component {\n static propTypes = {\n classes: PropTypes.object.isRequired,\n model: PropTypes.object.isRequired,\n onChange: PropTypes.func.isRequired,\n toolbarTools: PropTypes.arrayOf(PropTypes.String),\n };\n\n state = {\n dialog: {\n open: false,\n },\n };\n\n handleAlertDialog = (open, callback) =>\n this.setState(\n {\n dialog: { open },\n },\n callback\n );\n\n changeMarks = (key, marks) => {\n const { model, onChange } = this.props;\n\n set(model, `answers.${key}.marks`, marks);\n onChange(model);\n };\n\n filterMarks = (tool) => {\n const {\n model: { answers },\n } = this.props;\n\n return Object.entries(answers || {}).reduce((object, [key, answer]) => {\n object[key] = {\n ...answer,\n marks: (answer.marks || []).filter((mark) => mark.type !== tool),\n };\n\n return object;\n }, {});\n };\n\n changeToolbarTools = (toolbarTools) => {\n const { model, onChange } = this.props;\n model.toolbarTools = toolbarTools;\n\n onChange(model);\n };\n\n updateModel = (props) => {\n const { model, onChange } = this.props;\n\n onChange({\n ...model,\n ...props,\n });\n };\n\n toggleToolBarTool = (tool) => {\n const {\n model: { defaultTool, toolbarTools, answers = {} },\n } = this.props;\n const updatedToolbarTools = [...toolbarTools];\n let newDefaultTool = defaultTool;\n\n const index = toolbarTools.findIndex((t) => tool === t);\n\n if (index >= 0) {\n const updatedAnswers = this.filterMarks(tool);\n updatedToolbarTools.splice(index, 1);\n\n if (tool === defaultTool) {\n const toolbarToolsNoLabel = (updatedToolbarTools || []).filter(\n (tool) => tool !== 'label'\n );\n newDefaultTool =\n (toolbarToolsNoLabel.length && toolbarToolsNoLabel[0]) || '';\n }\n\n if (!isEqual(answers, updatedAnswers)) {\n this.setState({\n dialog: {\n open: true,\n title: 'Warning',\n text: `Correct answer includes one or more ${tool} objects and all of them will be deleted.`,\n onConfirm: () =>\n this.handleAlertDialog(\n false,\n this.updateModel({\n toolbarTools: updatedToolbarTools,\n answers: updatedAnswers,\n defaultTool: newDefaultTool,\n })\n ),\n onClose: () => this.handleAlertDialog(false),\n },\n });\n\n return;\n }\n } else {\n updatedToolbarTools.push(tool);\n\n if (defaultTool === '' && tool !== 'label') {\n newDefaultTool = tool;\n }\n }\n\n this.updateModel({\n toolbarTools: updatedToolbarTools,\n defaultTool: newDefaultTool,\n });\n };\n\n onDefaultToolChange = (event) => {\n const { value } = event.target;\n\n this.updateModel({ defaultTool: value });\n };\n\n addAlternateResponse = () => {\n const { model, onChange } = this.props;\n const { answers } = model || {};\n const answersKeys = Object.keys(answers || {});\n\n set(model, `answers.${`alternate${answersKeys.length}`}`, {\n name: `Alternate ${answersKeys.length}`,\n marks: [],\n });\n onChange(model);\n };\n\n deleteAlternateResponse = (key, answer) => {\n const { model, onChange } = this.props;\n const { answers } = model || {};\n const { marks = [], name } = answer || {};\n\n const deleteAnswer = () => {\n delete answers[key];\n onChange(model);\n };\n\n if (marks.length) {\n this.setState({\n dialog: {\n open: true,\n title: 'Warning',\n text: `${name} includes one or more shapes and the entire response will be deleted.`,\n onConfirm: () => this.handleAlertDialog(false, deleteAnswer),\n onClose: () => this.handleAlertDialog(false),\n },\n });\n\n return;\n }\n\n deleteAnswer();\n };\n\n render() {\n const { availableTools, classes, errors, model } = this.props;\n const { dialog } = this.state;\n const {\n answers = {},\n arrows,\n backgroundMarks,\n coordinatesOnHover,\n defaultTool,\n domain,\n graph = {},\n labels,\n labelsEnabled,\n range,\n title,\n titleEnabled,\n toolbarTools,\n } = model || {};\n const { correctAnswerErrors = {}, toolbarToolsError } = errors || {};\n\n return (\n <div>\n <Typography component=\"div\" variant=\"subheading\">\n <span>Define Tool Set and Correct Response</span>\n </Typography>\n\n <Typography\n component=\"div\"\n variant=\"body1\"\n className={classes.subtitleText}\n >\n <span>\n Use this interface to choose which graphing tools students will be\n able to use, and to define the correct answer\n </span>\n </Typography>\n\n <Tools\n classes={classes}\n availableTools={availableTools}\n defaultTool={defaultTool}\n hasErrors={!!toolbarToolsError}\n onDefaultToolChange={this.onDefaultToolChange}\n toggleToolBarTool={this.toggleToolBarTool}\n toolbarTools={toolbarTools}\n />\n\n {toolbarToolsError && (\n <div className={classes.errorMessage}>{toolbarToolsError}</div>\n )}\n\n {Object.entries(answers || {}).map(([key, answer]) => {\n const { marks = [], name } = answer || {};\n\n return (\n <div key={`correct-response-graph-${name}`}>\n <div className={classes.responseTitle}>\n <p className={classes.name}>{name}</p>\n {key !== 'correctAnswer' && (\n <Delete\n className={classes.iconButton}\n onClick={() => this.deleteAlternateResponse(key, answer)}\n />\n )}\n </div>\n\n <Graph\n className={correctAnswerErrors[key] && classes.graphError}\n axesSettings={{ includeArrows: arrows }}\n backgroundMarks={backgroundMarks}\n coordinatesOnHover={coordinatesOnHover}\n disabledLabels={true}\n disabledTitle={true}\n domain={domain}\n draggableTools={key === 'correctAnswer'}\n labels={labels}\n marks={marks}\n onChangeMarks={(newMarks) => this.changeMarks(key, newMarks)}\n range={range}\n showLabels={labelsEnabled}\n showTitle={titleEnabled}\n size={{ width: graph.width, height: graph.height }}\n title={title}\n toolbarTools={toolbarTools}\n onChangeTools={(toolbarTools) =>\n this.updateModel({ toolbarTools })\n }\n />\n\n {correctAnswerErrors[key] && (\n <div className={classes.errorMessage}>\n {correctAnswerErrors[key]}\n </div>\n )}\n </div>\n );\n })}\n\n <div className={classes.button} onClick={this.addAlternateResponse}>\n ADD ALTERNATE\n </div>\n\n <AlertDialog\n open={dialog.open}\n title={dialog.title}\n text={dialog.text}\n onClose={dialog.onClose}\n onConfirm={dialog.onConfirm}\n />\n </div>\n );\n }\n}\n\nexport default withStyles(styles)(CorrectResponse);\n"],"file":"correct-response.js"}