@pie-element/explicit-constructed-response 3.11.1 → 3.11.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -3,6 +3,30 @@
3
3
  All notable changes to this project will be documented in this file.
4
4
  See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
5
5
 
6
+ ## [3.11.6](https://github.com/pie-framework/pie-elements/compare/@pie-element/explicit-constructed-response@3.11.5...@pie-element/explicit-constructed-response@3.11.6) (2021-12-13)
7
+
8
+ **Note:** Version bump only for package @pie-element/explicit-constructed-response
9
+
10
+
11
+
12
+
13
+
14
+ ## [3.11.3](https://github.com/pie-framework/pie-elements/compare/@pie-element/explicit-constructed-response@3.11.2...@pie-element/explicit-constructed-response@3.11.3) (2021-12-01)
15
+
16
+ **Note:** Version bump only for package @pie-element/explicit-constructed-response
17
+
18
+
19
+
20
+
21
+
22
+ ## [3.11.2](https://github.com/pie-framework/pie-elements/compare/@pie-element/explicit-constructed-response@3.11.1...@pie-element/explicit-constructed-response@3.11.2) (2021-11-29)
23
+
24
+ **Note:** Version bump only for package @pie-element/explicit-constructed-response
25
+
26
+
27
+
28
+
29
+
6
30
  ## [3.11.1](https://github.com/pie-framework/pie-elements/compare/@pie-element/explicit-constructed-response@3.10.5...@pie-element/explicit-constructed-response@3.11.1) (2021-11-11)
7
31
 
8
32
  **Note:** Version bump only for package @pie-element/explicit-constructed-response
@@ -3,6 +3,30 @@
3
3
  All notable changes to this project will be documented in this file.
4
4
  See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
5
5
 
6
+ ## [3.6.6](https://github.com/pie-framework/pie-elements/compare/@pie-element/explicit-constructed-response-configure@3.6.5...@pie-element/explicit-constructed-response-configure@3.6.6) (2021-12-13)
7
+
8
+ **Note:** Version bump only for package @pie-element/explicit-constructed-response-configure
9
+
10
+
11
+
12
+
13
+
14
+ ## [3.6.3](https://github.com/pie-framework/pie-elements/compare/@pie-element/explicit-constructed-response-configure@3.6.2...@pie-element/explicit-constructed-response-configure@3.6.3) (2021-12-01)
15
+
16
+ **Note:** Version bump only for package @pie-element/explicit-constructed-response-configure
17
+
18
+
19
+
20
+
21
+
22
+ ## [3.6.2](https://github.com/pie-framework/pie-elements/compare/@pie-element/explicit-constructed-response-configure@3.6.1...@pie-element/explicit-constructed-response-configure@3.6.2) (2021-11-29)
23
+
24
+ **Note:** Version bump only for package @pie-element/explicit-constructed-response-configure
25
+
26
+
27
+
28
+
29
+
6
30
  ## [3.6.1](https://github.com/pie-framework/pie-elements/compare/@pie-element/explicit-constructed-response-configure@3.5.31...@pie-element/explicit-constructed-response-configure@3.6.1) (2021-11-11)
7
31
 
8
32
  **Note:** Version bump only for package @pie-element/explicit-constructed-response-configure
@@ -64,22 +64,13 @@ var AlternateResponses = /*#__PURE__*/function (_React$Component) {
64
64
  maxLengthPerChoice: (0, _cloneDeep["default"])(_this.props.model.maxLengthPerChoice)
65
65
  });
66
66
  (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "updateChoicesIfNeeded", function (props) {
67
- var maxLengthPerChoice = props.model.maxLengthPerChoice;
68
- var maxLengthPerChoiceState = _this.state.maxLengthPerChoice;
69
- var lengthChanged = maxLengthPerChoiceState.length && !(0, _isEqual["default"])(maxLengthPerChoice, maxLengthPerChoiceState);
70
-
71
- if (lengthChanged) {
72
- _this.setState({
73
- maxLengthPerChoice: (0, _cloneDeep["default"])(maxLengthPerChoice)
74
- });
75
-
76
- return;
77
- }
78
-
79
- if (!_this.state.choices || !(0, _isEqual["default"])(_this.state.choices, props.model.choices) || !(0, _isEqual["default"])(props.model.choices, _this.props.model.choices)) {
80
- var choices = props.model.choices;
67
+ if (!_this.state.choices || !(0, _isEqual["default"])(_this.state.choices, props.model.choices) || !(0, _isEqual["default"])(props.model.choices, _this.props.model.choices) || _this.state.values && Object.keys(_this.state.values).length !== Object.keys(_this.props.model.choices).length || props.maxLengthPerChoiceEnabled !== _this.props.maxLengthPerChoiceEnabled) {
68
+ var _props$model = props.model,
69
+ choices = _props$model.choices,
70
+ maxLengthPerChoice = _props$model.maxLengthPerChoice;
81
71
  var selectedValues = (0, _reduce["default"])(choices, function (obj, c, key) {
82
- if (c && c.length > 1) {
72
+ // if maxLengthPerChoiceEnabled is true, we display all the choices
73
+ if (c && (props.maxLengthPerChoiceEnabled || c.length > 1)) {
83
74
  obj[key] = c[0];
84
75
  }
85
76
 
@@ -88,7 +79,8 @@ var AlternateResponses = /*#__PURE__*/function (_React$Component) {
88
79
 
89
80
  _this.setState({
90
81
  choices: props.model.choices,
91
- values: selectedValues
82
+ values: selectedValues,
83
+ maxLengthPerChoice: (0, _cloneDeep["default"])(maxLengthPerChoice)
92
84
  });
93
85
  }
94
86
  });
@@ -189,7 +181,8 @@ var AlternateResponses = /*#__PURE__*/function (_React$Component) {
189
181
  maxLengthPerChoice = _this$props$model.maxLengthPerChoice,
190
182
  maxLengthPerChoiceEnabled = _this$props$model.maxLengthPerChoiceEnabled;
191
183
  return /*#__PURE__*/_react["default"].createElement("div", null, (0, _map["default"])(choices, function (c, key) {
192
- if (c && c.length > 1) {
184
+ // if maxLengthPerChoiceEnabled is true, we display all the choices
185
+ if (c && (maxLengthPerChoiceEnabled || c.length > 1)) {
193
186
  var selected = _this2.state.values[key];
194
187
  return /*#__PURE__*/_react["default"].createElement(_alternateSection["default"], {
195
188
  key: key,
@@ -234,7 +227,8 @@ exports.AlternateResponses = AlternateResponses;
234
227
  (0, _defineProperty2["default"])(AlternateResponses, "propTypes", {
235
228
  model: _propTypes["default"].object.isRequired,
236
229
  onChange: _propTypes["default"].func.isRequired,
237
- onLengthChange: _propTypes["default"].func.isRequired
230
+ onLengthChange: _propTypes["default"].func.isRequired,
231
+ maxLengthPerChoiceEnabled: _propTypes["default"].bool.isRequired
238
232
  });
239
233
  var _default = AlternateResponses;
240
234
  exports["default"] = _default;
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/alternateResponses.jsx"],"names":["AlternateResponses","maxLengthPerChoice","props","model","maxLengthPerChoiceState","state","lengthChanged","length","setState","choices","selectedValues","obj","c","key","values","valueKey","arr","push","label","value","choice","onChange","sectionChoices","isNew","find","newChoices","reduce","newVal","section","onLengthChange","nextProps","updateChoicesIfNeeded","maxLengthPerChoiceEnabled","selected","onSectionSelect","onChoiceChanged","onChoiceRemoved","onLengthChanged","Object","keys","getRemainingChoices","React","Component","PropTypes","object","isRequired","func"],"mappings":"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","sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\nimport isEqual from 'lodash/isEqual';\nimport map from 'lodash/map';\nimport reduce from 'lodash/reduce';\nimport cloneDeep from 'lodash/cloneDeep';\n\nimport AlternateSection from './alternateSection';\n\nexport class AlternateResponses extends React.Component {\n static propTypes = {\n model: PropTypes.object.isRequired,\n onChange: PropTypes.func.isRequired,\n onLengthChange: PropTypes.func.isRequired\n };\n\n state = { maxLengthPerChoice: cloneDeep(this.props.model.maxLengthPerChoice) };\n\n UNSAFE_componentWillReceiveProps(nextProps) {\n this.updateChoicesIfNeeded(nextProps);\n }\n\n componentDidMount() {\n this.updateChoicesIfNeeded(this.props);\n }\n\n updateChoicesIfNeeded = props => {\n const { maxLengthPerChoice } = props.model;\n const { maxLengthPerChoice: maxLengthPerChoiceState } = this.state;\n const lengthChanged = maxLengthPerChoiceState.length && !isEqual(maxLengthPerChoice, maxLengthPerChoiceState);\n\n if (lengthChanged) {\n this.setState({\n maxLengthPerChoice: cloneDeep(maxLengthPerChoice)\n });\n\n return;\n }\n\n if (!this.state.choices\n || !isEqual(this.state.choices, props.model.choices)\n || !isEqual(props.model.choices, this.props.model.choices)\n ) {\n const { choices } = props.model;\n\n const selectedValues = reduce(choices, (obj, c, key) => {\n if (c && c.length > 1) {\n obj[key] = c[0];\n }\n\n return obj;\n }, {});\n\n this.setState({\n choices: props.model.choices,\n values: selectedValues\n });\n }\n };\n\n getRemainingChoices = valueKey => {\n const { choices } = this.state;\n\n return reduce(choices, (arr, c, key) => {\n if (c && c.length === 1 && !valueKey) {\n arr.push({\n label: c[0].label,\n value: key\n });\n }\n\n return arr;\n }, []);\n };\n\n onChoiceChanged = (choice, key) => {\n const { onChange } = this.props;\n const { choices } = this.state;\n const sectionChoices = (choices[key] || []);\n\n const isNew = !sectionChoices.find(c => c.value === choice.value);\n\n const newChoices = sectionChoices.reduce((arr, c) => {\n const newVal = c.value === choice.value ? choice : c;\n\n arr.push(newVal);\n\n return arr;\n }, []);\n\n if (isNew) {\n newChoices.push(choice);\n }\n\n onChange({\n ...choices,\n [key]: newChoices\n });\n };\n\n onChoiceRemoved = (value, section) => {\n const { onChange } = this.props;\n const { choices } = this.state;\n const sectionChoices = (choices[section] || []);\n\n const newChoices = sectionChoices.reduce((arr, c) => {\n if (c.value === value) {\n return arr;\n }\n\n arr.push(c);\n\n return arr;\n }, []);\n\n onChange({\n ...choices,\n [section]: newChoices\n });\n };\n\n onSectionSelect = (choice, key) => {\n const { onChange } = this.props;\n const { choices, values } = this.state;\n\n if (choices[key] && choices[key].length > 1) {\n if (!choice) {\n onChange({\n ...choices,\n [key]: [choices[key][0]]\n });\n }\n } else {\n this.setState({\n choices: {\n ...choices,\n [key]: [\n ...choices[key],\n {\n label: '',\n value: '1'\n }\n ]\n },\n values: {\n ...values,\n [key]: choices[key][0]\n }\n });\n }\n };\n\n onLengthChanged = (value, key) => {\n const { model, onLengthChange } = this.props;\n const { maxLengthPerChoice } = model;\n\n maxLengthPerChoice[key] = value;\n onLengthChange(maxLengthPerChoice);\n }\n\n render() {\n const { choices } = this.state;\n const { model: { maxLengthPerChoice, maxLengthPerChoiceEnabled }} = this.props\n\n return (\n <div>\n {map(choices, (c, key) => {\n if (c && c.length > 1) {\n const selected = this.state.values[key];\n\n return (\n <AlternateSection\n key={key}\n value={selected && selected.value}\n onSelect={choice => this.onSectionSelect(choice, key)}\n choiceChanged={choice => this.onChoiceChanged(choice, key)}\n choiceRemoved={value => this.onChoiceRemoved(value, key)}\n lengthChanged={value => this.onLengthChanged(value, key)}\n selectChoices={[selected]}\n choices={c}\n maxLength={maxLengthPerChoice[key]}\n showMaxLength={maxLengthPerChoiceEnabled}\n />\n );\n }\n })}\n {\n choices &&\n Object.keys(this.state.values).length !== Object.keys(choices).length &&\n <AlternateSection\n value=\"\"\n onSelect={choice => this.onSectionSelect(choice, choice.value)}\n choiceChanged={choice => this.onChoiceChanged(choice)}\n choiceRemoved={value => this.onChoiceRemoved(value)}\n selectChoices={this.getRemainingChoices()}\n />\n }\n </div>\n );\n }\n}\n\nexport default AlternateResponses;\n"],"file":"alternateResponses.js"}
1
+ {"version":3,"sources":["../src/alternateResponses.jsx"],"names":["AlternateResponses","maxLengthPerChoice","props","model","state","choices","values","Object","keys","length","maxLengthPerChoiceEnabled","selectedValues","obj","c","key","setState","valueKey","arr","push","label","value","choice","onChange","sectionChoices","isNew","find","newChoices","reduce","newVal","section","onLengthChange","nextProps","updateChoicesIfNeeded","selected","onSectionSelect","onChoiceChanged","onChoiceRemoved","onLengthChanged","getRemainingChoices","React","Component","PropTypes","object","isRequired","func","bool"],"mappings":"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","sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\nimport isEqual from 'lodash/isEqual';\nimport map from 'lodash/map';\nimport reduce from 'lodash/reduce';\nimport cloneDeep from 'lodash/cloneDeep';\n\nimport AlternateSection from './alternateSection';\n\nexport class AlternateResponses extends React.Component {\n static propTypes = {\n model: PropTypes.object.isRequired,\n onChange: PropTypes.func.isRequired,\n onLengthChange: PropTypes.func.isRequired,\n maxLengthPerChoiceEnabled: PropTypes.bool.isRequired\n };\n\n state = { maxLengthPerChoice: cloneDeep(this.props.model.maxLengthPerChoice) };\n\n UNSAFE_componentWillReceiveProps(nextProps) {\n this.updateChoicesIfNeeded(nextProps);\n }\n\n componentDidMount() {\n this.updateChoicesIfNeeded(this.props);\n }\n\n updateChoicesIfNeeded = props => {\n if (!this.state.choices\n || !isEqual(this.state.choices, props.model.choices)\n || !isEqual(props.model.choices, this.props.model.choices)\n || (this.state.values && Object.keys(this.state.values).length !== Object.keys(this.props.model.choices).length)\n || props.maxLengthPerChoiceEnabled !== this.props.maxLengthPerChoiceEnabled\n ) {\n const { choices, maxLengthPerChoice } = props.model;\n\n const selectedValues = reduce(choices, (obj, c, key) => {\n // if maxLengthPerChoiceEnabled is true, we display all the choices\n if (c && (props.maxLengthPerChoiceEnabled || c.length > 1)) {\n obj[key] = c[0];\n }\n\n return obj;\n }, {});\n\n this.setState({\n choices: props.model.choices,\n values: selectedValues,\n maxLengthPerChoice: cloneDeep(maxLengthPerChoice)\n });\n }\n };\n\n getRemainingChoices = valueKey => {\n const { choices } = this.state;\n\n return reduce(choices, (arr, c, key) => {\n if (c && c.length === 1 && !valueKey) {\n arr.push({\n label: c[0].label,\n value: key\n });\n }\n\n return arr;\n }, []);\n };\n\n onChoiceChanged = (choice, key) => {\n const { onChange } = this.props;\n const { choices } = this.state;\n const sectionChoices = (choices[key] || []);\n\n const isNew = !sectionChoices.find(c => c.value === choice.value);\n\n const newChoices = sectionChoices.reduce((arr, c) => {\n const newVal = c.value === choice.value ? choice : c;\n\n arr.push(newVal);\n\n return arr;\n }, []);\n\n if (isNew) {\n newChoices.push(choice);\n }\n\n onChange({\n ...choices,\n [key]: newChoices\n });\n };\n\n onChoiceRemoved = (value, section) => {\n const { onChange } = this.props;\n const { choices } = this.state;\n const sectionChoices = (choices[section] || []);\n\n const newChoices = sectionChoices.reduce((arr, c) => {\n if (c.value === value) {\n return arr;\n }\n\n arr.push(c);\n\n return arr;\n }, []);\n\n onChange({\n ...choices,\n [section]: newChoices\n });\n };\n\n onSectionSelect = (choice, key) => {\n const { onChange } = this.props;\n const { choices, values } = this.state;\n\n if (choices[key] && choices[key].length > 1) {\n if (!choice) {\n onChange({\n ...choices,\n [key]: [choices[key][0]]\n });\n }\n } else {\n this.setState({\n choices: {\n ...choices,\n [key]: [\n ...choices[key],\n {\n label: '',\n value: '1'\n }\n ]\n },\n values: {\n ...values,\n [key]: choices[key][0]\n }\n });\n }\n };\n\n onLengthChanged = (value, key) => {\n const { model, onLengthChange } = this.props;\n const { maxLengthPerChoice } = model;\n\n maxLengthPerChoice[key] = value;\n onLengthChange(maxLengthPerChoice);\n }\n\n render() {\n const { choices } = this.state;\n const { model: { maxLengthPerChoice, maxLengthPerChoiceEnabled }} = this.props\n\n return (\n <div>\n {map(choices, (c, key) => {\n // if maxLengthPerChoiceEnabled is true, we display all the choices\n if (c && (maxLengthPerChoiceEnabled || c.length > 1)) {\n const selected = this.state.values[key];\n\n return (\n <AlternateSection\n key={key}\n value={selected && selected.value}\n onSelect={choice => this.onSectionSelect(choice, key)}\n choiceChanged={choice => this.onChoiceChanged(choice, key)}\n choiceRemoved={value => this.onChoiceRemoved(value, key)}\n lengthChanged={value => this.onLengthChanged(value, key)}\n selectChoices={[selected]}\n choices={c}\n maxLength={maxLengthPerChoice[key]}\n showMaxLength={maxLengthPerChoiceEnabled}\n />\n );\n }\n })}\n {\n choices &&\n Object.keys(this.state.values).length !== Object.keys(choices).length &&\n <AlternateSection\n value=\"\"\n onSelect={choice => this.onSectionSelect(choice, choice.value)}\n choiceChanged={choice => this.onChoiceChanged(choice)}\n choiceRemoved={value => this.onChoiceRemoved(value)}\n selectChoices={this.getRemainingChoices()}\n />\n }\n </div>\n );\n }\n}\n\nexport default AlternateResponses;\n"],"file":"alternateResponses.js"}
@@ -47,6 +47,8 @@ var _TextField = _interopRequireDefault(require("@material-ui/core/TextField"));
47
47
 
48
48
  var _styles = require("@material-ui/core/styles");
49
49
 
50
+ var _markupUtils = require("./markupUtils");
51
+
50
52
  var _max = _interopRequireDefault(require("lodash/max"));
51
53
 
52
54
  function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }
@@ -221,28 +223,31 @@ var AlternateSection = /*#__PURE__*/function (_React$Component2) {
221
223
  });
222
224
  }
223
225
  });
224
- (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this2), "onChoiceChanged", function (choice, value) {
226
+ (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this2), "onChoiceChanged", function (choice, value, index) {
225
227
  var _this2$props2 = _this2.props,
226
228
  choiceChanged = _this2$props2.choiceChanged,
227
229
  lengthChanged = _this2$props2.lengthChanged,
228
- maxLength = _this2$props2.maxLength;
229
- var newMaxLength = Math.max(_this2.getChoicesMaxLength(), maxLength);
230
- var newLength = value.length;
231
-
232
- if (newLength > newMaxLength) {
233
- lengthChanged(newLength);
234
- }
235
-
230
+ maxLength = _this2$props2.maxLength,
231
+ choices = _this2$props2.choices;
232
+ var labelLengthsArr = choices.map(function (choice) {
233
+ return (choice.label || '').length;
234
+ });
235
+ labelLengthsArr[index] = value.length;
236
+ var newLength = (0, _markupUtils.getAdjustedLength)(Math.max.apply(Math, (0, _toConsumableArray2["default"])(labelLengthsArr)));
236
237
  choiceChanged(_objectSpread(_objectSpread({}, choice), {}, {
237
238
  label: value
238
239
  }));
240
+
241
+ if (newLength > maxLength || newLength + 10 < maxLength) {
242
+ lengthChanged(newLength);
243
+ }
239
244
  });
240
245
  (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this2), "onRemoveChoice", function (choice) {
241
246
  var choiceRemoved = _this2.props.choiceRemoved;
242
247
  choiceRemoved(choice.value);
243
248
  });
244
249
  (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this2), "getChoicesMaxLength", function () {
245
- var choices = _this2.props.choices;
250
+ var choices = _this2.state.choices;
246
251
 
247
252
  if (!choices) {
248
253
  return 1;
@@ -251,7 +256,7 @@ var AlternateSection = /*#__PURE__*/function (_React$Component2) {
251
256
  var labelLengthsArr = choices.map(function (choice) {
252
257
  return (choice.label || '').length;
253
258
  });
254
- return Math.max.apply(Math, (0, _toConsumableArray2["default"])(labelLengthsArr));
259
+ return (0, _markupUtils.getAdjustedLength)(Math.max.apply(Math, (0, _toConsumableArray2["default"])(labelLengthsArr)));
255
260
  });
256
261
  (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this2), "changeLength", function (event) {
257
262
  var lengthChanged = _this2.props.lengthChanged;
@@ -297,7 +302,8 @@ var AlternateSection = /*#__PURE__*/function (_React$Component2) {
297
302
  className: classes.select,
298
303
  displayEmpty: true,
299
304
  onChange: this.handleSelect,
300
- value: value || ''
305
+ value: value || '',
306
+ readOnly: showMaxLength
301
307
  }, /*#__PURE__*/_react["default"].createElement(_MenuItem["default"], {
302
308
  value: ""
303
309
  }, /*#__PURE__*/_react["default"].createElement("em", null, value ? 'Remove selection' : 'Select a response')), selectChoices.map(function (c, index) {
@@ -330,7 +336,7 @@ var AlternateSection = /*#__PURE__*/function (_React$Component2) {
330
336
  classes: classes,
331
337
  markup: c.label,
332
338
  onChange: function onChange(val) {
333
- return _this3.onChoiceChanged(c, val);
339
+ return _this3.onChoiceChanged(c, val, index);
334
340
  },
335
341
  onDelete: function onDelete() {
336
342
  return _this3.onRemoveChoice(c);
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/alternateSection.jsx"],"names":["styles","altChoices","alignItems","flexDirection","display","padding","marginBottom","width","choice","flex","marginRight","deleteBtn","fill","selectContainer","justifyContent","rightContainer","lengthField","Choice","value","props","markup","onChange","e","target","setState","updateText","nextProps","state","classes","onDelete","React","Component","PropTypes","object","string","func","isRequired","AlternateSection","choices","onSelect","selectChoices","find","c","length","label","map","parseInt","filter","id","isNaN","choiceChanged","lengthChanged","maxLength","newMaxLength","Math","max","getChoicesMaxLength","newLength","choiceRemoved","labelLengthsArr","event","numberValue","minLength","updateChoicesIfNeeded","showMaxLength","design","select","handleSelect","index","min","changeLength","addButton","onAddChoice","val","onChoiceChanged","onRemoveChoice","array","number","bool","Styled"],"mappings":"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","sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\nimport debounce from 'lodash/debounce';\nimport isEqual from 'lodash/isEqual';\nimport OutlinedInput from '@material-ui/core/OutlinedInput';\nimport Button from '@material-ui/core/Button';\nimport Delete from '@material-ui/icons/Delete';\nimport IconButton from '@material-ui/core/IconButton';\nimport MenuItem from '@material-ui/core/MenuItem';\nimport Select from '@material-ui/core/Select';\nimport TextField from '@material-ui/core/TextField';\nimport {withStyles} from '@material-ui/core/styles';\nimport max from 'lodash/max';\n\nconst styles = () => ({\n altChoices: {\n alignItems: 'flex-start',\n flexDirection: 'column',\n display: 'flex',\n padding: '20px 0 0 0',\n '& > *': {\n marginBottom: '20px',\n width: '100%'\n }\n },\n choice: {\n flex: '1',\n marginRight: '20px'\n },\n deleteBtn: {\n fill: 'gray'\n },\n selectContainer: {\n alignItems: 'flex-end',\n display: 'flex',\n justifyContent: 'space-between',\n width: '100%'\n },\n rightContainer: {\n alignItems: 'center',\n display: 'flex',\n },\n lengthField: {\n width: '230px',\n marginRight: '20px'\n }\n});\n\nexport class Choice extends React.Component {\n static propTypes = {\n classes: PropTypes.object,\n markup: PropTypes.string,\n onChange: PropTypes.func.isRequired,\n onDelete: PropTypes.func.isRequired,\n value: PropTypes.string\n };\n\n state = {\n value: this.props.markup\n };\n\n updateText = debounce(this.props.onChange, 300);\n\n UNSAFE_componentWillReceiveProps(nextProps) {\n if (nextProps.markup) {\n this.setState({ value: nextProps.markup });\n }\n }\n\n onChange = (e) => {\n const { value } = e.target;\n\n this.setState({ value });\n this.updateText(value);\n };\n\n render() {\n const { value } = this.state;\n const { classes, onDelete } = this.props;\n\n return (\n <div\n style={{\n alignItems: 'center',\n display: 'flex',\n justifyContent: 'space-between'\n }}\n >\n <OutlinedInput\n className={classes.choice}\n value={value}\n onChange={this.onChange}\n labelWidth={0}\n disableUnderline\n />\n <IconButton\n aria-label=\"delete\"\n className={classes.deleteBtn}\n onClick={onDelete}\n >\n <Delete />\n </IconButton>\n </div>\n );\n }\n}\n\nexport class AlternateSection extends React.Component {\n static propTypes = {\n choices: PropTypes.array,\n selectChoices: PropTypes.array.isRequired,\n classes: PropTypes.object.isRequired,\n onSelect: PropTypes.func.isRequired,\n choiceChanged: PropTypes.func.isRequired,\n lengthChanged: PropTypes.func,\n choiceRemoved: PropTypes.func.isRequired,\n value: PropTypes.string,\n maxLength: PropTypes.number,\n showMaxLength: PropTypes.bool\n };\n\n state = {};\n\n UNSAFE_componentWillReceiveProps(nextProps) {\n this.updateChoicesIfNeeded(nextProps);\n }\n\n componentDidMount() {\n this.updateChoicesIfNeeded(this.props);\n }\n\n updateChoicesIfNeeded = props => {\n if (!this.state.choices\n || !isEqual(props.choices, this.state.choices)\n || !isEqual(props.choices, this.props.choices)\n ) {\n this.setState({\n choices: props.choices\n });\n }\n };\n\n handleSelect = e => {\n const { onSelect, selectChoices } = this.props;\n const { value } = e.target;\n\n onSelect(selectChoices.find(c => c.value === value));\n };\n\n onAddChoice = () => {\n const { choices } = this.state;\n\n if (choices.length && choices[choices.length - 1].label !== '') {\n const value = max(choices.map(c => parseInt(c.value)).filter(id => !isNaN(id))) || 0;\n\n this.setState({\n choices: [\n ...choices,\n {\n value: `${value + 1}`,\n label: ''\n }\n ]\n });\n }\n };\n\n onChoiceChanged = (choice, value) => {\n const { choiceChanged, lengthChanged, maxLength } = this.props;\n const newMaxLength = Math.max(this.getChoicesMaxLength(), maxLength);\n const newLength = value.length;\n\n if (newLength > newMaxLength) {\n lengthChanged(newLength);\n }\n\n choiceChanged({\n ...choice,\n label: value\n });\n };\n\n onRemoveChoice = choice => {\n const { choiceRemoved } = this.props;\n\n choiceRemoved(choice.value);\n };\n\n getChoicesMaxLength = () => {\n const { choices } = this.props;\n\n if (!choices) {\n return 1;\n }\n\n const labelLengthsArr = choices.map(choice => (choice.label || '').length);\n return Math.max(...labelLengthsArr);\n };\n\n changeLength = event => {\n const { lengthChanged } = this.props;\n const numberValue = parseInt(event.target.value, 10);\n const minLength = this.getChoicesMaxLength();\n\n if (numberValue && numberValue >= minLength && numberValue <= minLength + 10) {\n lengthChanged(numberValue);\n }\n };\n\n render() {\n const {\n classes,\n selectChoices,\n maxLength,\n showMaxLength,\n value\n } = this.props;\n const { choices } = this.state;\n const minLength = this.getChoicesMaxLength();\n\n return (\n <div className={classes.design}>\n <div\n className={classes.selectContainer}\n >\n <Select\n className={classes.select}\n displayEmpty\n onChange={this.handleSelect}\n value={value || ''}\n >\n <MenuItem value=\"\">\n <em>\n {value ? 'Remove selection' : 'Select a response'}\n </em>\n </MenuItem>\n {selectChoices.map((c, index) => <MenuItem key={index} value={c.value}>{c.label}</MenuItem>)}\n </Select>\n {\n choices && choices.length > 0 &&\n <div className={classes.rightContainer}>\n {maxLength && showMaxLength && (\n <TextField\n className={classes.lengthField}\n label=\"Maximum length (characters)\"\n type=\"number\"\n inputProps={{\n min: minLength,\n max: minLength + 10\n }}\n value={maxLength}\n onChange={this.changeLength}\n />\n )}\n <Button\n className={classes.addButton}\n variant=\"contained\"\n color=\"primary\"\n onClick={this.onAddChoice}\n >\n Add\n </Button>\n </div>\n }\n </div>\n <div\n className={classes.altChoices}\n >\n {\n choices &&\n choices.map((c, index) => index > 0 && (\n <Choice\n key={index}\n classes={classes}\n markup={c.label}\n onChange={val => this.onChoiceChanged(c, val)}\n onDelete={() => this.onRemoveChoice(c)}\n />\n ))\n }\n </div>\n </div>\n );\n }\n}\n\nconst Styled = withStyles(styles)(AlternateSection);\n\nexport default Styled;\n"],"file":"alternateSection.js"}
1
+ {"version":3,"sources":["../src/alternateSection.jsx"],"names":["styles","altChoices","alignItems","flexDirection","display","padding","marginBottom","width","choice","flex","marginRight","deleteBtn","fill","selectContainer","justifyContent","rightContainer","lengthField","Choice","value","props","markup","onChange","e","target","setState","updateText","nextProps","state","classes","onDelete","React","Component","PropTypes","object","string","func","isRequired","AlternateSection","choices","onSelect","selectChoices","find","c","length","label","map","parseInt","filter","id","isNaN","index","choiceChanged","lengthChanged","maxLength","labelLengthsArr","newLength","Math","max","choiceRemoved","event","numberValue","minLength","getChoicesMaxLength","updateChoicesIfNeeded","showMaxLength","design","select","handleSelect","min","changeLength","addButton","onAddChoice","val","onChoiceChanged","onRemoveChoice","array","number","bool","Styled"],"mappings":"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","sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\nimport debounce from 'lodash/debounce';\nimport isEqual from 'lodash/isEqual';\nimport OutlinedInput from '@material-ui/core/OutlinedInput';\nimport Button from '@material-ui/core/Button';\nimport Delete from '@material-ui/icons/Delete';\nimport IconButton from '@material-ui/core/IconButton';\nimport MenuItem from '@material-ui/core/MenuItem';\nimport Select from '@material-ui/core/Select';\nimport TextField from '@material-ui/core/TextField';\nimport { withStyles } from '@material-ui/core/styles';\nimport { getAdjustedLength } from './markupUtils';\nimport max from 'lodash/max';\n\nconst styles = () => ({\n altChoices: {\n alignItems: 'flex-start',\n flexDirection: 'column',\n display: 'flex',\n padding: '20px 0 0 0',\n '& > *': {\n marginBottom: '20px',\n width: '100%'\n }\n },\n choice: {\n flex: '1',\n marginRight: '20px'\n },\n deleteBtn: {\n fill: 'gray'\n },\n selectContainer: {\n alignItems: 'flex-end',\n display: 'flex',\n justifyContent: 'space-between',\n width: '100%'\n },\n rightContainer: {\n alignItems: 'center',\n display: 'flex',\n },\n lengthField: {\n width: '230px',\n marginRight: '20px'\n }\n});\n\nexport class Choice extends React.Component {\n static propTypes = {\n classes: PropTypes.object,\n markup: PropTypes.string,\n onChange: PropTypes.func.isRequired,\n onDelete: PropTypes.func.isRequired,\n value: PropTypes.string\n };\n\n state = {\n value: this.props.markup\n };\n\n updateText = debounce(this.props.onChange, 300);\n\n UNSAFE_componentWillReceiveProps(nextProps) {\n if (nextProps.markup) {\n this.setState({ value: nextProps.markup });\n }\n }\n\n onChange = (e) => {\n const { value } = e.target;\n\n this.setState({ value });\n this.updateText(value);\n };\n\n render() {\n const { value } = this.state;\n const { classes, onDelete } = this.props;\n\n return (\n <div\n style={{\n alignItems: 'center',\n display: 'flex',\n justifyContent: 'space-between'\n }}\n >\n <OutlinedInput\n className={classes.choice}\n value={value}\n onChange={this.onChange}\n labelWidth={0}\n disableUnderline\n />\n <IconButton\n aria-label=\"delete\"\n className={classes.deleteBtn}\n onClick={onDelete}\n >\n <Delete />\n </IconButton>\n </div>\n );\n }\n}\n\nexport class AlternateSection extends React.Component {\n static propTypes = {\n choices: PropTypes.array,\n selectChoices: PropTypes.array.isRequired,\n classes: PropTypes.object.isRequired,\n onSelect: PropTypes.func.isRequired,\n choiceChanged: PropTypes.func.isRequired,\n lengthChanged: PropTypes.func,\n choiceRemoved: PropTypes.func.isRequired,\n value: PropTypes.string,\n maxLength: PropTypes.number,\n showMaxLength: PropTypes.bool\n };\n\n state = {};\n\n UNSAFE_componentWillReceiveProps(nextProps) {\n this.updateChoicesIfNeeded(nextProps);\n }\n\n componentDidMount() {\n this.updateChoicesIfNeeded(this.props);\n }\n\n updateChoicesIfNeeded = props => {\n if (!this.state.choices\n || !isEqual(props.choices, this.state.choices)\n || !isEqual(props.choices, this.props.choices)\n ) {\n this.setState({\n choices: props.choices\n });\n }\n };\n\n handleSelect = e => {\n const { onSelect, selectChoices } = this.props;\n const { value } = e.target;\n\n onSelect(selectChoices.find(c => c.value === value));\n };\n\n onAddChoice = () => {\n const { choices } = this.state;\n\n if (choices.length && choices[choices.length - 1].label !== '') {\n const value = max(choices.map(c => parseInt(c.value)).filter(id => !isNaN(id))) || 0;\n\n this.setState({\n choices: [\n ...choices,\n {\n value: `${value + 1}`,\n label: ''\n }\n ]\n });\n }\n };\n\n onChoiceChanged = (choice, value, index) => {\n const { choiceChanged, lengthChanged, maxLength, choices } = this.props;\n\n const labelLengthsArr = choices.map(choice => (choice.label || '').length);\n labelLengthsArr[index] = value.length;\n\n const newLength = getAdjustedLength(Math.max(...labelLengthsArr));\n\n choiceChanged({\n ...choice,\n label: value\n });\n\n if (newLength > maxLength || newLength + 10 < maxLength) {\n lengthChanged(newLength);\n }\n };\n\n onRemoveChoice = choice => {\n const { choiceRemoved } = this.props;\n\n choiceRemoved(choice.value);\n };\n\n getChoicesMaxLength = () => {\n const { choices } = this.state;\n\n if (!choices) {\n return 1;\n }\n\n const labelLengthsArr = choices.map(choice => (choice.label || '').length);\n\n return getAdjustedLength(Math.max(...labelLengthsArr));\n };\n\n changeLength = event => {\n const { lengthChanged } = this.props;\n const numberValue = parseInt(event.target.value, 10);\n const minLength = this.getChoicesMaxLength();\n\n if (numberValue && numberValue >= minLength && numberValue <= minLength + 10) {\n lengthChanged(numberValue);\n }\n };\n\n render() {\n const {\n classes,\n selectChoices,\n maxLength,\n showMaxLength,\n value\n } = this.props;\n const { choices } = this.state;\n const minLength = this.getChoicesMaxLength();\n\n return (\n <div className={classes.design}>\n <div\n className={classes.selectContainer}\n >\n <Select\n className={classes.select}\n displayEmpty\n onChange={this.handleSelect}\n value={value || ''}\n readOnly={showMaxLength}\n >\n <MenuItem value=\"\">\n <em>\n {value ? 'Remove selection' : 'Select a response'}\n </em>\n </MenuItem>\n {selectChoices.map((c, index) => <MenuItem key={index} value={c.value}>{c.label}</MenuItem>)}\n </Select>\n {\n choices && choices.length > 0 &&\n <div className={classes.rightContainer}>\n {maxLength && showMaxLength && (\n <TextField\n className={classes.lengthField}\n label=\"Maximum length (characters)\"\n type=\"number\"\n inputProps={{\n min: minLength,\n max: minLength + 10\n }}\n value={maxLength}\n onChange={this.changeLength}\n />\n )}\n <Button\n className={classes.addButton}\n variant=\"contained\"\n color=\"primary\"\n onClick={this.onAddChoice}\n >\n Add\n </Button>\n </div>\n }\n </div>\n <div\n className={classes.altChoices}\n >\n {\n choices &&\n choices.map((c, index) => index > 0 && (\n <Choice\n key={index}\n classes={classes}\n markup={c.label}\n onChange={val => this.onChoiceChanged(c, val, index)}\n onDelete={() => this.onRemoveChoice(c)}\n />\n ))\n }\n </div>\n </div>\n );\n }\n}\n\nconst Styled = withStyles(styles)(AlternateSection);\n\nexport default Styled;\n"],"file":"alternateSection.js"}
@@ -12,6 +12,7 @@ var _default = {
12
12
  shuffle: true,
13
13
  markup: '<p>The {{0}} jumped {{1}} the {{2}}</p>',
14
14
  toolbarEditorPosition: 'bottom',
15
+ displayType: 'block',
15
16
  choices: {
16
17
  0: [{
17
18
  label: 'cow',
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/defaults.js"],"names":["model","disabled","mode","prompt","shuffle","markup","toolbarEditorPosition","choices","label","value","correct","maxLengthPerChoiceEnabled","rationaleEnabled","promptEnabled","teacherInstructionsEnabled","studentInstructionsEnabled","configuration","settings","partialScoring","rationale","teacherInstructions","maxLengthPerChoice"],"mappings":";;;;;;eAAe;AACbA,EAAAA,KAAK,EAAE;AACLC,IAAAA,QAAQ,EAAE,KADL;AAELC,IAAAA,IAAI,EAAE,QAFD;AAGLC,IAAAA,MAAM,EAAE,yCAHH;AAILC,IAAAA,OAAO,EAAE,IAJJ;AAKLC,IAAAA,MAAM,EAAE,yCALH;AAMLC,IAAAA,qBAAqB,EAAE,QANlB;AAOLC,IAAAA,OAAO,EAAE;AACP,SAAG,CACD;AACEC,QAAAA,KAAK,EAAE,KADT;AAEEC,QAAAA,KAAK,EAAE;AAFT,OADC,EAKD;AACED,QAAAA,KAAK,EAAE,QADT;AAEEC,QAAAA,KAAK,EAAE;AAFT,OALC,EASD;AACED,QAAAA,KAAK,EAAE,MADT;AAEEC,QAAAA,KAAK,EAAE,GAFT;AAGEC,QAAAA,OAAO,EAAE;AAHX,OATC,CADI;AAgBP,SAAG,CACD;AACEF,QAAAA,KAAK,EAAE,MADT;AAEEC,QAAAA,KAAK,EAAE;AAFT,OADC,EAKD;AACED,QAAAA,KAAK,EAAE,MADT;AAEEC,QAAAA,KAAK,EAAE;AAFT,OALC,EASD;AACED,QAAAA,KAAK,EAAE,QADT;AAEEC,QAAAA,KAAK,EAAE;AAFT,OATC,CAhBI;AA8BP,SAAG,CACD;AACED,QAAAA,KAAK,EAAE,MADT;AAEEC,QAAAA,KAAK,EAAE;AAFT,OADC,EAKD;AACED,QAAAA,KAAK,EAAE,WADT;AAEEC,QAAAA,KAAK,EAAE;AAFT,OALC,EASD;AACED,QAAAA,KAAK,EAAE,QADT;AAEEC,QAAAA,KAAK,EAAE;AAFT,OATC;AA9BI,KAPJ;AAoDLE,IAAAA,yBAAyB,EAAE,IApDtB;AAqDLC,IAAAA,gBAAgB,EAAE,IArDb;AAsDLC,IAAAA,aAAa,EAAE,IAtDV;AAuDLC,IAAAA,0BAA0B,EAAE,IAvDvB;AAwDLC,IAAAA,0BAA0B,EAAE;AAxDvB,GADM;AA2DbC,EAAAA,aAAa,EAAE;AACbb,IAAAA,MAAM,EAAE;AACNc,MAAAA,QAAQ,EAAE,IADJ;AAENT,MAAAA,KAAK,EAAE;AAFD,KADK;AAKbU,IAAAA,cAAc,EAAE;AACdD,MAAAA,QAAQ,EAAE,KADI;AAEdT,MAAAA,KAAK,EAAE;AAFO,KALH;AASbW,IAAAA,SAAS,EAAE;AACTF,MAAAA,QAAQ,EAAE,IADD;AAETT,MAAAA,KAAK,EAAE;AAFE,KATE;AAabY,IAAAA,mBAAmB,EAAE;AACnBH,MAAAA,QAAQ,EAAE,IADS;AAEnBT,MAAAA,KAAK,EAAE;AAFY,KAbR;AAiBba,IAAAA,kBAAkB,EAAE;AAClBJ,MAAAA,QAAQ,EAAE,IADQ;AAElBT,MAAAA,KAAK,EAAE;AAFW;AAjBP;AA3DF,C","sourcesContent":["export default {\n model: {\n disabled: false,\n mode: 'gather',\n prompt: 'Use the inputs to complete the sentence',\n shuffle: true,\n markup: '<p>The {{0}} jumped {{1}} the {{2}}</p>',\n toolbarEditorPosition: 'bottom',\n choices: {\n 0: [\n {\n label: 'cow',\n value: '0'\n },\n {\n label: 'cattle',\n value: '1'\n },\n {\n label: 'calf',\n value: '2',\n correct: false\n }\n ],\n 1: [\n {\n label: 'over',\n value: '0'\n },\n {\n label: 'past',\n value: '1'\n },\n {\n label: 'beyond',\n value: '2'\n }\n ],\n 2: [\n {\n label: 'moon',\n value: '0'\n },\n {\n label: 'satellite',\n value: '2'\n },\n {\n label: 'house ',\n value: '3'\n }\n ]\n },\n maxLengthPerChoiceEnabled: true,\n rationaleEnabled: true,\n promptEnabled: true,\n teacherInstructionsEnabled: true,\n studentInstructionsEnabled: true\n },\n configuration: {\n prompt: {\n settings: true,\n label: 'Prompt'\n },\n partialScoring: {\n settings: false,\n label: 'Allow Partial Scoring'\n },\n rationale: {\n settings: true,\n label: 'Rationale'\n },\n teacherInstructions: {\n settings: true,\n label: 'Teacher Instructions'\n },\n maxLengthPerChoice: {\n settings: true,\n label: 'Maximum Length Per Choice'\n }\n }\n};\n"],"file":"defaults.js"}
1
+ {"version":3,"sources":["../src/defaults.js"],"names":["model","disabled","mode","prompt","shuffle","markup","toolbarEditorPosition","displayType","choices","label","value","correct","maxLengthPerChoiceEnabled","rationaleEnabled","promptEnabled","teacherInstructionsEnabled","studentInstructionsEnabled","configuration","settings","partialScoring","rationale","teacherInstructions","maxLengthPerChoice"],"mappings":";;;;;;eAAe;AACbA,EAAAA,KAAK,EAAE;AACLC,IAAAA,QAAQ,EAAE,KADL;AAELC,IAAAA,IAAI,EAAE,QAFD;AAGLC,IAAAA,MAAM,EAAE,yCAHH;AAILC,IAAAA,OAAO,EAAE,IAJJ;AAKLC,IAAAA,MAAM,EAAE,yCALH;AAMLC,IAAAA,qBAAqB,EAAE,QANlB;AAOLC,IAAAA,WAAW,EAAE,OAPR;AAQLC,IAAAA,OAAO,EAAE;AACP,SAAG,CACD;AACEC,QAAAA,KAAK,EAAE,KADT;AAEEC,QAAAA,KAAK,EAAE;AAFT,OADC,EAKD;AACED,QAAAA,KAAK,EAAE,QADT;AAEEC,QAAAA,KAAK,EAAE;AAFT,OALC,EASD;AACED,QAAAA,KAAK,EAAE,MADT;AAEEC,QAAAA,KAAK,EAAE,GAFT;AAGEC,QAAAA,OAAO,EAAE;AAHX,OATC,CADI;AAgBP,SAAG,CACD;AACEF,QAAAA,KAAK,EAAE,MADT;AAEEC,QAAAA,KAAK,EAAE;AAFT,OADC,EAKD;AACED,QAAAA,KAAK,EAAE,MADT;AAEEC,QAAAA,KAAK,EAAE;AAFT,OALC,EASD;AACED,QAAAA,KAAK,EAAE,QADT;AAEEC,QAAAA,KAAK,EAAE;AAFT,OATC,CAhBI;AA8BP,SAAG,CACD;AACED,QAAAA,KAAK,EAAE,MADT;AAEEC,QAAAA,KAAK,EAAE;AAFT,OADC,EAKD;AACED,QAAAA,KAAK,EAAE,WADT;AAEEC,QAAAA,KAAK,EAAE;AAFT,OALC,EASD;AACED,QAAAA,KAAK,EAAE,QADT;AAEEC,QAAAA,KAAK,EAAE;AAFT,OATC;AA9BI,KARJ;AAqDLE,IAAAA,yBAAyB,EAAE,IArDtB;AAsDLC,IAAAA,gBAAgB,EAAE,IAtDb;AAuDLC,IAAAA,aAAa,EAAE,IAvDV;AAwDLC,IAAAA,0BAA0B,EAAE,IAxDvB;AAyDLC,IAAAA,0BAA0B,EAAE;AAzDvB,GADM;AA4DbC,EAAAA,aAAa,EAAE;AACbd,IAAAA,MAAM,EAAE;AACNe,MAAAA,QAAQ,EAAE,IADJ;AAENT,MAAAA,KAAK,EAAE;AAFD,KADK;AAKbU,IAAAA,cAAc,EAAE;AACdD,MAAAA,QAAQ,EAAE,KADI;AAEdT,MAAAA,KAAK,EAAE;AAFO,KALH;AASbW,IAAAA,SAAS,EAAE;AACTF,MAAAA,QAAQ,EAAE,IADD;AAETT,MAAAA,KAAK,EAAE;AAFE,KATE;AAabY,IAAAA,mBAAmB,EAAE;AACnBH,MAAAA,QAAQ,EAAE,IADS;AAEnBT,MAAAA,KAAK,EAAE;AAFY,KAbR;AAiBba,IAAAA,kBAAkB,EAAE;AAClBJ,MAAAA,QAAQ,EAAE,IADQ;AAElBT,MAAAA,KAAK,EAAE;AAFW;AAjBP;AA5DF,C","sourcesContent":["export default {\n model: {\n disabled: false,\n mode: 'gather',\n prompt: 'Use the inputs to complete the sentence',\n shuffle: true,\n markup: '<p>The {{0}} jumped {{1}} the {{2}}</p>',\n toolbarEditorPosition: 'bottom',\n displayType: 'block',\n choices: {\n 0: [\n {\n label: 'cow',\n value: '0'\n },\n {\n label: 'cattle',\n value: '1'\n },\n {\n label: 'calf',\n value: '2',\n correct: false\n }\n ],\n 1: [\n {\n label: 'over',\n value: '0'\n },\n {\n label: 'past',\n value: '1'\n },\n {\n label: 'beyond',\n value: '2'\n }\n ],\n 2: [\n {\n label: 'moon',\n value: '0'\n },\n {\n label: 'satellite',\n value: '2'\n },\n {\n label: 'house ',\n value: '3'\n }\n ]\n },\n maxLengthPerChoiceEnabled: true,\n rationaleEnabled: true,\n promptEnabled: true,\n teacherInstructionsEnabled: true,\n studentInstructionsEnabled: true\n },\n configuration: {\n prompt: {\n settings: true,\n label: 'Prompt'\n },\n partialScoring: {\n settings: false,\n label: 'Allow Partial Scoring'\n },\n rationale: {\n settings: true,\n label: 'Rationale'\n },\n teacherInstructions: {\n settings: true,\n label: 'Teacher Instructions'\n },\n maxLengthPerChoice: {\n settings: true,\n label: 'Maximum Length Per Choice'\n }\n }\n};\n"],"file":"defaults.js"}
@@ -45,6 +45,8 @@ var _ecrToolbar = _interopRequireDefault(require("./ecr-toolbar"));
45
45
 
46
46
  var _alternateResponses = _interopRequireDefault(require("./alternateResponses"));
47
47
 
48
+ var _markupUtils = require("./markupUtils");
49
+
48
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); }
49
51
 
50
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; }
@@ -170,7 +172,7 @@ var Main = /*#__PURE__*/function (_React$Component) {
170
172
  onModelChanged = _this$props3.onModelChanged;
171
173
  var choices = model.choices,
172
174
  maxLengthPerChoice = model.maxLengthPerChoice;
173
- var newValLength = (newVal || '').length;
175
+ var newValLength = (0, _markupUtils.getAdjustedLength)((newVal || '').length);
174
176
 
175
177
  if (!choices[index]) {
176
178
  choices[index] = [{
@@ -183,7 +185,7 @@ var Main = /*#__PURE__*/function (_React$Component) {
183
185
  choices[index][0].label = newVal || '';
184
186
 
185
187
  if (maxLengthPerChoice && newVal && maxLengthPerChoice[index] < newValLength) {
186
- maxLengthPerChoice[index] = newVal.length;
188
+ maxLengthPerChoice[index] = newValLength;
187
189
  }
188
190
 
189
191
  onModelChanged(_objectSpread(_objectSpread({}, model), {}, {
@@ -200,20 +202,17 @@ var Main = /*#__PURE__*/function (_React$Component) {
200
202
  var allChoices = {};
201
203
  var updatedMaxLengthPerChoice = [];
202
204
  allRespAreas.forEach(function (el, index) {
203
- allChoices[index] = (0, _cloneDeep["default"])(Object.values(choices)[el.dataset.index]) || [{
204
- label: el.dataset.value || '',
205
- value: '0'
206
- }];
205
+ var newChoices = (0, _cloneDeep["default"])(choices[el.dataset.index]);
207
206
 
208
- if (maxLengthPerChoice[el.dataset.index]) {
207
+ if (newChoices) {
208
+ newChoices[0] = {
209
+ label: el.dataset.value || '',
210
+ value: '0'
211
+ };
209
212
  updatedMaxLengthPerChoice[index] = maxLengthPerChoice[el.dataset.index];
210
- } else {
211
- var labelLengthsArr = allChoices[index].map(function (choice) {
212
- return (choice.label || '').length;
213
- });
214
- updatedMaxLengthPerChoice[index] = Math.max.apply(Math, (0, _toConsumableArray2["default"])(labelLengthsArr));
215
213
  }
216
214
 
215
+ allChoices[index] = newChoices;
217
216
  el.dataset.index = index;
218
217
  });
219
218
 
@@ -236,15 +235,20 @@ var Main = /*#__PURE__*/function (_React$Component) {
236
235
  _this$props4$model$ma = _this$props4$model.maxLengthPerChoice,
237
236
  maxLengthPerChoice = _this$props4$model$ma === void 0 ? [] : _this$props4$model$ma,
238
237
  onModelChanged = _this$props4.onModelChanged;
238
+ var undefinedLengths = !maxLengthPerChoice.length;
239
239
  this.setState({
240
240
  markup: slateMarkup
241
- }); //calculate maxLengthPerChoice array if it is not defined or defined incorrectly
241
+ }); // calculate maxLengthPerChoice array if it is not defined or defined incorrectly
242
242
 
243
243
  Object.values(choices).forEach(function (choice, index) {
244
244
  var labelLengthsArr = (choice || []).map(function (choice) {
245
245
  return (choice.label || '').length;
246
246
  });
247
- maxLengthPerChoice[index] = Math.max.apply(Math, (0, _toConsumableArray2["default"])(labelLengthsArr).concat([maxLengthPerChoice && maxLengthPerChoice[index] || 1]));
247
+ var length = (0, _markupUtils.getAdjustedLength)(Math.max.apply(Math, (0, _toConsumableArray2["default"])(labelLengthsArr)));
248
+
249
+ if (undefinedLengths || !maxLengthPerChoice[index] || maxLengthPerChoice[index] < length) {
250
+ maxLengthPerChoice[index] = length;
251
+ }
248
252
  });
249
253
  onModelChanged(_objectSpread(_objectSpread({}, this.props.model), {}, {
250
254
  maxLengthPerChoice: maxLengthPerChoice
@@ -277,7 +281,8 @@ var Main = /*#__PURE__*/function (_React$Component) {
277
281
  var _ref2 = model || {},
278
282
  teacherInstructionsEnabled = _ref2.teacherInstructionsEnabled,
279
283
  promptEnabled = _ref2.promptEnabled,
280
- rationaleEnabled = _ref2.rationaleEnabled;
284
+ rationaleEnabled = _ref2.rationaleEnabled,
285
+ maxLengthPerChoiceEnabled = _ref2.maxLengthPerChoiceEnabled;
281
286
 
282
287
  var toolbarOpts = {};
283
288
 
@@ -373,10 +378,11 @@ var Main = /*#__PURE__*/function (_React$Component) {
373
378
  highlightShape: false
374
379
  }), !(0, _isEmpty["default"])(model.choices) && /*#__PURE__*/_react["default"].createElement(_Typography["default"], {
375
380
  className: classes.text
376
- }, "Define Alternates"), /*#__PURE__*/_react["default"].createElement(_alternateResponses["default"], {
381
+ }, "Define Alternates ".concat(maxLengthPerChoiceEnabled ? 'and Character Limits' : '')), /*#__PURE__*/_react["default"].createElement(_alternateResponses["default"], {
377
382
  model: model,
378
383
  onChange: this.onResponsesChanged,
379
- onLengthChange: this.onLengthChanged
384
+ onLengthChange: this.onLengthChanged,
385
+ maxLengthPerChoiceEnabled: maxLengthPerChoiceEnabled
380
386
  }), rationaleEnabled && /*#__PURE__*/_react["default"].createElement(_configUi.InputContainer, {
381
387
  label: rationale.label,
382
388
  className: classes.promptHolder
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/main.jsx"],"names":["toggle","settings","Panel","styles","theme","promptHolder","width","paddingBottom","spacing","unit","marginBottom","prompt","paddingTop","markup","minHeight","design","choiceConfiguration","switchElement","justifyContent","margin","addButton","text","color","fontFamily","fontSize","lineHeight","marginTop","createElementFromHTML","htmlString","div","document","createElement","innerHTML","trim","Main","newVal","props","onModelChanged","model","rationale","teacherInstructions","slateMarkup","choices","maxLengthPerChoice","index","newValLength","length","label","value","splice","domMarkup","allRespAreas","querySelectorAll","allChoices","updatedMaxLengthPerChoice","forEach","el","Object","values","dataset","labelLengthsArr","map","choice","Math","max","setState","classes","configuration","onConfigurationChanged","imageSupport","partialScoring","teacherInstructionsEnabled","promptEnabled","rationaleEnabled","toolbarOpts","toolbarEditorPosition","position","onModelChange","Settings","maxLengthPerChoiceEnabled","Properties","onTeacherInstructionsChanged","onPromptChanged","ALL_PLUGINS","type","options","duplicates","respAreaToolbar","node","onToolbarDone","correctChoice","data","get","onChangeResponse","onChange","onBlur","onResponsesChanged","onLengthChanged","onRationaleChanged","React","Component","PropTypes","object","isRequired","disableSidePanel","bool","func","shape","add","Styled"],"mappings":"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","sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\nimport cloneDeep from 'lodash/cloneDeep';\nimport isEmpty from 'lodash/isEmpty';\nimport EditableHtml, {ALL_PLUGINS} from '@pie-lib/editable-html';\nimport {InputContainer, layout, settings} from '@pie-lib/config-ui';\nimport {withStyles} from '@material-ui/core/styles';\nimport Typography from '@material-ui/core/Typography';\nimport ECRToolbar from './ecr-toolbar';\nimport AlternateResponses from './alternateResponses';\n\nconst { toggle, Panel } = settings;\n\nconst styles = theme => ({\n promptHolder: {\n width: '100%',\n paddingBottom: theme.spacing.unit * 2,\n marginBottom: theme.spacing.unit * 2\n },\n prompt: {\n paddingTop: theme.spacing.unit * 2,\n width: '100%'\n },\n markup: {\n minHeight: '100px',\n paddingTop: theme.spacing.unit * 2,\n width: '100%',\n '& [data-slate-editor=\"true\"]': {\n minHeight: '100px'\n }\n },\n design: {\n paddingTop: theme.spacing.unit * 3\n },\n choiceConfiguration: {\n paddingTop: theme.spacing.unit * 2,\n paddingBottom: theme.spacing.unit * 2\n },\n switchElement: {\n justifyContent: 'space-between',\n margin: 0\n },\n addButton: {\n float: 'right'\n },\n text: {\n color: '#495B8F',\n fontFamily: 'Cerebri Sans',\n fontSize: '16px',\n lineHeight: '19px',\n marginTop: theme.spacing.unit * 4\n }\n});\n\nconst createElementFromHTML = htmlString => {\n const div = document.createElement('div');\n\n div.innerHTML = htmlString.trim();\n\n return div;\n};\n\nexport class Main extends React.Component {\n static propTypes = {\n configuration: PropTypes.object.isRequired,\n model: PropTypes.object.isRequired,\n disableSidePanel: PropTypes.bool,\n onModelChanged: PropTypes.func.isRequired,\n onConfigurationChanged: PropTypes.func.isRequired,\n classes: PropTypes.object.isRequired,\n imageSupport: PropTypes.shape({\n add: PropTypes.func.isRequired,\n delete: PropTypes.func.isRequired\n })\n };\n\n state = {};\n\n componentDidMount() {\n const {\n model: { slateMarkup, choices, maxLengthPerChoice = [] }, onModelChanged\n } = this.props;\n\n this.setState({\n markup: slateMarkup\n });\n\n //calculate maxLengthPerChoice array if it is not defined or defined incorrectly\n Object.values(choices).forEach((choice, index) => {\n const labelLengthsArr = (choice || []).map(choice => (choice.label || '').length);\n\n maxLengthPerChoice[index] = Math.max(...labelLengthsArr, maxLengthPerChoice && maxLengthPerChoice[index] || 1);\n });\n\n onModelChanged({\n ...this.props.model,\n maxLengthPerChoice\n });\n }\n\n onModelChange = newVal => {\n this.props.onModelChanged({\n ...this.props.model,\n ...newVal\n });\n };\n\n onPromptChanged = prompt => {\n this.props.onModelChanged({\n ...this.props.model,\n prompt\n });\n };\n\n onRationaleChanged = rationale => {\n this.props.onModelChanged({\n ...this.props.model,\n rationale\n });\n };\n\n onTeacherInstructionsChanged = teacherInstructions => {\n const { model, onModelChanged } = this.props;\n\n onModelChanged({\n ...model,\n teacherInstructions\n });\n };\n\n onMarkupChanged = slateMarkup => {\n this.props.onModelChanged({\n ...this.props.model,\n slateMarkup\n });\n };\n\n onResponsesChanged = choices => {\n this.props.onModelChanged({\n ...this.props.model,\n choices\n });\n };\n\n onLengthChanged = maxLengthPerChoice => {\n const { model, onModelChanged } = this.props;\n\n onModelChanged({\n ...model,\n maxLengthPerChoice\n });\n };\n\n onChangeResponse = (index, newVal) => {\n const { model, onModelChanged} = this.props;\n const { choices, maxLengthPerChoice } = model;\n const newValLength = (newVal || '').length;\n\n if (!choices[index]) {\n choices[index] = [{ label: '', value: '0' }];\n maxLengthPerChoice.splice(index, 0, newValLength);\n }\n\n choices[index][0].label = newVal || '';\n\n if (maxLengthPerChoice && newVal && maxLengthPerChoice[index] < newValLength) {\n maxLengthPerChoice[index] = newVal.length;\n }\n\n onModelChanged({\n ...model,\n choices,\n maxLengthPerChoice\n });\n };\n\n onChange = markup => {\n const {\n model: { choices, maxLengthPerChoice }\n } = this.props;\n const domMarkup = createElementFromHTML(markup);\n const allRespAreas = domMarkup.querySelectorAll(\n '[data-type=\"explicit_constructed_response\"]'\n );\n\n const allChoices = {};\n const updatedMaxLengthPerChoice = [];\n\n allRespAreas.forEach((el, index) => {\n allChoices[index] = cloneDeep(Object.values(choices)[el.dataset.index]) || [{label: el.dataset.value || '', value: '0'}];\n if (maxLengthPerChoice[el.dataset.index]) {\n updatedMaxLengthPerChoice[index] = maxLengthPerChoice[el.dataset.index];\n } else {\n const labelLengthsArr = allChoices[index].map(choice => (choice.label || '').length);\n updatedMaxLengthPerChoice[index] = Math.max(...labelLengthsArr);\n }\n\n el.dataset.index = index;\n });\n\n this.props.onModelChanged({\n ...this.props.model,\n choices: allChoices,\n slateMarkup: domMarkup.innerHTML,\n maxLengthPerChoice: updatedMaxLengthPerChoice\n });\n };\n\n render() {\n const {\n classes,\n model,\n configuration,\n onConfigurationChanged,\n imageSupport\n } = this.props;\n const {\n prompt = {},\n partialScoring = {},\n rationale = {},\n teacherInstructions = {},\n maxLengthPerChoice = {}\n } = configuration || {};\n const { teacherInstructionsEnabled, promptEnabled, rationaleEnabled } = model || {};\n const toolbarOpts = {};\n\n switch (model.toolbarEditorPosition) {\n case 'top':\n toolbarOpts.position = 'top';\n break;\n default:\n toolbarOpts.position = 'bottom';\n break;\n }\n return (\n <div className={classes.design}>\n <layout.ConfigLayout\n settings={\n <Panel\n model={model}\n configuration={configuration}\n onChangeModel={model => this.onModelChange(model)}\n onChangeConfiguration={configuration =>\n onConfigurationChanged(configuration, true)\n }\n groups={{\n Settings: {\n partialScoring:\n partialScoring.settings && toggle(partialScoring.label),\n maxLengthPerChoiceEnabled:\n maxLengthPerChoice.settings && toggle(maxLengthPerChoice.label),\n },\n Properties: {\n teacherInstructionsEnabled:\n teacherInstructions.settings &&\n toggle(teacherInstructions.label),\n rationaleEnabled:\n rationale.settings && toggle(rationale.label),\n promptEnabled: prompt.settings && toggle(prompt.label)\n }\n }}\n />\n }\n >\n <div>\n {teacherInstructionsEnabled && (\n <InputContainer\n label={teacherInstructions.label}\n className={classes.promptHolder}\n >\n <EditableHtml\n className={classes.prompt}\n markup={model.teacherInstructions || ''}\n onChange={this.onTeacherInstructionsChanged}\n imageSupport={imageSupport}\n nonEmpty={false}\n toolbarOpts={toolbarOpts}\n />\n </InputContainer>\n )}\n {promptEnabled && (\n <InputContainer\n label={prompt.label}\n className={classes.promptHolder}\n >\n <EditableHtml\n className={classes.prompt}\n markup={model.prompt}\n onChange={this.onPromptChanged}\n imageSupport={imageSupport}\n nonEmpty={false}\n disableUnderline\n toolbarOpts={toolbarOpts}\n />\n </InputContainer>\n )}\n <Typography className={classes.text}>\n Define Template, Choices, and Correct Responses\n </Typography>\n <EditableHtml\n activePlugins={ALL_PLUGINS}\n toolbarOpts={{ position: 'top' }}\n responseAreaProps={{\n type: 'explicit-constructed-response',\n options: {\n duplicates: true\n },\n respAreaToolbar: (node, value, onToolbarDone) => {\n const { model } = this.props;\n const correctChoice = (model.choices[\n node.data.get('index')\n ] || [])[0];\n\n return () => (\n <ECRToolbar\n onChangeResponse={newVal =>\n this.onChangeResponse(node.data.get('index'), newVal)\n }\n node={node}\n value={value}\n onToolbarDone={onToolbarDone}\n correctChoice={correctChoice}\n />\n );\n }\n }}\n className={classes.markup}\n markup={model.slateMarkup}\n onChange={this.onChange}\n imageSupport={imageSupport}\n onBlur={this.onBlur}\n disabled={false}\n highlightShape={false}\n />\n {!isEmpty(model.choices) && (\n <Typography className={classes.text}>\n Define Alternates\n </Typography>\n )}\n <AlternateResponses\n model={model}\n onChange={this.onResponsesChanged}\n onLengthChange={this.onLengthChanged}\n />\n {rationaleEnabled && (\n <InputContainer\n label={rationale.label}\n className={classes.promptHolder}\n >\n <EditableHtml\n className={classes.prompt}\n markup={model.rationale || ''}\n onChange={this.onRationaleChanged}\n imageSupport={imageSupport}\n toolbarOpts={toolbarOpts}\n />\n </InputContainer>\n )}\n </div>\n </layout.ConfigLayout>\n </div>\n );\n }\n}\n\nconst Styled = withStyles(styles)(Main);\n\nexport default Styled;\n"],"file":"main.js"}
1
+ {"version":3,"sources":["../src/main.jsx"],"names":["toggle","settings","Panel","styles","theme","promptHolder","width","paddingBottom","spacing","unit","marginBottom","prompt","paddingTop","markup","minHeight","design","choiceConfiguration","switchElement","justifyContent","margin","addButton","text","color","fontFamily","fontSize","lineHeight","marginTop","createElementFromHTML","htmlString","div","document","createElement","innerHTML","trim","Main","newVal","props","onModelChanged","model","rationale","teacherInstructions","slateMarkup","choices","maxLengthPerChoice","index","newValLength","length","label","value","splice","domMarkup","allRespAreas","querySelectorAll","allChoices","updatedMaxLengthPerChoice","forEach","el","newChoices","dataset","undefinedLengths","setState","Object","values","choice","labelLengthsArr","map","Math","max","classes","configuration","onConfigurationChanged","imageSupport","partialScoring","teacherInstructionsEnabled","promptEnabled","rationaleEnabled","maxLengthPerChoiceEnabled","toolbarOpts","toolbarEditorPosition","position","onModelChange","Settings","Properties","onTeacherInstructionsChanged","onPromptChanged","ALL_PLUGINS","type","options","duplicates","respAreaToolbar","node","onToolbarDone","correctChoice","data","get","onChangeResponse","onChange","onBlur","onResponsesChanged","onLengthChanged","onRationaleChanged","React","Component","PropTypes","object","isRequired","disableSidePanel","bool","func","shape","add","Styled"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;;;;;;;;;;;;;AAEA,IAAQA,MAAR,GAA0BC,kBAA1B,CAAQD,MAAR;AAAA,IAAgBE,KAAhB,GAA0BD,kBAA1B,CAAgBC,KAAhB;;AAEA,IAAMC,MAAM,GAAG,SAATA,MAAS,CAAAC,KAAK;AAAA,SAAK;AACvBC,IAAAA,YAAY,EAAE;AACZC,MAAAA,KAAK,EAAE,MADK;AAEZC,MAAAA,aAAa,EAAEH,KAAK,CAACI,OAAN,CAAcC,IAAd,GAAqB,CAFxB;AAGZC,MAAAA,YAAY,EAAEN,KAAK,CAACI,OAAN,CAAcC,IAAd,GAAqB;AAHvB,KADS;AAMvBE,IAAAA,MAAM,EAAE;AACNC,MAAAA,UAAU,EAAER,KAAK,CAACI,OAAN,CAAcC,IAAd,GAAqB,CAD3B;AAENH,MAAAA,KAAK,EAAE;AAFD,KANe;AAUvBO,IAAAA,MAAM,EAAE;AACNC,MAAAA,SAAS,EAAE,OADL;AAENF,MAAAA,UAAU,EAAER,KAAK,CAACI,OAAN,CAAcC,IAAd,GAAqB,CAF3B;AAGNH,MAAAA,KAAK,EAAE,MAHD;AAIN,sCAAgC;AAC9BQ,QAAAA,SAAS,EAAE;AADmB;AAJ1B,KAVe;AAkBvBC,IAAAA,MAAM,EAAE;AACNH,MAAAA,UAAU,EAAER,KAAK,CAACI,OAAN,CAAcC,IAAd,GAAqB;AAD3B,KAlBe;AAqBvBO,IAAAA,mBAAmB,EAAE;AACnBJ,MAAAA,UAAU,EAAER,KAAK,CAACI,OAAN,CAAcC,IAAd,GAAqB,CADd;AAEnBF,MAAAA,aAAa,EAAEH,KAAK,CAACI,OAAN,CAAcC,IAAd,GAAqB;AAFjB,KArBE;AAyBvBQ,IAAAA,aAAa,EAAE;AACbC,MAAAA,cAAc,EAAE,eADH;AAEbC,MAAAA,MAAM,EAAE;AAFK,KAzBQ;AA6BvBC,IAAAA,SAAS,EAAE;AACT,eAAO;AADE,KA7BY;AAgCvBC,IAAAA,IAAI,EAAE;AACJC,MAAAA,KAAK,EAAE,SADH;AAEJC,MAAAA,UAAU,EAAE,cAFR;AAGJC,MAAAA,QAAQ,EAAE,MAHN;AAIJC,MAAAA,UAAU,EAAE,MAJR;AAKJC,MAAAA,SAAS,EAAEtB,KAAK,CAACI,OAAN,CAAcC,IAAd,GAAqB;AAL5B;AAhCiB,GAAL;AAAA,CAApB;;AAyCA,IAAMkB,qBAAqB,GAAG,SAAxBA,qBAAwB,CAAAC,UAAU,EAAI;AAC1C,MAAMC,GAAG,GAAGC,QAAQ,CAACC,aAAT,CAAuB,KAAvB,CAAZ;AAEAF,EAAAA,GAAG,CAACG,SAAJ,GAAgBJ,UAAU,CAACK,IAAX,EAAhB;AAEA,SAAOJ,GAAP;AACD,CAND;;IAQaK,I;;;;;;;;;;;;;;;8FAcH,E;sGA2BQ,UAAAC,MAAM,EAAI;AACxB,YAAKC,KAAL,CAAWC,cAAX,iCACK,MAAKD,KAAL,CAAWE,KADhB,GAEKH,MAFL;AAID,K;wGAEiB,UAAAxB,MAAM,EAAI;AAC1B,YAAKyB,KAAL,CAAWC,cAAX,iCACK,MAAKD,KAAL,CAAWE,KADhB;AAEE3B,QAAAA,MAAM,EAANA;AAFF;AAID,K;2GAEoB,UAAA4B,SAAS,EAAI;AAChC,YAAKH,KAAL,CAAWC,cAAX,iCACK,MAAKD,KAAL,CAAWE,KADhB;AAEEC,QAAAA,SAAS,EAATA;AAFF;AAID,K;qHAE8B,UAAAC,mBAAmB,EAAI;AACpD,wBAAkC,MAAKJ,KAAvC;AAAA,UAAQE,KAAR,eAAQA,KAAR;AAAA,UAAeD,cAAf,eAAeA,cAAf;AAEAA,MAAAA,cAAc,iCACTC,KADS;AAEZE,QAAAA,mBAAmB,EAAnBA;AAFY,SAAd;AAID,K;wGAEiB,UAAAC,WAAW,EAAI;AAC/B,YAAKL,KAAL,CAAWC,cAAX,iCACK,MAAKD,KAAL,CAAWE,KADhB;AAEEG,QAAAA,WAAW,EAAXA;AAFF;AAID,K;2GAEoB,UAAAC,OAAO,EAAI;AAC9B,YAAKN,KAAL,CAAWC,cAAX,iCACK,MAAKD,KAAL,CAAWE,KADhB;AAEEI,QAAAA,OAAO,EAAPA;AAFF;AAID,K;wGAEiB,UAAAC,kBAAkB,EAAI;AACtC,yBAAkC,MAAKP,KAAvC;AAAA,UAAQE,KAAR,gBAAQA,KAAR;AAAA,UAAeD,cAAf,gBAAeA,cAAf;AAEAA,MAAAA,cAAc,iCACTC,KADS;AAEZK,QAAAA,kBAAkB,EAAlBA;AAFY,SAAd;AAID,K;yGAEkB,UAACC,KAAD,EAAQT,MAAR,EAAmB;AACpC,yBAAiC,MAAKC,KAAtC;AAAA,UAAQE,KAAR,gBAAQA,KAAR;AAAA,UAAeD,cAAf,gBAAeA,cAAf;AACA,UAAQK,OAAR,GAAwCJ,KAAxC,CAAQI,OAAR;AAAA,UAAiBC,kBAAjB,GAAwCL,KAAxC,CAAiBK,kBAAjB;AACA,UAAME,YAAY,GAAG,oCAAkB,CAACV,MAAM,IAAI,EAAX,EAAeW,MAAjC,CAArB;;AAEA,UAAI,CAACJ,OAAO,CAACE,KAAD,CAAZ,EAAqB;AACnBF,QAAAA,OAAO,CAACE,KAAD,CAAP,GAAiB,CAAC;AAAEG,UAAAA,KAAK,EAAE,EAAT;AAAaC,UAAAA,KAAK,EAAE;AAApB,SAAD,CAAjB;AACAL,QAAAA,kBAAkB,CAACM,MAAnB,CAA0BL,KAA1B,EAAiC,CAAjC,EAAoCC,YAApC;AACD;;AAEDH,MAAAA,OAAO,CAACE,KAAD,CAAP,CAAe,CAAf,EAAkBG,KAAlB,GAA0BZ,MAAM,IAAI,EAApC;;AAEA,UAAIQ,kBAAkB,IAAIR,MAAtB,IAAgCQ,kBAAkB,CAACC,KAAD,CAAlB,GAA4BC,YAAhE,EAA8E;AAC5EF,QAAAA,kBAAkB,CAACC,KAAD,CAAlB,GAA4BC,YAA5B;AACD;;AAEDR,MAAAA,cAAc,iCACTC,KADS;AAEZI,QAAAA,OAAO,EAAPA,OAFY;AAGZC,QAAAA,kBAAkB,EAAlBA;AAHY,SAAd;AAKD,K;iGAEU,UAAA9B,MAAM,EAAI;AACnB,8BAEI,MAAKuB,KAFT,CACEE,KADF;AAAA,UACWI,OADX,qBACWA,OADX;AAAA,UACoBC,kBADpB,qBACoBA,kBADpB;AAGA,UAAMO,SAAS,GAAGvB,qBAAqB,CAACd,MAAD,CAAvC;AACA,UAAMsC,YAAY,GAAGD,SAAS,CAACE,gBAAV,CACnB,6CADmB,CAArB;AAIA,UAAMC,UAAU,GAAG,EAAnB;AACA,UAAMC,yBAAyB,GAAG,EAAlC;AAEAH,MAAAA,YAAY,CAACI,OAAb,CAAqB,UAACC,EAAD,EAAKZ,KAAL,EAAe;AAClC,YAAMa,UAAU,GAAG,2BAAUf,OAAO,CAACc,EAAE,CAACE,OAAH,CAAWd,KAAZ,CAAjB,CAAnB;;AAEA,YAAIa,UAAJ,EAAgB;AACdA,UAAAA,UAAU,CAAC,CAAD,CAAV,GAAgB;AACdV,YAAAA,KAAK,EAAES,EAAE,CAACE,OAAH,CAAWV,KAAX,IAAoB,EADb;AAEdA,YAAAA,KAAK,EAAE;AAFO,WAAhB;AAKAM,UAAAA,yBAAyB,CAACV,KAAD,CAAzB,GAAmCD,kBAAkB,CAACa,EAAE,CAACE,OAAH,CAAWd,KAAZ,CAArD;AACD;;AAEDS,QAAAA,UAAU,CAACT,KAAD,CAAV,GAAoBa,UAApB;AACAD,QAAAA,EAAE,CAACE,OAAH,CAAWd,KAAX,GAAmBA,KAAnB;AACD,OAdD;;AAgBA,YAAKR,KAAL,CAAWC,cAAX,iCACK,MAAKD,KAAL,CAAWE,KADhB;AAEEI,QAAAA,OAAO,EAAEW,UAFX;AAGEZ,QAAAA,WAAW,EAAES,SAAS,CAAClB,SAHzB;AAIEW,QAAAA,kBAAkB,EAAEW;AAJtB;AAMD,K;;;;;;WAvID,6BAAoB;AAClB,yBAGI,KAAKlB,KAHT;AAAA,4CACEE,KADF;AAAA,UACWG,WADX,sBACWA,WADX;AAAA,UACwBC,OADxB,sBACwBA,OADxB;AAAA,qDACiCC,kBADjC;AAAA,UACiCA,kBADjC,sCACsD,EADtD;AAAA,UAEEN,cAFF,gBAEEA,cAFF;AAIA,UAAMsB,gBAAgB,GAAG,CAAChB,kBAAkB,CAACG,MAA7C;AAEA,WAAKc,QAAL,CAAc;AAAE/C,QAAAA,MAAM,EAAE4B;AAAV,OAAd,EAPkB,CASlB;;AACAoB,MAAAA,MAAM,CAACC,MAAP,CAAcpB,OAAd,EAAuBa,OAAvB,CAA+B,UAACQ,MAAD,EAASnB,KAAT,EAAmB;AAChD,YAAMoB,eAAe,GAAG,CAACD,MAAM,IAAI,EAAX,EAAeE,GAAf,CAAmB,UAAAF,MAAM;AAAA,iBAAI,CAACA,MAAM,CAAChB,KAAP,IAAgB,EAAjB,EAAqBD,MAAzB;AAAA,SAAzB,CAAxB;AACA,YAAMA,MAAM,GAAG,oCAAkBoB,IAAI,CAACC,GAAL,OAAAD,IAAI,sCAAQF,eAAR,EAAtB,CAAf;;AAEA,YAAIL,gBAAgB,IAAI,CAAChB,kBAAkB,CAACC,KAAD,CAAvC,IAAkDD,kBAAkB,CAACC,KAAD,CAAlB,GAA4BE,MAAlF,EAA0F;AACxFH,UAAAA,kBAAkB,CAACC,KAAD,CAAlB,GAA4BE,MAA5B;AACD;AACF,OAPD;AASAT,MAAAA,cAAc,iCACT,KAAKD,KAAL,CAAWE,KADF;AAEZK,QAAAA,kBAAkB,EAAlBA;AAFY,SAAd;AAID;;;WAkHD,kBAAS;AAAA;;AACP,yBAMI,KAAKP,KANT;AAAA,UACEgC,OADF,gBACEA,OADF;AAAA,UAEE9B,KAFF,gBAEEA,KAFF;AAAA,UAGE+B,aAHF,gBAGEA,aAHF;AAAA,UAIEC,sBAJF,gBAIEA,sBAJF;AAAA,UAKEC,YALF,gBAKEA,YALF;;AAOA,iBAMIF,aAAa,IAAI,EANrB;AAAA,6BACE1D,MADF;AAAA,UACEA,MADF,4BACW,EADX;AAAA,qCAEE6D,cAFF;AAAA,UAEEA,cAFF,oCAEmB,EAFnB;AAAA,gCAGEjC,SAHF;AAAA,UAGEA,SAHF,+BAGc,EAHd;AAAA,uCAIEC,mBAJF;AAAA,UAIEA,mBAJF,sCAIwB,EAJxB;AAAA,uCAKEG,kBALF;AAAA,UAKEA,kBALF,sCAKuB,EALvB;;AAOA,kBAAmGL,KAAK,IAAI,EAA5G;AAAA,UAAQmC,0BAAR,SAAQA,0BAAR;AAAA,UAAoCC,aAApC,SAAoCA,aAApC;AAAA,UAAmDC,gBAAnD,SAAmDA,gBAAnD;AAAA,UAAqEC,yBAArE,SAAqEA,yBAArE;;AACA,UAAMC,WAAW,GAAG,EAApB;;AAEA,cAAQvC,KAAK,CAACwC,qBAAd;AACE,aAAK,KAAL;AACED,UAAAA,WAAW,CAACE,QAAZ,GAAuB,KAAvB;AACA;;AACF;AACEF,UAAAA,WAAW,CAACE,QAAZ,GAAuB,QAAvB;AACA;AANJ;;AAQA,0BACE;AAAK,QAAA,SAAS,EAAEX,OAAO,CAACrD;AAAxB,sBACE,gCAAC,gBAAD,CAAQ,YAAR;AACE,QAAA,QAAQ,eACN,gCAAC,KAAD;AACE,UAAA,KAAK,EAAEuB,KADT;AAEE,UAAA,aAAa,EAAE+B,aAFjB;AAGE,UAAA,aAAa,EAAE,uBAAA/B,KAAK;AAAA,mBAAI,MAAI,CAAC0C,aAAL,CAAmB1C,KAAnB,CAAJ;AAAA,WAHtB;AAIE,UAAA,qBAAqB,EAAE,+BAAA+B,aAAa;AAAA,mBAClCC,sBAAsB,CAACD,aAAD,EAAgB,IAAhB,CADY;AAAA,WAJtC;AAOE,UAAA,MAAM,EAAE;AACNY,YAAAA,QAAQ,EAAE;AACRT,cAAAA,cAAc,EACZA,cAAc,CAACvE,QAAf,IAA2BD,MAAM,CAACwE,cAAc,CAACzB,KAAhB,CAF3B;AAGR6B,cAAAA,yBAAyB,EACvBjC,kBAAkB,CAAC1C,QAAnB,IAA+BD,MAAM,CAAC2C,kBAAkB,CAACI,KAApB;AAJ/B,aADJ;AAONmC,YAAAA,UAAU,EAAE;AACVT,cAAAA,0BAA0B,EACxBjC,mBAAmB,CAACvC,QAApB,IACAD,MAAM,CAACwC,mBAAmB,CAACO,KAArB,CAHE;AAIV4B,cAAAA,gBAAgB,EACdpC,SAAS,CAACtC,QAAV,IAAsBD,MAAM,CAACuC,SAAS,CAACQ,KAAX,CALpB;AAMV2B,cAAAA,aAAa,EAAE/D,MAAM,CAACV,QAAP,IAAmBD,MAAM,CAACW,MAAM,CAACoC,KAAR;AAN9B;AAPN;AAPV;AAFJ,sBA4BE,6CACG0B,0BAA0B,iBACzB,gCAAC,wBAAD;AACE,QAAA,KAAK,EAAEjC,mBAAmB,CAACO,KAD7B;AAEE,QAAA,SAAS,EAAEqB,OAAO,CAAC/D;AAFrB,sBAIE,gCAAC,wBAAD;AACE,QAAA,SAAS,EAAE+D,OAAO,CAACzD,MADrB;AAEE,QAAA,MAAM,EAAE2B,KAAK,CAACE,mBAAN,IAA6B,EAFvC;AAGE,QAAA,QAAQ,EAAE,KAAK2C,4BAHjB;AAIE,QAAA,YAAY,EAAEZ,YAJhB;AAKE,QAAA,QAAQ,EAAE,KALZ;AAME,QAAA,WAAW,EAAEM;AANf,QAJF,CAFJ,EAgBGH,aAAa,iBACZ,gCAAC,wBAAD;AACE,QAAA,KAAK,EAAE/D,MAAM,CAACoC,KADhB;AAEE,QAAA,SAAS,EAAEqB,OAAO,CAAC/D;AAFrB,sBAIE,gCAAC,wBAAD;AACE,QAAA,SAAS,EAAE+D,OAAO,CAACzD,MADrB;AAEE,QAAA,MAAM,EAAE2B,KAAK,CAAC3B,MAFhB;AAGE,QAAA,QAAQ,EAAE,KAAKyE,eAHjB;AAIE,QAAA,YAAY,EAAEb,YAJhB;AAKE,QAAA,QAAQ,EAAE,KALZ;AAME,QAAA,gBAAgB,MANlB;AAOE,QAAA,WAAW,EAAEM;AAPf,QAJF,CAjBJ,eAgCE,gCAAC,sBAAD;AAAY,QAAA,SAAS,EAAET,OAAO,CAAC/C;AAA/B,2DAhCF,eAmCE,gCAAC,wBAAD;AACE,QAAA,aAAa,EAAEgE,yBADjB;AAEE,QAAA,WAAW,EAAE;AAAEN,UAAAA,QAAQ,EAAE;AAAZ,SAFf;AAGE,QAAA,iBAAiB,EAAE;AACjBO,UAAAA,IAAI,EAAE,+BADW;AAEjBC,UAAAA,OAAO,EAAE;AACPC,YAAAA,UAAU,EAAE;AADL,WAFQ;AAKjBC,UAAAA,eAAe,EAAE,yBAACC,IAAD,EAAO1C,KAAP,EAAc2C,aAAd,EAAgC;AAC/C,gBAAQrD,KAAR,GAAkB,MAAI,CAACF,KAAvB,CAAQE,KAAR;AACA,gBAAMsD,aAAa,GAAG,CAACtD,KAAK,CAACI,OAAN,CACrBgD,IAAI,CAACG,IAAL,CAAUC,GAAV,CAAc,OAAd,CADqB,KAElB,EAFiB,EAEb,CAFa,CAAtB;AAIA,mBAAO;AAAA,kCACL,gCAAC,sBAAD;AACE,gBAAA,gBAAgB,EAAE,0BAAA3D,MAAM;AAAA,yBACtB,MAAI,CAAC4D,gBAAL,CAAsBL,IAAI,CAACG,IAAL,CAAUC,GAAV,CAAc,OAAd,CAAtB,EAA8C3D,MAA9C,CADsB;AAAA,iBAD1B;AAIE,gBAAA,IAAI,EAAEuD,IAJR;AAKE,gBAAA,KAAK,EAAE1C,KALT;AAME,gBAAA,aAAa,EAAE2C,aANjB;AAOE,gBAAA,aAAa,EAAEC;AAPjB,gBADK;AAAA,aAAP;AAWD;AAtBgB,SAHrB;AA2BE,QAAA,SAAS,EAAExB,OAAO,CAACvD,MA3BrB;AA4BE,QAAA,MAAM,EAAEyB,KAAK,CAACG,WA5BhB;AA6BE,QAAA,QAAQ,EAAE,KAAKuD,QA7BjB;AA8BE,QAAA,YAAY,EAAEzB,YA9BhB;AA+BE,QAAA,MAAM,EAAE,KAAK0B,MA/Bf;AAgCE,QAAA,QAAQ,EAAE,KAhCZ;AAiCE,QAAA,cAAc,EAAE;AAjClB,QAnCF,EAsEG,CAAC,yBAAQ3D,KAAK,CAACI,OAAd,CAAD,iBACC,gCAAC,sBAAD;AAAY,QAAA,SAAS,EAAE0B,OAAO,CAAC/C;AAA/B,qCACwBuD,yBAAyB,GAAG,sBAAH,GAA4B,EAD7E,EAvEJ,eA2EE,gCAAC,8BAAD;AACE,QAAA,KAAK,EAAEtC,KADT;AAEE,QAAA,QAAQ,EAAE,KAAK4D,kBAFjB;AAGE,QAAA,cAAc,EAAE,KAAKC,eAHvB;AAIE,QAAA,yBAAyB,EAAEvB;AAJ7B,QA3EF,EAiFGD,gBAAgB,iBACf,gCAAC,wBAAD;AACE,QAAA,KAAK,EAAEpC,SAAS,CAACQ,KADnB;AAEE,QAAA,SAAS,EAAEqB,OAAO,CAAC/D;AAFrB,sBAIE,gCAAC,wBAAD;AACE,QAAA,SAAS,EAAE+D,OAAO,CAACzD,MADrB;AAEE,QAAA,MAAM,EAAE2B,KAAK,CAACC,SAAN,IAAmB,EAF7B;AAGE,QAAA,QAAQ,EAAE,KAAK6D,kBAHjB;AAIE,QAAA,YAAY,EAAE7B,YAJhB;AAKE,QAAA,WAAW,EAAEM;AALf,QAJF,CAlFJ,CA5BF,CADF,CADF;AAiID;;;EApTuBwB,kBAAMC,S;;;iCAAnBpE,I,eACQ;AACjBmC,EAAAA,aAAa,EAAEkC,sBAAUC,MAAV,CAAiBC,UADf;AAEjBnE,EAAAA,KAAK,EAAEiE,sBAAUC,MAAV,CAAiBC,UAFP;AAGjBC,EAAAA,gBAAgB,EAAEH,sBAAUI,IAHX;AAIjBtE,EAAAA,cAAc,EAAEkE,sBAAUK,IAAV,CAAeH,UAJd;AAKjBnC,EAAAA,sBAAsB,EAAEiC,sBAAUK,IAAV,CAAeH,UALtB;AAMjBrC,EAAAA,OAAO,EAAEmC,sBAAUC,MAAV,CAAiBC,UANT;AAOjBlC,EAAAA,YAAY,EAAEgC,sBAAUM,KAAV,CAAgB;AAC5BC,IAAAA,GAAG,EAAEP,sBAAUK,IAAV,CAAeH,UADQ;AAE5B,cAAQF,sBAAUK,IAAV,CAAeH;AAFK,GAAhB;AAPG,C;AAsTrB,IAAMM,MAAM,GAAG,wBAAW5G,MAAX,EAAmB+B,IAAnB,CAAf;eAEe6E,M","sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\nimport cloneDeep from 'lodash/cloneDeep';\nimport isEmpty from 'lodash/isEmpty';\nimport EditableHtml, {ALL_PLUGINS} from '@pie-lib/editable-html';\nimport {InputContainer, layout, settings} from '@pie-lib/config-ui';\nimport {withStyles} from '@material-ui/core/styles';\nimport Typography from '@material-ui/core/Typography';\nimport ECRToolbar from './ecr-toolbar';\nimport AlternateResponses from './alternateResponses';\nimport { getAdjustedLength } from './markupUtils';\n\nconst { toggle, Panel } = settings;\n\nconst styles = theme => ({\n promptHolder: {\n width: '100%',\n paddingBottom: theme.spacing.unit * 2,\n marginBottom: theme.spacing.unit * 2\n },\n prompt: {\n paddingTop: theme.spacing.unit * 2,\n width: '100%'\n },\n markup: {\n minHeight: '100px',\n paddingTop: theme.spacing.unit * 2,\n width: '100%',\n '& [data-slate-editor=\"true\"]': {\n minHeight: '100px'\n }\n },\n design: {\n paddingTop: theme.spacing.unit * 3\n },\n choiceConfiguration: {\n paddingTop: theme.spacing.unit * 2,\n paddingBottom: theme.spacing.unit * 2\n },\n switchElement: {\n justifyContent: 'space-between',\n margin: 0\n },\n addButton: {\n float: 'right'\n },\n text: {\n color: '#495B8F',\n fontFamily: 'Cerebri Sans',\n fontSize: '16px',\n lineHeight: '19px',\n marginTop: theme.spacing.unit * 4\n }\n});\n\nconst createElementFromHTML = htmlString => {\n const div = document.createElement('div');\n\n div.innerHTML = htmlString.trim();\n\n return div;\n};\n\nexport class Main extends React.Component {\n static propTypes = {\n configuration: PropTypes.object.isRequired,\n model: PropTypes.object.isRequired,\n disableSidePanel: PropTypes.bool,\n onModelChanged: PropTypes.func.isRequired,\n onConfigurationChanged: PropTypes.func.isRequired,\n classes: PropTypes.object.isRequired,\n imageSupport: PropTypes.shape({\n add: PropTypes.func.isRequired,\n delete: PropTypes.func.isRequired\n })\n };\n\n state = {};\n\n componentDidMount() {\n const {\n model: { slateMarkup, choices, maxLengthPerChoice = []},\n onModelChanged\n } = this.props;\n const undefinedLengths = !maxLengthPerChoice.length;\n\n this.setState({ markup: slateMarkup });\n\n // calculate maxLengthPerChoice array if it is not defined or defined incorrectly\n Object.values(choices).forEach((choice, index) => {\n const labelLengthsArr = (choice || []).map(choice => (choice.label || '').length);\n const length = getAdjustedLength(Math.max(...labelLengthsArr));\n\n if (undefinedLengths || !maxLengthPerChoice[index] || maxLengthPerChoice[index] < length) {\n maxLengthPerChoice[index] = length;\n }\n });\n\n onModelChanged({\n ...this.props.model,\n maxLengthPerChoice\n });\n }\n\n onModelChange = newVal => {\n this.props.onModelChanged({\n ...this.props.model,\n ...newVal\n });\n };\n\n onPromptChanged = prompt => {\n this.props.onModelChanged({\n ...this.props.model,\n prompt\n });\n };\n\n onRationaleChanged = rationale => {\n this.props.onModelChanged({\n ...this.props.model,\n rationale\n });\n };\n\n onTeacherInstructionsChanged = teacherInstructions => {\n const { model, onModelChanged } = this.props;\n\n onModelChanged({\n ...model,\n teacherInstructions\n });\n };\n\n onMarkupChanged = slateMarkup => {\n this.props.onModelChanged({\n ...this.props.model,\n slateMarkup\n });\n };\n\n onResponsesChanged = choices => {\n this.props.onModelChanged({\n ...this.props.model,\n choices\n });\n };\n\n onLengthChanged = maxLengthPerChoice => {\n const { model, onModelChanged } = this.props;\n\n onModelChanged({\n ...model,\n maxLengthPerChoice\n });\n };\n\n onChangeResponse = (index, newVal) => {\n const { model, onModelChanged} = this.props;\n const { choices, maxLengthPerChoice } = model;\n const newValLength = getAdjustedLength((newVal || '').length);\n\n if (!choices[index]) {\n choices[index] = [{ label: '', value: '0' }];\n maxLengthPerChoice.splice(index, 0, newValLength);\n }\n\n choices[index][0].label = newVal || '';\n\n if (maxLengthPerChoice && newVal && maxLengthPerChoice[index] < newValLength) {\n maxLengthPerChoice[index] = newValLength;\n }\n\n onModelChanged({\n ...model,\n choices,\n maxLengthPerChoice\n });\n };\n\n onChange = markup => {\n const {\n model: { choices, maxLengthPerChoice }\n } = this.props;\n const domMarkup = createElementFromHTML(markup);\n const allRespAreas = domMarkup.querySelectorAll(\n '[data-type=\"explicit_constructed_response\"]'\n );\n\n const allChoices = {};\n const updatedMaxLengthPerChoice = [];\n\n allRespAreas.forEach((el, index) => {\n const newChoices = cloneDeep(choices[el.dataset.index]);\n\n if (newChoices) {\n newChoices[0] = {\n label: el.dataset.value || '',\n value: '0'\n };\n\n updatedMaxLengthPerChoice[index] = maxLengthPerChoice[el.dataset.index];\n }\n\n allChoices[index] = newChoices;\n el.dataset.index = index;\n });\n\n this.props.onModelChanged({\n ...this.props.model,\n choices: allChoices,\n slateMarkup: domMarkup.innerHTML,\n maxLengthPerChoice: updatedMaxLengthPerChoice\n });\n };\n\n render() {\n const {\n classes,\n model,\n configuration,\n onConfigurationChanged,\n imageSupport\n } = this.props;\n const {\n prompt = {},\n partialScoring = {},\n rationale = {},\n teacherInstructions = {},\n maxLengthPerChoice = {}\n } = configuration || {};\n const { teacherInstructionsEnabled, promptEnabled, rationaleEnabled, maxLengthPerChoiceEnabled } = model || {};\n const toolbarOpts = {};\n\n switch (model.toolbarEditorPosition) {\n case 'top':\n toolbarOpts.position = 'top';\n break;\n default:\n toolbarOpts.position = 'bottom';\n break;\n }\n return (\n <div className={classes.design}>\n <layout.ConfigLayout\n settings={\n <Panel\n model={model}\n configuration={configuration}\n onChangeModel={model => this.onModelChange(model)}\n onChangeConfiguration={configuration =>\n onConfigurationChanged(configuration, true)\n }\n groups={{\n Settings: {\n partialScoring:\n partialScoring.settings && toggle(partialScoring.label),\n maxLengthPerChoiceEnabled:\n maxLengthPerChoice.settings && toggle(maxLengthPerChoice.label),\n },\n Properties: {\n teacherInstructionsEnabled:\n teacherInstructions.settings &&\n toggle(teacherInstructions.label),\n rationaleEnabled:\n rationale.settings && toggle(rationale.label),\n promptEnabled: prompt.settings && toggle(prompt.label)\n }\n }}\n />\n }\n >\n <div>\n {teacherInstructionsEnabled && (\n <InputContainer\n label={teacherInstructions.label}\n className={classes.promptHolder}\n >\n <EditableHtml\n className={classes.prompt}\n markup={model.teacherInstructions || ''}\n onChange={this.onTeacherInstructionsChanged}\n imageSupport={imageSupport}\n nonEmpty={false}\n toolbarOpts={toolbarOpts}\n />\n </InputContainer>\n )}\n {promptEnabled && (\n <InputContainer\n label={prompt.label}\n className={classes.promptHolder}\n >\n <EditableHtml\n className={classes.prompt}\n markup={model.prompt}\n onChange={this.onPromptChanged}\n imageSupport={imageSupport}\n nonEmpty={false}\n disableUnderline\n toolbarOpts={toolbarOpts}\n />\n </InputContainer>\n )}\n <Typography className={classes.text}>\n Define Template, Choices, and Correct Responses\n </Typography>\n <EditableHtml\n activePlugins={ALL_PLUGINS}\n toolbarOpts={{ position: 'top' }}\n responseAreaProps={{\n type: 'explicit-constructed-response',\n options: {\n duplicates: true\n },\n respAreaToolbar: (node, value, onToolbarDone) => {\n const { model } = this.props;\n const correctChoice = (model.choices[\n node.data.get('index')\n ] || [])[0];\n\n return () => (\n <ECRToolbar\n onChangeResponse={newVal =>\n this.onChangeResponse(node.data.get('index'), newVal)\n }\n node={node}\n value={value}\n onToolbarDone={onToolbarDone}\n correctChoice={correctChoice}\n />\n );\n }\n }}\n className={classes.markup}\n markup={model.slateMarkup}\n onChange={this.onChange}\n imageSupport={imageSupport}\n onBlur={this.onBlur}\n disabled={false}\n highlightShape={false}\n />\n {!isEmpty(model.choices) && (\n <Typography className={classes.text}>\n {`Define Alternates ${maxLengthPerChoiceEnabled ? 'and Character Limits' : ''}`}\n </Typography>\n )}\n <AlternateResponses\n model={model}\n onChange={this.onResponsesChanged}\n onLengthChange={this.onLengthChanged}\n maxLengthPerChoiceEnabled={maxLengthPerChoiceEnabled}\n />\n {rationaleEnabled && (\n <InputContainer\n label={rationale.label}\n className={classes.promptHolder}\n >\n <EditableHtml\n className={classes.prompt}\n markup={model.rationale || ''}\n onChange={this.onRationaleChanged}\n imageSupport={imageSupport}\n toolbarOpts={toolbarOpts}\n />\n </InputContainer>\n )}\n </div>\n </layout.ConfigLayout>\n </div>\n );\n }\n}\n\nconst Styled = withStyles(styles)(Main);\n\nexport default Styled;\n"],"file":"main.js"}