@pie-element/categorize 6.9.9 → 6.9.10-beta.1443

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 (71) hide show
  1. package/CHANGELOG.md +394 -0
  2. package/configure/CHANGELOG.md +377 -0
  3. package/configure/lib/defaults.js +50 -3
  4. package/configure/lib/defaults.js.map +1 -1
  5. package/configure/lib/design/builder.js +8 -5
  6. package/configure/lib/design/builder.js.map +1 -1
  7. package/configure/lib/design/buttons.js +5 -3
  8. package/configure/lib/design/buttons.js.map +1 -1
  9. package/configure/lib/design/categories/RowLabel.js +68 -0
  10. package/configure/lib/design/categories/RowLabel.js.map +1 -0
  11. package/configure/lib/design/categories/alternateResponses.js +121 -17
  12. package/configure/lib/design/categories/alternateResponses.js.map +1 -1
  13. package/configure/lib/design/categories/category.js +50 -6
  14. package/configure/lib/design/categories/category.js.map +1 -1
  15. package/configure/lib/design/categories/choice-preview.js +17 -4
  16. package/configure/lib/design/categories/choice-preview.js.map +1 -1
  17. package/configure/lib/design/categories/droppable-placeholder.js +23 -3
  18. package/configure/lib/design/categories/droppable-placeholder.js.map +1 -1
  19. package/configure/lib/design/categories/index.js +165 -72
  20. package/configure/lib/design/categories/index.js.map +1 -1
  21. package/configure/lib/design/choices/choice.js +80 -13
  22. package/configure/lib/design/choices/choice.js.map +1 -1
  23. package/configure/lib/design/choices/config.js +8 -113
  24. package/configure/lib/design/choices/config.js.map +1 -1
  25. package/configure/lib/design/choices/index.js +83 -10
  26. package/configure/lib/design/choices/index.js.map +1 -1
  27. package/configure/lib/design/header.js +17 -5
  28. package/configure/lib/design/header.js.map +1 -1
  29. package/configure/lib/design/index.js +158 -61
  30. package/configure/lib/design/index.js.map +1 -1
  31. package/configure/lib/design/input-header.js +57 -11
  32. package/configure/lib/design/input-header.js.map +1 -1
  33. package/configure/lib/index.js +17 -3
  34. package/configure/lib/index.js.map +1 -1
  35. package/configure/lib/main.js +3 -1
  36. package/configure/lib/main.js.map +1 -1
  37. package/configure/lib/utils.js +27 -0
  38. package/configure/lib/utils.js.map +1 -0
  39. package/configure/package.json +9 -9
  40. package/controller/CHANGELOG.md +89 -0
  41. package/controller/lib/defaults.js +18 -0
  42. package/controller/lib/defaults.js.map +1 -1
  43. package/controller/lib/index.js +160 -24
  44. package/controller/lib/index.js.map +1 -1
  45. package/controller/lib/utils.js +60 -0
  46. package/controller/lib/utils.js.map +1 -0
  47. package/controller/package.json +4 -4
  48. package/docs/config-schema.json +181 -0
  49. package/docs/config-schema.json.md +141 -1
  50. package/docs/demo/config.js +2 -2
  51. package/docs/demo/generate.js +3 -3
  52. package/docs/demo/index.html +1 -1
  53. package/docs/pie-schema.json +48 -5
  54. package/docs/pie-schema.json.md +36 -5
  55. package/lib/categorize/categories.js +14 -4
  56. package/lib/categorize/categories.js.map +1 -1
  57. package/lib/categorize/category.js +3 -3
  58. package/lib/categorize/category.js.map +1 -1
  59. package/lib/categorize/choice.js +3 -3
  60. package/lib/categorize/choice.js.map +1 -1
  61. package/lib/categorize/choices.js +16 -7
  62. package/lib/categorize/choices.js.map +1 -1
  63. package/lib/categorize/droppable-placeholder.js +5 -3
  64. package/lib/categorize/droppable-placeholder.js.map +1 -1
  65. package/lib/categorize/grid-content.js +2 -2
  66. package/lib/categorize/grid-content.js.map +1 -1
  67. package/lib/categorize/index.js +36 -17
  68. package/lib/categorize/index.js.map +1 -1
  69. package/lib/index.js +3 -0
  70. package/lib/index.js.map +1 -1
  71. package/package.json +8 -8
@@ -5,7 +5,7 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
5
5
  Object.defineProperty(exports, "__esModule", {
6
6
  value: true
7
7
  });
8
- exports["default"] = exports.spec = exports.Choice = void 0;
8
+ exports.specTarget = exports.spec = exports["default"] = exports.Choice = void 0;
9
9
 
10
10
  var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
11
11
 
@@ -47,6 +47,10 @@ var _debug = _interopRequireDefault(require("debug"));
47
47
 
48
48
  var _drag = require("@pie-lib/drag");
49
49
 
50
+ var _utils = require("../../utils");
51
+
52
+ var _flow = _interopRequireDefault(require("lodash/flow"));
53
+
50
54
  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); }; }
51
55
 
52
56
  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; } }
@@ -54,6 +58,10 @@ function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Re
54
58
  var log = (0, _debug["default"])('@pie-element:categorize:configure:choice');
55
59
 
56
60
  var canDrag = function canDrag(props) {
61
+ if (props.lockChoiceOrder) {
62
+ return true;
63
+ }
64
+
57
65
  var count = props.choice.categoryCount || 0;
58
66
 
59
67
  if (count === 0) {
@@ -98,6 +106,9 @@ var Choice = /*#__PURE__*/function (_React$Component) {
98
106
 
99
107
  onChange(choice);
100
108
  });
109
+ (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "isCheckboxShown", function (allowMultiplePlacements) {
110
+ return allowMultiplePlacements === _utils.multiplePlacements.perChoice;
111
+ });
101
112
  return _this;
102
113
  }
103
114
 
@@ -105,35 +116,56 @@ var Choice = /*#__PURE__*/function (_React$Component) {
105
116
  key: "render",
106
117
  value: function render() {
107
118
  var _this$props3 = this.props,
119
+ allowMultiplePlacements = _this$props3.allowMultiplePlacements,
108
120
  classes = _this$props3.classes,
109
121
  className = _this$props3.className,
110
122
  choice = _this$props3.choice,
123
+ deleteFocusedEl = _this$props3.deleteFocusedEl,
124
+ focusedEl = _this$props3.focusedEl,
125
+ index = _this$props3.index,
111
126
  onDelete = _this$props3.onDelete,
127
+ connectDropTarget = _this$props3.connectDropTarget,
112
128
  connectDragSource = _this$props3.connectDragSource,
113
129
  connectDragPreview = _this$props3.connectDragPreview,
114
130
  imageSupport = _this$props3.imageSupport,
115
- toolbarOpts = _this$props3.toolbarOpts;
131
+ spellCheck = _this$props3.spellCheck,
132
+ toolbarOpts = _this$props3.toolbarOpts,
133
+ error = _this$props3.error,
134
+ maxImageWidth = _this$props3.maxImageWidth,
135
+ maxImageHeight = _this$props3.maxImageHeight,
136
+ uploadSoundSupport = _this$props3.uploadSoundSupport;
137
+ var showRemoveAfterPlacing = this.isCheckboxShown(allowMultiplePlacements);
116
138
  var draggable = canDrag(this.props);
117
139
  return /*#__PURE__*/_react["default"].createElement(_Card["default"], {
118
140
  className: (0, _classnames["default"])(classes.choice, className)
119
141
  }, /*#__PURE__*/_react["default"].createElement(_CardActions["default"], {
120
142
  className: classes.actions
121
- }, connectDragSource( /*#__PURE__*/_react["default"].createElement("span", {
143
+ }, connectDragSource(connectDropTarget( /*#__PURE__*/_react["default"].createElement("span", {
122
144
  className: (0, _classnames["default"])(classes.dragHandle, draggable === false && classes.dragDisabled)
123
145
  }, /*#__PURE__*/_react["default"].createElement(_DragHandle["default"], {
124
146
  color: draggable ? 'primary' : 'disabled'
125
- })))), connectDragPreview( /*#__PURE__*/_react["default"].createElement("span", null, /*#__PURE__*/_react["default"].createElement(_inputHeader["default"], {
147
+ }))))), connectDragPreview( /*#__PURE__*/_react["default"].createElement("span", null, /*#__PURE__*/_react["default"].createElement(_inputHeader["default"], {
126
148
  imageSupport: imageSupport,
149
+ focusedEl: focusedEl,
150
+ deleteFocusedEl: deleteFocusedEl,
151
+ index: index,
127
152
  label: choice.content,
128
153
  onChange: this.changeContent,
129
154
  onDelete: onDelete,
130
- toolbarOpts: toolbarOpts
131
- }))), /*#__PURE__*/_react["default"].createElement(_CardActions["default"], {
155
+ toolbarOpts: toolbarOpts,
156
+ spellCheck: spellCheck,
157
+ error: error,
158
+ maxImageWidth: maxImageWidth,
159
+ maxImageHeight: maxImageHeight,
160
+ uploadSoundSupport: uploadSoundSupport
161
+ }), error && /*#__PURE__*/_react["default"].createElement("div", {
162
+ className: classes.errorText
163
+ }, error))), /*#__PURE__*/_react["default"].createElement(_CardActions["default"], {
132
164
  className: classes.actions
133
165
  }, /*#__PURE__*/_react["default"].createElement(_buttons.DeleteButton, {
134
166
  label: 'delete',
135
167
  onClick: onDelete
136
- }), /*#__PURE__*/_react["default"].createElement(_configUi.Checkbox, {
168
+ }), showRemoveAfterPlacing && /*#__PURE__*/_react["default"].createElement(_configUi.Checkbox, {
137
169
  mini: true,
138
170
  label: 'Remove after placing',
139
171
  checked: choice.categoryCount === 1,
@@ -146,9 +178,14 @@ var Choice = /*#__PURE__*/function (_React$Component) {
146
178
 
147
179
  exports.Choice = Choice;
148
180
  (0, _defineProperty2["default"])(Choice, "propTypes", {
181
+ allowMultiplePlacements: _propTypes["default"].string,
149
182
  classes: _propTypes["default"].object.isRequired,
150
183
  className: _propTypes["default"].string,
151
184
  choice: _propTypes["default"].object.isRequired,
185
+ deleteFocusedEl: _propTypes["default"].func,
186
+ focusedEl: _propTypes["default"].number,
187
+ index: _propTypes["default"].number,
188
+ lockChoiceOrder: _propTypes["default"].bool,
152
189
  onChange: _propTypes["default"].func.isRequired,
153
190
  onDelete: _propTypes["default"].func.isRequired,
154
191
  connectDragSource: _propTypes["default"].func.isRequired,
@@ -158,7 +195,12 @@ exports.Choice = Choice;
158
195
  add: _propTypes["default"].func.isRequired,
159
196
  "delete": _propTypes["default"].func.isRequired
160
197
  }),
161
- toolbarOpts: _propTypes["default"].object
198
+ toolbarOpts: _propTypes["default"].object,
199
+ error: _propTypes["default"].string,
200
+ uploadSoundSupport: _propTypes["default"].shape({
201
+ add: _propTypes["default"].func.isRequired,
202
+ "delete": _propTypes["default"].func.isRequired
203
+ })
162
204
  });
163
205
  (0, _defineProperty2["default"])(Choice, "defaultProps", {});
164
206
 
@@ -177,6 +219,11 @@ var styles = function styles(theme) {
177
219
  },
178
220
  dragDisabled: {
179
221
  cursor: 'inherit'
222
+ },
223
+ errorText: {
224
+ fontSize: '11px',
225
+ color: 'red',
226
+ paddingBottom: '5px'
180
227
  }
181
228
  };
182
229
  };
@@ -186,7 +233,8 @@ var spec = {
186
233
  canDrag: canDrag,
187
234
  beginDrag: function beginDrag(props) {
188
235
  var out = {
189
- id: props.choice.id
236
+ id: props.choice.id,
237
+ index: props.index
190
238
  };
191
239
  log('[beginDrag] out:', out);
192
240
  return out;
@@ -203,7 +251,20 @@ var spec = {
203
251
  }
204
252
  };
205
253
  exports.spec = spec;
206
- var DraggableChoice = (0, _reactDnd.DragSource)(function (_ref) {
254
+ var specTarget = {
255
+ drop: function drop(props, monitor) {
256
+ log('[drop] props: ', props);
257
+ var item = monitor.getItem();
258
+ props.rearrangeChoices(item.index, props.index);
259
+ },
260
+ canDrop: function canDrop(props, monitor) {
261
+ var item = monitor.getItem();
262
+ return props.choice.id !== item.id;
263
+ }
264
+ };
265
+ exports.specTarget = specTarget;
266
+
267
+ var _default = _drag.uid.withUid((0, _flow["default"])((0, _reactDnd.DragSource)(function (_ref) {
207
268
  var uid = _ref.uid;
208
269
  return uid;
209
270
  }, spec, function (connect, monitor) {
@@ -212,9 +273,15 @@ var DraggableChoice = (0, _reactDnd.DragSource)(function (_ref) {
212
273
  connectDragPreview: connect.dragPreview(),
213
274
  isDragging: monitor.isDragging()
214
275
  };
215
- })(StyledChoice);
216
-
217
- var _default = _drag.uid.withUid(DraggableChoice);
276
+ }), (0, _reactDnd.DropTarget)(function (_ref2) {
277
+ var uid = _ref2.uid;
278
+ return uid;
279
+ }, specTarget, function (connect, monitor) {
280
+ return {
281
+ connectDropTarget: connect.dropTarget(),
282
+ isOver: monitor.isOver()
283
+ };
284
+ }))(StyledChoice));
218
285
 
219
286
  exports["default"] = _default;
220
287
  //# sourceMappingURL=choice.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/design/choices/choice.jsx"],"names":["log","canDrag","props","count","choice","categoryCount","correctResponseCount","Choice","content","onChange","classes","className","onDelete","connectDragSource","connectDragPreview","imageSupport","toolbarOpts","draggable","actions","dragHandle","dragDisabled","changeContent","changeCategoryCount","React","Component","PropTypes","object","isRequired","string","func","number","shape","add","styles","theme","padding","justifyContent","spacing","unit","overflow","cursor","StyledChoice","spec","beginDrag","out","id","endDrag","monitor","didDrop","item","getItem","categoryId","onRemoveChoice","DraggableChoice","uid","connect","dragSource","dragPreview","isDragging","withUid"],"mappings":"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","sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\nimport { withStyles } from '@material-ui/core/styles';\nimport classNames from 'classnames';\nimport Card from '@material-ui/core/Card';\nimport CardActions from '@material-ui/core/CardActions';\nimport InputHeader from '../input-header';\nimport { Checkbox } from '@pie-lib/config-ui';\nimport { DeleteButton } from '../buttons';\nimport DragHandle from '@material-ui/icons/DragHandle';\nimport { DragSource } from 'react-dnd';\nimport debug from 'debug';\nimport { uid } from '@pie-lib/drag';\n\nconst log = debug('@pie-element:categorize:configure:choice');\n\nconst canDrag = props => {\n const count = props.choice.categoryCount || 0;\n if (count === 0) {\n return true;\n } else {\n return props.correctResponseCount < count;\n }\n};\n\nexport class Choice extends React.Component {\n static propTypes = {\n classes: PropTypes.object.isRequired,\n className: PropTypes.string,\n choice: PropTypes.object.isRequired,\n onChange: PropTypes.func.isRequired,\n onDelete: PropTypes.func.isRequired,\n connectDragSource: PropTypes.func.isRequired,\n connectDragPreview: PropTypes.func.isRequired,\n correctResponseCount: PropTypes.number.isRequired,\n imageSupport: PropTypes.shape({\n add: PropTypes.func.isRequired,\n delete: PropTypes.func.isRequired\n }),\n toolbarOpts: PropTypes.object\n };\n\n static defaultProps = {};\n\n changeContent = content => {\n const { onChange, choice } = this.props;\n choice.content = content;\n onChange(choice);\n };\n\n changeCategoryCount = () => {\n const { onChange, choice } = this.props;\n if (choice.categoryCount === 1) {\n choice.categoryCount = 0;\n } else {\n choice.categoryCount = 1;\n }\n onChange(choice);\n };\n\n render() {\n const {\n classes,\n className,\n choice,\n onDelete,\n connectDragSource,\n connectDragPreview,\n imageSupport,\n toolbarOpts\n } = this.props;\n\n const draggable = canDrag(this.props);\n\n return (\n <Card className={classNames(classes.choice, className)}>\n <CardActions className={classes.actions}>\n {connectDragSource(\n <span\n className={classNames(\n classes.dragHandle,\n draggable === false && classes.dragDisabled\n )}\n >\n <DragHandle color={draggable ? 'primary' : 'disabled'} />\n </span>\n )}\n </CardActions>\n {connectDragPreview(\n <span>\n <InputHeader\n imageSupport={imageSupport}\n label={choice.content}\n onChange={this.changeContent}\n onDelete={onDelete}\n toolbarOpts={toolbarOpts}\n />\n </span>\n )}\n\n <CardActions className={classes.actions}>\n <DeleteButton label={'delete'} onClick={onDelete} />\n <Checkbox\n mini\n label={'Remove after placing'}\n checked={choice.categoryCount === 1}\n onChange={this.changeCategoryCount}\n />\n </CardActions>\n </Card>\n );\n }\n}\nconst styles = theme => ({\n actions: {\n padding: 0,\n justifyContent: 'space-between'\n },\n choice: {\n padding: theme.spacing.unit,\n overflow: 'visible'\n },\n dragHandle: {\n cursor: 'move'\n },\n dragDisabled: {\n cursor: 'inherit'\n }\n});\n\nconst StyledChoice = withStyles(styles)(Choice);\n\nexport const spec = {\n canDrag,\n beginDrag: props => {\n const out = {\n id: props.choice.id\n };\n log('[beginDrag] out:', out);\n return out;\n },\n endDrag: (props, monitor) => {\n if (!monitor.didDrop()) {\n const item = monitor.getItem();\n if (item.categoryId) {\n log('wasnt droppped - what to do?');\n props.onRemoveChoice(item);\n }\n }\n }\n};\n\nconst DraggableChoice = DragSource(\n ({ uid }) => uid,\n spec,\n (connect, monitor) => ({\n connectDragSource: connect.dragSource(),\n connectDragPreview: connect.dragPreview(),\n isDragging: monitor.isDragging()\n })\n)(StyledChoice);\n\nexport default uid.withUid(DraggableChoice);\n"],"file":"choice.js"}
1
+ {"version":3,"sources":["../../../src/design/choices/choice.jsx"],"names":["log","canDrag","props","lockChoiceOrder","count","choice","categoryCount","correctResponseCount","Choice","content","onChange","allowMultiplePlacements","multiplePlacements","perChoice","classes","className","deleteFocusedEl","focusedEl","index","onDelete","connectDropTarget","connectDragSource","connectDragPreview","imageSupport","spellCheck","toolbarOpts","error","maxImageWidth","maxImageHeight","uploadSoundSupport","showRemoveAfterPlacing","isCheckboxShown","draggable","actions","dragHandle","dragDisabled","changeContent","errorText","changeCategoryCount","React","Component","PropTypes","string","object","isRequired","func","number","bool","shape","add","styles","theme","padding","justifyContent","spacing","unit","overflow","cursor","fontSize","color","paddingBottom","StyledChoice","spec","beginDrag","out","id","endDrag","monitor","didDrop","item","getItem","categoryId","onRemoveChoice","specTarget","drop","rearrangeChoices","canDrop","uid","withUid","connect","dragSource","dragPreview","isDragging","dropTarget","isOver"],"mappings":"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","sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\nimport { withStyles } from '@material-ui/core/styles';\nimport classNames from 'classnames';\nimport Card from '@material-ui/core/Card';\nimport CardActions from '@material-ui/core/CardActions';\nimport InputHeader from '../input-header';\nimport { Checkbox } from '@pie-lib/config-ui';\nimport { DeleteButton } from '../buttons';\nimport DragHandle from '@material-ui/icons/DragHandle';\nimport { DragSource, DropTarget } from 'react-dnd';\nimport debug from 'debug';\nimport { uid } from '@pie-lib/drag';\nimport { multiplePlacements } from '../../utils';\nimport flow from 'lodash/flow';\n\nconst log = debug('@pie-element:categorize:configure:choice');\n\nconst canDrag = (props) => {\n if (props.lockChoiceOrder) {\n return true;\n }\n const count = props.choice.categoryCount || 0;\n if (count === 0) {\n return true;\n } else {\n return props.correctResponseCount < count;\n }\n};\n\nexport class Choice extends React.Component {\n static propTypes = {\n allowMultiplePlacements: PropTypes.string,\n classes: PropTypes.object.isRequired,\n className: PropTypes.string,\n choice: PropTypes.object.isRequired,\n deleteFocusedEl: PropTypes.func,\n focusedEl: PropTypes.number,\n index: PropTypes.number,\n lockChoiceOrder: PropTypes.bool,\n onChange: PropTypes.func.isRequired,\n onDelete: PropTypes.func.isRequired,\n connectDragSource: PropTypes.func.isRequired,\n connectDragPreview: PropTypes.func.isRequired,\n correctResponseCount: PropTypes.number.isRequired,\n imageSupport: PropTypes.shape({\n add: PropTypes.func.isRequired,\n delete: PropTypes.func.isRequired,\n }),\n toolbarOpts: PropTypes.object,\n error: PropTypes.string,\n uploadSoundSupport: PropTypes.shape({\n add: PropTypes.func.isRequired,\n delete: PropTypes.func.isRequired,\n }),\n };\n\n static defaultProps = {};\n\n changeContent = (content) => {\n const { onChange, choice } = this.props;\n choice.content = content;\n onChange(choice);\n };\n\n changeCategoryCount = () => {\n const { onChange, choice } = this.props;\n if (choice.categoryCount === 1) {\n choice.categoryCount = 0;\n } else {\n choice.categoryCount = 1;\n }\n onChange(choice);\n };\n\n isCheckboxShown = (allowMultiplePlacements) => allowMultiplePlacements === multiplePlacements.perChoice;\n\n render() {\n const {\n allowMultiplePlacements,\n classes,\n className,\n choice,\n deleteFocusedEl,\n focusedEl,\n index,\n onDelete,\n connectDropTarget,\n connectDragSource,\n connectDragPreview,\n imageSupport,\n spellCheck,\n toolbarOpts,\n error,\n maxImageWidth,\n maxImageHeight,\n uploadSoundSupport,\n } = this.props;\n\n const showRemoveAfterPlacing = this.isCheckboxShown(allowMultiplePlacements);\n const draggable = canDrag(this.props);\n\n return (\n <Card className={classNames(classes.choice, className)}>\n <CardActions className={classes.actions}>\n {connectDragSource(\n connectDropTarget(\n <span className={classNames(classes.dragHandle, draggable === false && classes.dragDisabled)}>\n <DragHandle color={draggable ? 'primary' : 'disabled'} />\n </span>,\n ),\n )}\n </CardActions>\n {connectDragPreview(\n <span>\n <InputHeader\n imageSupport={imageSupport}\n focusedEl={focusedEl}\n deleteFocusedEl={deleteFocusedEl}\n index={index}\n label={choice.content}\n onChange={this.changeContent}\n onDelete={onDelete}\n toolbarOpts={toolbarOpts}\n spellCheck={spellCheck}\n error={error}\n maxImageWidth={maxImageWidth}\n maxImageHeight={maxImageHeight}\n uploadSoundSupport={uploadSoundSupport}\n />\n {error && <div className={classes.errorText}>{error}</div>}\n </span>,\n )}\n\n <CardActions className={classes.actions}>\n <DeleteButton label={'delete'} onClick={onDelete} />\n {showRemoveAfterPlacing && (\n <Checkbox\n mini\n label={'Remove after placing'}\n checked={choice.categoryCount === 1}\n onChange={this.changeCategoryCount}\n />\n )}\n </CardActions>\n </Card>\n );\n }\n}\nconst styles = (theme) => ({\n actions: {\n padding: 0,\n justifyContent: 'space-between',\n },\n choice: {\n padding: theme.spacing.unit,\n overflow: 'visible',\n },\n dragHandle: {\n cursor: 'move',\n },\n dragDisabled: {\n cursor: 'inherit',\n },\n errorText: {\n fontSize: '11px',\n color: 'red',\n paddingBottom: '5px',\n },\n});\n\nconst StyledChoice = withStyles(styles)(Choice);\n\nexport const spec = {\n canDrag,\n beginDrag: (props) => {\n const out = {\n id: props.choice.id,\n index: props.index,\n };\n log('[beginDrag] out:', out);\n return out;\n },\n endDrag: (props, monitor) => {\n if (!monitor.didDrop()) {\n const item = monitor.getItem();\n if (item.categoryId) {\n log('wasnt droppped - what to do?');\n props.onRemoveChoice(item);\n }\n }\n },\n};\n\nexport const specTarget = {\n drop: (props, monitor) => {\n log('[drop] props: ', props);\n const item = monitor.getItem();\n props.rearrangeChoices(item.index, props.index);\n },\n canDrop: (props, monitor) => {\n const item = monitor.getItem();\n return props.choice.id !== item.id;\n },\n};\n\nexport default uid.withUid(\n flow(\n DragSource(\n ({ uid }) => uid,\n spec,\n (connect, monitor) => ({\n connectDragSource: connect.dragSource(),\n connectDragPreview: connect.dragPreview(),\n isDragging: monitor.isDragging(),\n }),\n ),\n DropTarget(\n ({ uid }) => uid,\n specTarget,\n (connect, monitor) => ({\n connectDropTarget: connect.dropTarget(),\n isOver: monitor.isOver(),\n }),\n ),\n )(StyledChoice),\n);\n"],"file":"choice.js"}
@@ -47,24 +47,6 @@ function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflec
47
47
 
48
48
  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; } }
49
49
 
50
- var positionOptions = [{
51
- label: 'Above',
52
- value: 'above',
53
- secondaryText: 'Choices will be shown above categories'
54
- }, {
55
- label: 'Below',
56
- value: 'below',
57
- secondaryText: 'Choices will be shown below categories'
58
- }, {
59
- label: 'Left',
60
- value: 'left',
61
- secondaryText: 'Choices will be shown to the left of the categories'
62
- }, {
63
- label: 'Right',
64
- value: 'right',
65
- secondaryText: 'Choices will be shown to the right of the categories'
66
- }];
67
-
68
50
  var Config = /*#__PURE__*/function (_React$Component) {
69
51
  (0, _inherits2["default"])(Config, _React$Component);
70
52
 
@@ -80,24 +62,6 @@ var Config = /*#__PURE__*/function (_React$Component) {
80
62
  }
81
63
 
82
64
  _this = _super.call.apply(_super, [this].concat(args));
83
- (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "state", {
84
- anchorEl: null
85
- });
86
- (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "toggleRemoveAllTiles", function () {
87
- var _this$props = _this.props,
88
- config = _this$props.config,
89
- onModelChanged = _this$props.onModelChanged;
90
-
91
- var allAtOne = _this.props.allChoicesHaveCount(1);
92
-
93
- var update = config.choices.map(function (c) {
94
- c.categoryCount = allAtOne ? 0 : 1;
95
- return c;
96
- });
97
- onModelChanged({
98
- choices: update
99
- });
100
- });
101
65
  (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "changeLabel", function (_ref) {
102
66
  var target = _ref.target;
103
67
 
@@ -105,66 +69,20 @@ var Config = /*#__PURE__*/function (_React$Component) {
105
69
  choicesLabel: target.value
106
70
  });
107
71
  });
108
- (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "toggleShuffle", function () {
109
- _this.props.onModelChanged({
110
- lockChoiceOrder: !_this.props.config.lockChoiceOrder
111
- });
112
- });
113
- (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "changePosition", function (position) {
114
- _this.props.onModelChanged({
115
- choicesPosition: position.value
116
- });
117
-
118
- _this.setState({
119
- anchorEl: null
120
- });
121
- });
122
- (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "handleClickPosition", function (event) {
123
- _this.setState({
124
- anchorEl: event.currentTarget
125
- });
126
- });
127
- (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "handleMenuItemClick", function (event, index) {
128
- _this.setState({
129
- selectedIndex: index,
130
- anchorEl: null
131
- });
132
- });
133
- (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "handleClose", function () {
134
- _this.setState({
135
- anchorEl: null
136
- });
137
- });
138
72
  return _this;
139
73
  }
140
74
 
141
75
  (0, _createClass2["default"])(Config, [{
142
76
  key: "render",
143
77
  value: function render() {
144
- var _this2 = this;
145
-
146
- var anchorEl = this.state.anchorEl;
147
- var _this$props2 = this.props,
148
- classes = _this$props2.classes,
149
- className = _this$props2.className,
150
- categoryCountIsOne = _this$props2.categoryCountIsOne,
151
- config = _this$props2.config;
152
- var positionOption = positionOptions.find(function (option) {
153
- return option.value === config.choicesPosition;
154
- }) || positionOption[1];
78
+ var _this$props = this.props,
79
+ classes = _this$props.classes,
80
+ className = _this$props.className,
81
+ config = _this$props.config,
82
+ spellCheck = _this$props.spellCheck;
155
83
  return /*#__PURE__*/_react["default"].createElement("div", {
156
84
  className: (0, _classnames["default"])(classes.config, className)
157
85
  }, /*#__PURE__*/_react["default"].createElement("div", {
158
- className: classes.row
159
- }, /*#__PURE__*/_react["default"].createElement(_configUi.Checkbox, {
160
- label: 'Remove all tiles after placing',
161
- checked: categoryCountIsOne,
162
- onChange: this.toggleRemoveAllTiles
163
- }), /*#__PURE__*/_react["default"].createElement(_configUi.Checkbox, {
164
- label: 'Lock Choice Order',
165
- checked: config.lockChoiceOrder,
166
- onChange: this.toggleShuffle
167
- })), /*#__PURE__*/_react["default"].createElement("div", {
168
86
  className: classes.configuration
169
87
  }, /*#__PURE__*/_react["default"].createElement(_TextField["default"], {
170
88
  className: classes.label,
@@ -173,30 +91,9 @@ var Config = /*#__PURE__*/function (_React$Component) {
173
91
  },
174
92
  label: "Label",
175
93
  value: config.choicesLabel,
176
- onChange: this.changeLabel
177
- }), /*#__PURE__*/_react["default"].createElement(_List["default"], {
178
- component: "nav"
179
- }, /*#__PURE__*/_react["default"].createElement(_ListItem["default"], {
180
- button: true,
181
- "aria-haspopup": "true",
182
- onClick: this.handleClickPosition
183
- }, /*#__PURE__*/_react["default"].createElement(_ListItemText["default"], {
184
- primary: "Choices Position",
185
- secondary: positionOption.secondaryText
186
- }))), /*#__PURE__*/_react["default"].createElement(_Menu["default"], {
187
- id: "lock-menu",
188
- anchorEl: anchorEl,
189
- open: Boolean(anchorEl),
190
- onClose: this.handleClose
191
- }, positionOptions.map(function (option) {
192
- return /*#__PURE__*/_react["default"].createElement(_MenuItem["default"], {
193
- key: option.value,
194
- selected: option.value === config.choicesPosition,
195
- onClick: function onClick() {
196
- return _this2.changePosition(option);
197
- }
198
- }, option.label);
199
- }))));
94
+ onChange: this.changeLabel,
95
+ spellCheck: spellCheck
96
+ })));
200
97
  }
201
98
  }]);
202
99
  return Config;
@@ -207,8 +104,6 @@ exports.Config = Config;
207
104
  classes: _propTypes["default"].object.isRequired,
208
105
  className: _propTypes["default"].string,
209
106
  config: _propTypes["default"].object,
210
- categoryCountIsOne: _propTypes["default"].bool,
211
- allChoicesHaveCount: _propTypes["default"].func,
212
107
  onModelChanged: _propTypes["default"].func
213
108
  });
214
109
  (0, _defineProperty2["default"])(Config, "defaultProps", {});
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/design/choices/config.jsx"],"names":["positionOptions","label","value","secondaryText","Config","anchorEl","props","config","onModelChanged","allAtOne","allChoicesHaveCount","update","choices","map","c","categoryCount","target","choicesLabel","lockChoiceOrder","position","choicesPosition","setState","event","currentTarget","index","selectedIndex","state","classes","className","categoryCountIsOne","positionOption","find","option","row","toggleRemoveAllTiles","toggleShuffle","configuration","shrink","changeLabel","handleClickPosition","Boolean","handleClose","changePosition","React","Component","PropTypes","object","isRequired","string","bool","func","styles","theme","display","alignItems","gridColumnGap","spacing","unit","gridRowGap","gridTemplateColumns","justifyContent","marginBottom","choiceConfig","width","maxWidth","backgroundColor","palette","background","paper","marginTop","shuffleCheckbox","gridColumnStart","gridColumnEnd"],"mappings":"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","sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\nimport { withStyles } from '@material-ui/core/styles';\nimport classNames from 'classnames';\n\nimport TextField from '@material-ui/core/TextField';\nimport List from '@material-ui/core/List';\nimport ListItem from '@material-ui/core/ListItem';\nimport ListItemText from '@material-ui/core/ListItemText';\nimport MenuItem from '@material-ui/core/MenuItem';\nimport Menu from '@material-ui/core/Menu';\nimport { Checkbox } from '@pie-lib/config-ui';\n\nconst positionOptions = [\n {\n label: 'Above',\n value: 'above',\n secondaryText: 'Choices will be shown above categories'\n },\n {\n label: 'Below',\n value: 'below',\n secondaryText: 'Choices will be shown below categories'\n },\n {\n label: 'Left',\n value: 'left',\n secondaryText: 'Choices will be shown to the left of the categories'\n },\n {\n label: 'Right',\n value: 'right',\n secondaryText: 'Choices will be shown to the right of the categories'\n }\n];\n\nexport class Config extends React.Component {\n static propTypes = {\n classes: PropTypes.object.isRequired,\n className: PropTypes.string,\n config: PropTypes.object,\n categoryCountIsOne: PropTypes.bool,\n allChoicesHaveCount: PropTypes.func,\n onModelChanged: PropTypes.func\n };\n\n static defaultProps = {};\n\n state = {\n anchorEl: null\n };\n\n toggleRemoveAllTiles = () => {\n const { config, onModelChanged } = this.props;\n\n const allAtOne = this.props.allChoicesHaveCount(1);\n const update = config.choices.map(c => {\n c.categoryCount = allAtOne ? 0 : 1;\n return c;\n });\n\n onModelChanged({ choices: update });\n };\n\n changeLabel = ({ target }) => {\n this.props.onModelChanged({ choicesLabel: target.value });\n };\n\n toggleShuffle = () => {\n this.props.onModelChanged({\n lockChoiceOrder: !this.props.config.lockChoiceOrder\n });\n };\n\n changePosition = position => {\n this.props.onModelChanged({ choicesPosition: position.value });\n\n this.setState({ anchorEl: null });\n };\n\n handleClickPosition = event => {\n this.setState({ anchorEl: event.currentTarget });\n };\n\n handleMenuItemClick = (event, index) => {\n this.setState({ selectedIndex: index, anchorEl: null });\n };\n\n handleClose = () => {\n this.setState({ anchorEl: null });\n };\n\n render() {\n const { anchorEl } = this.state;\n const { classes, className, categoryCountIsOne, config } = this.props;\n\n const positionOption =\n positionOptions.find(option => option.value === config.choicesPosition) ||\n positionOption[1];\n\n return (\n <div className={classNames(classes.config, className)}>\n <div className={classes.row}>\n <Checkbox\n label={'Remove all tiles after placing'}\n checked={categoryCountIsOne}\n onChange={this.toggleRemoveAllTiles}\n />\n <Checkbox\n label={'Lock Choice Order'}\n checked={config.lockChoiceOrder}\n onChange={this.toggleShuffle}\n />\n </div>\n\n <div className={classes.configuration}>\n <TextField\n className={classes.label}\n InputLabelProps={{\n shrink: true\n }}\n label=\"Label\"\n value={config.choicesLabel}\n onChange={this.changeLabel}\n />\n <List component=\"nav\">\n <ListItem\n button\n aria-haspopup=\"true\"\n onClick={this.handleClickPosition}\n >\n <ListItemText\n primary=\"Choices Position\"\n secondary={positionOption.secondaryText}\n />\n </ListItem>\n </List>\n <Menu\n id=\"lock-menu\"\n anchorEl={anchorEl}\n open={Boolean(anchorEl)}\n onClose={this.handleClose}\n >\n {positionOptions.map(option => (\n <MenuItem\n key={option.value}\n selected={option.value === config.choicesPosition}\n onClick={() => this.changePosition(option)}\n >\n {option.label}\n </MenuItem>\n ))}\n </Menu>\n </div>\n </div>\n );\n }\n}\nconst styles = theme => ({\n configuration: {\n display: 'grid',\n alignItems: 'center',\n gridColumnGap: `${theme.spacing.unit}px`,\n gridRowGap: `${theme.spacing.unit}px`,\n gridTemplateColumns: 'repeat(2, 1fr)',\n justifyContent: 'space-between',\n marginBottom: theme.spacing.unit\n },\n choiceConfig: {\n width: '100%',\n maxWidth: 360,\n backgroundColor: theme.palette.background.paper\n },\n row: {\n display: 'grid',\n gridColumnGap: `${theme.spacing.unit}px`,\n gridRowGap: `${theme.spacing.unit}px`,\n gridTemplateColumns: 'repeat(2, 1fr)',\n justifyContent: 'space-between',\n marginTop: theme.spacing.unit,\n marginBottom: theme.spacing.unit\n },\n shuffleCheckbox: {\n gridColumnStart: 2,\n gridColumnEnd: 2\n }\n});\nexport default withStyles(styles)(Config);\n"],"file":"config.js"}
1
+ {"version":3,"sources":["../../../src/design/choices/config.jsx"],"names":["Config","target","props","onModelChanged","choicesLabel","value","classes","className","config","spellCheck","configuration","label","shrink","changeLabel","React","Component","PropTypes","object","isRequired","string","func","styles","theme","display","alignItems","gridColumnGap","spacing","unit","gridRowGap","gridTemplateColumns","justifyContent","marginBottom","choiceConfig","width","maxWidth","backgroundColor","palette","background","paper","row","marginTop","shuffleCheckbox","gridColumnStart","gridColumnEnd"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;AAAA;;AACA;;AACA;;AACA;;AAEA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;;;;;IAGaA,M;;;;;;;;;;;;;;;oGAWG,gBAAgB;AAAA,UAAbC,MAAa,QAAbA,MAAa;;AAC5B,YAAKC,KAAL,CAAWC,cAAX,CAA0B;AAAEC,QAAAA,YAAY,EAAEH,MAAM,CAACI;AAAvB,OAA1B;AACD,K;;;;;;WAGD,kBAAS;AACP,wBAAkD,KAAKH,KAAvD;AAAA,UAAQI,OAAR,eAAQA,OAAR;AAAA,UAAiBC,SAAjB,eAAiBA,SAAjB;AAAA,UAA4BC,MAA5B,eAA4BA,MAA5B;AAAA,UAAoCC,UAApC,eAAoCA,UAApC;AAGA,0BACE;AAAK,QAAA,SAAS,EAAE,4BAAWH,OAAO,CAACE,MAAnB,EAA2BD,SAA3B;AAAhB,sBACE;AAAK,QAAA,SAAS,EAAED,OAAO,CAACI;AAAxB,sBACE,gCAAC,qBAAD;AACE,QAAA,SAAS,EAAEJ,OAAO,CAACK,KADrB;AAEE,QAAA,eAAe,EAAE;AACfC,UAAAA,MAAM,EAAE;AADO,SAFnB;AAKE,QAAA,KAAK,EAAC,OALR;AAME,QAAA,KAAK,EAAEJ,MAAM,CAACJ,YANhB;AAOE,QAAA,QAAQ,EAAE,KAAKS,WAPjB;AAQE,QAAA,UAAU,EAAEJ;AARd,QADF,CADF,CADF;AAgBD;;;EApCyBK,kBAAMC,S;;;iCAArBf,M,eACQ;AACjBM,EAAAA,OAAO,EAAEU,sBAAUC,MAAV,CAAiBC,UADT;AAEjBX,EAAAA,SAAS,EAAES,sBAAUG,MAFJ;AAGjBX,EAAAA,MAAM,EAAEQ,sBAAUC,MAHD;AAIjBd,EAAAA,cAAc,EAAEa,sBAAUI;AAJT,C;iCADRpB,M,kBAQW,E;;AA8BxB,IAAMqB,MAAM,GAAG,SAATA,MAAS,CAAAC,KAAK;AAAA,SAAK;AACvBZ,IAAAA,aAAa,EAAE;AACba,MAAAA,OAAO,EAAE,MADI;AAEbC,MAAAA,UAAU,EAAE,QAFC;AAGbC,MAAAA,aAAa,YAAKH,KAAK,CAACI,OAAN,CAAcC,IAAnB,OAHA;AAIbC,MAAAA,UAAU,YAAKN,KAAK,CAACI,OAAN,CAAcC,IAAnB,OAJG;AAKbE,MAAAA,mBAAmB,EAAE,gBALR;AAMbC,MAAAA,cAAc,EAAE,eANH;AAObC,MAAAA,YAAY,EAAET,KAAK,CAACI,OAAN,CAAcC;AAPf,KADQ;AAUvBK,IAAAA,YAAY,EAAE;AACZC,MAAAA,KAAK,EAAE,MADK;AAEZC,MAAAA,QAAQ,EAAE,GAFE;AAGZC,MAAAA,eAAe,EAAEb,KAAK,CAACc,OAAN,CAAcC,UAAd,CAAyBC;AAH9B,KAVS;AAevBC,IAAAA,GAAG,EAAE;AACHhB,MAAAA,OAAO,EAAE,MADN;AAEHE,MAAAA,aAAa,YAAKH,KAAK,CAACI,OAAN,CAAcC,IAAnB,OAFV;AAGHC,MAAAA,UAAU,YAAKN,KAAK,CAACI,OAAN,CAAcC,IAAnB,OAHP;AAIHE,MAAAA,mBAAmB,EAAE,gBAJlB;AAKHC,MAAAA,cAAc,EAAE,eALb;AAMHU,MAAAA,SAAS,EAAElB,KAAK,CAACI,OAAN,CAAcC,IANtB;AAOHI,MAAAA,YAAY,EAAET,KAAK,CAACI,OAAN,CAAcC;AAPzB,KAfkB;AAwBvBc,IAAAA,eAAe,EAAE;AACfC,MAAAA,eAAe,EAAE,CADF;AAEfC,MAAAA,aAAa,EAAE;AAFA;AAxBM,GAAL;AAAA,CAApB;;eA6Be,wBAAWtB,MAAX,EAAmBrB,MAAnB,C","sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\nimport { withStyles } from '@material-ui/core/styles';\nimport classNames from 'classnames';\n\nimport TextField from '@material-ui/core/TextField';\nimport List from '@material-ui/core/List';\nimport ListItem from '@material-ui/core/ListItem';\nimport ListItemText from '@material-ui/core/ListItemText';\nimport MenuItem from '@material-ui/core/MenuItem';\nimport Menu from '@material-ui/core/Menu';\nimport { Checkbox } from '@pie-lib/config-ui';\n\n\nexport class Config extends React.Component {\n static propTypes = {\n classes: PropTypes.object.isRequired,\n className: PropTypes.string,\n config: PropTypes.object,\n onModelChanged: PropTypes.func\n };\n\n static defaultProps = {};\n\n\n changeLabel = ({ target }) => {\n this.props.onModelChanged({ choicesLabel: target.value });\n };\n\n\n render() {\n const { classes, className, config, spellCheck} = this.props;\n\n\n return (\n <div className={classNames(classes.config, className)}>\n <div className={classes.configuration}>\n <TextField\n className={classes.label}\n InputLabelProps={{\n shrink: true\n }}\n label=\"Label\"\n value={config.choicesLabel}\n onChange={this.changeLabel}\n spellCheck={spellCheck}\n />\n </div>\n </div>\n );\n }\n}\nconst styles = theme => ({\n configuration: {\n display: 'grid',\n alignItems: 'center',\n gridColumnGap: `${theme.spacing.unit}px`,\n gridRowGap: `${theme.spacing.unit}px`,\n gridTemplateColumns: 'repeat(2, 1fr)',\n justifyContent: 'space-between',\n marginBottom: theme.spacing.unit\n },\n choiceConfig: {\n width: '100%',\n maxWidth: 360,\n backgroundColor: theme.palette.background.paper\n },\n row: {\n display: 'grid',\n gridColumnGap: `${theme.spacing.unit}px`,\n gridRowGap: `${theme.spacing.unit}px`,\n gridTemplateColumns: 'repeat(2, 1fr)',\n justifyContent: 'space-between',\n marginTop: theme.spacing.unit,\n marginBottom: theme.spacing.unit\n },\n shuffleCheckbox: {\n gridColumnStart: 2,\n gridColumnEnd: 2\n }\n});\nexport default withStyles(styles)(Config);\n"],"file":"config.js"}
@@ -62,6 +62,9 @@ var Choices = /*#__PURE__*/function (_React$Component) {
62
62
  }
63
63
 
64
64
  _this = _super.call.apply(_super, [this].concat(args));
65
+ (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "state", {
66
+ focusedEl: null
67
+ });
65
68
  (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "changeChoice", function (choice) {
66
69
  var _this$props = _this.props,
67
70
  choices = _this$props.choices,
@@ -86,7 +89,8 @@ var Choices = /*#__PURE__*/function (_React$Component) {
86
89
  (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "addChoice", function () {
87
90
  var _this$props2 = _this.props,
88
91
  onModelChanged = _this$props2.onModelChanged,
89
- model = _this$props2.model;
92
+ model = _this$props2.model,
93
+ oldChoices = _this$props2.choices;
90
94
 
91
95
  var id = _configUi.choiceUtils.firstAvailableIndex(model.choices.map(function (a) {
92
96
  return a.id;
@@ -96,8 +100,18 @@ var Choices = /*#__PURE__*/function (_React$Component) {
96
100
  id: id,
97
101
  content: 'Choice ' + id
98
102
  };
99
- onModelChanged({
100
- choices: model.choices.concat([data])
103
+
104
+ _this.setState({
105
+ focusedEl: oldChoices.length
106
+ }, function () {
107
+ onModelChanged({
108
+ choices: model.choices.concat([data])
109
+ });
110
+ });
111
+ });
112
+ (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "deleteFocusedEl", function () {
113
+ _this.setState({
114
+ focusedEl: null
101
115
  });
102
116
  });
103
117
  (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "deleteChoice", function (choice) {
@@ -114,6 +128,19 @@ var Choices = /*#__PURE__*/function (_React$Component) {
114
128
  onModelChanged(model);
115
129
  }
116
130
  });
131
+ (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "rearrangeChoices", function (indexFrom, indexTo) {
132
+ var _ref = _this.props || {},
133
+ model = _ref.model,
134
+ onModelChanged = _ref.onModelChanged;
135
+
136
+ var _ref2 = model || [],
137
+ choices = _ref2.choices;
138
+
139
+ choices = (0, _categorize.rearrangeChoices)(choices, indexFrom, indexTo);
140
+ onModelChanged({
141
+ choices: choices
142
+ });
143
+ });
117
144
  return _this;
118
145
  }
119
146
 
@@ -122,14 +149,35 @@ var Choices = /*#__PURE__*/function (_React$Component) {
122
149
  value: function render() {
123
150
  var _this2 = this;
124
151
 
152
+ var focusedEl = this.state.focusedEl;
125
153
  var _this$props4 = this.props,
126
154
  classes = _this$props4.classes,
127
155
  className = _this$props4.className,
128
156
  choices = _this$props4.choices,
129
157
  model = _this$props4.model,
130
158
  imageSupport = _this$props4.imageSupport,
159
+ uploadSoundSupport = _this$props4.uploadSoundSupport,
131
160
  onModelChanged = _this$props4.onModelChanged,
132
- toolbarOpts = _this$props4.toolbarOpts;
161
+ spellCheck = _this$props4.spellCheck,
162
+ toolbarOpts = _this$props4.toolbarOpts,
163
+ configuration = _this$props4.configuration,
164
+ defaultImageMaxWidth = _this$props4.defaultImageMaxWidth,
165
+ defaultImageMaxHeight = _this$props4.defaultImageMaxHeight;
166
+ var errors = model.errors,
167
+ allowMultiplePlacementsEnabled = model.allowMultiplePlacementsEnabled,
168
+ lockChoiceOrder = model.lockChoiceOrder;
169
+
170
+ var _ref3 = errors || {},
171
+ choicesError = _ref3.choicesError,
172
+ choicesErrors = _ref3.choicesErrors;
173
+
174
+ var _ref4 = configuration || {},
175
+ maxChoices = _ref4.maxChoices,
176
+ _ref4$maxImageWidth = _ref4.maxImageWidth,
177
+ maxImageWidth = _ref4$maxImageWidth === void 0 ? {} : _ref4$maxImageWidth,
178
+ _ref4$maxImageHeight = _ref4.maxImageHeight,
179
+ maxImageHeight = _ref4$maxImageHeight === void 0 ? {} : _ref4$maxImageHeight;
180
+
133
181
  var categoryCountIsOne = this.allChoicesHaveCount(1);
134
182
  var choiceHolderStyle = {
135
183
  gridTemplateColumns: "repeat(".concat(model.categoriesPerRow, ", 1fr)")
@@ -139,26 +187,41 @@ var Choices = /*#__PURE__*/function (_React$Component) {
139
187
  }, /*#__PURE__*/_react["default"].createElement(_header["default"], {
140
188
  label: "Choices",
141
189
  buttonLabel: "ADD A CHOICE",
142
- onAdd: this.addChoice
143
- }), /*#__PURE__*/_react["default"].createElement(_config["default"], {
190
+ onAdd: this.addChoice,
191
+ buttonDisabled: maxChoices && choices && maxChoices === choices.length
192
+ }), choicesError && /*#__PURE__*/_react["default"].createElement("div", {
193
+ className: classes.errorText
194
+ }, choicesError), /*#__PURE__*/_react["default"].createElement(_config["default"], {
144
195
  config: model,
145
- categoryCountIsOne: categoryCountIsOne,
146
196
  onModelChanged: onModelChanged,
147
- allChoicesHaveCount: this.allChoicesHaveCount
197
+ spellCheck: spellCheck
148
198
  }), /*#__PURE__*/_react["default"].createElement("div", {
149
199
  className: classes.choiceHolder,
150
200
  style: choiceHolderStyle
151
201
  }, choices.map(function (h, index) {
152
202
  return /*#__PURE__*/_react["default"].createElement(_choice["default"], {
153
203
  choice: h,
204
+ focusedEl: focusedEl,
205
+ deleteFocusedEl: _this2.deleteFocusedEl,
154
206
  correctResponseCount: h.correctResponseCount,
207
+ allowMultiplePlacements: allowMultiplePlacementsEnabled,
208
+ lockChoiceOrder: lockChoiceOrder,
209
+ index: index,
155
210
  key: index,
156
211
  imageSupport: imageSupport,
157
212
  onChange: _this2.changeChoice,
158
213
  onDelete: function onDelete() {
159
214
  return _this2.deleteChoice(h);
160
215
  },
161
- toolbarOpts: toolbarOpts
216
+ rearrangeChoices: function rearrangeChoices(indexFrom, indexTo) {
217
+ return _this2.rearrangeChoices(indexFrom, indexTo);
218
+ },
219
+ toolbarOpts: toolbarOpts,
220
+ spellCheck: spellCheck,
221
+ error: choicesErrors && choicesErrors[h.id],
222
+ maxImageWidth: maxImageWidth && maxImageWidth.choice || defaultImageMaxWidth,
223
+ maxImageHeight: maxImageHeight && maxImageHeight.choice || defaultImageMaxHeight,
224
+ uploadSoundSupport: uploadSoundSupport
162
225
  });
163
226
  })), /*#__PURE__*/_react["default"].createElement(_buttons.Divider, null));
164
227
  }
@@ -169,6 +232,7 @@ var Choices = /*#__PURE__*/function (_React$Component) {
169
232
  exports.Choices = Choices;
170
233
  (0, _defineProperty2["default"])(Choices, "propTypes", {
171
234
  model: _propTypes["default"].object.isRequired,
235
+ configuration: _propTypes["default"].object.isRequired,
172
236
  classes: _propTypes["default"].object.isRequired,
173
237
  className: _propTypes["default"].string,
174
238
  choices: _propTypes["default"].array.isRequired,
@@ -177,6 +241,10 @@ exports.Choices = Choices;
177
241
  add: _propTypes["default"].func.isRequired,
178
242
  "delete": _propTypes["default"].func.isRequired
179
243
  }),
244
+ uploadSoundSupport: _propTypes["default"].shape({
245
+ add: _propTypes["default"].func.isRequired,
246
+ "delete": _propTypes["default"].func.isRequired
247
+ }),
180
248
  toolbarOpts: _propTypes["default"].object
181
249
  });
182
250
  (0, _defineProperty2["default"])(Choices, "defaultProps", {});
@@ -194,7 +262,12 @@ var styles = function styles(theme) {
194
262
  paddingTop: theme.spacing.unit * 2,
195
263
  paddingBottom: theme.spacing.unit * 2
196
264
  },
197
- label: {}
265
+ label: {},
266
+ errorText: {
267
+ fontSize: '12px',
268
+ color: 'red',
269
+ padding: '5px 0'
270
+ }
198
271
  };
199
272
  };
200
273