@pie-element/explicit-constructed-response 3.12.1 → 3.12.4

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.12.4](https://github.com/pie-framework/pie-elements/compare/@pie-element/explicit-constructed-response@3.12.3...@pie-element/explicit-constructed-response@3.12.4) (2022-03-08)
7
+
8
+ **Note:** Version bump only for package @pie-element/explicit-constructed-response
9
+
10
+
11
+
12
+
13
+
14
+ ## [3.12.3](https://github.com/pie-framework/pie-elements/compare/@pie-element/explicit-constructed-response@3.12.2...@pie-element/explicit-constructed-response@3.12.3) (2022-03-08)
15
+
16
+ **Note:** Version bump only for package @pie-element/explicit-constructed-response
17
+
18
+
19
+
20
+
21
+
22
+ ## [3.12.2](https://github.com/pie-framework/pie-elements/compare/@pie-element/explicit-constructed-response@3.12.1...@pie-element/explicit-constructed-response@3.12.2) (2022-02-21)
23
+
24
+ **Note:** Version bump only for package @pie-element/explicit-constructed-response
25
+
26
+
27
+
28
+
29
+
6
30
  ## [3.12.1](https://github.com/pie-framework/pie-elements/compare/@pie-element/explicit-constructed-response@3.12.0...@pie-element/explicit-constructed-response@3.12.1) (2022-02-04)
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.7.4](https://github.com/pie-framework/pie-elements/compare/@pie-element/explicit-constructed-response-configure@3.7.3...@pie-element/explicit-constructed-response-configure@3.7.4) (2022-03-08)
7
+
8
+ **Note:** Version bump only for package @pie-element/explicit-constructed-response-configure
9
+
10
+
11
+
12
+
13
+
14
+ ## [3.7.3](https://github.com/pie-framework/pie-elements/compare/@pie-element/explicit-constructed-response-configure@3.7.2...@pie-element/explicit-constructed-response-configure@3.7.3) (2022-03-08)
15
+
16
+ **Note:** Version bump only for package @pie-element/explicit-constructed-response-configure
17
+
18
+
19
+
20
+
21
+
22
+ ## [3.7.2](https://github.com/pie-framework/pie-elements/compare/@pie-element/explicit-constructed-response-configure@3.7.1...@pie-element/explicit-constructed-response-configure@3.7.2) (2022-02-21)
23
+
24
+ **Note:** Version bump only for package @pie-element/explicit-constructed-response-configure
25
+
26
+
27
+
28
+
29
+
6
30
  ## [3.7.1](https://github.com/pie-framework/pie-elements/compare/@pie-element/explicit-constructed-response-configure@3.7.0...@pie-element/explicit-constructed-response-configure@3.7.1) (2022-02-04)
7
31
 
8
32
  **Note:** Version bump only for package @pie-element/explicit-constructed-response-configure
@@ -47,8 +47,6 @@ 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
-
52
50
  var _max = _interopRequireDefault(require("lodash/max"));
53
51
 
54
52
  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; }
@@ -152,8 +150,7 @@ var Choice = /*#__PURE__*/function (_React$Component) {
152
150
  className: classes.choice,
153
151
  value: value,
154
152
  onChange: this.onChange,
155
- labelWidth: 0,
156
- disableUnderline: true
153
+ labelWidth: 0
157
154
  }), /*#__PURE__*/_react["default"].createElement(_IconButton["default"], {
158
155
  "aria-label": "delete",
159
156
  className: classes.deleteBtn,
@@ -233,12 +230,12 @@ var AlternateSection = /*#__PURE__*/function (_React$Component2) {
233
230
  return (choice.label || '').length;
234
231
  });
235
232
  labelLengthsArr[index] = value.length;
236
- var newLength = (0, _markupUtils.getAdjustedLength)(Math.max.apply(Math, (0, _toConsumableArray2["default"])(labelLengthsArr)));
233
+ var newLength = Math.max.apply(Math, (0, _toConsumableArray2["default"])(labelLengthsArr));
237
234
  choiceChanged(_objectSpread(_objectSpread({}, choice), {}, {
238
235
  label: value
239
236
  }));
240
237
 
241
- if (newLength > maxLength || newLength + 10 < maxLength) {
238
+ if (newLength > maxLength || newLength + 10 <= maxLength) {
242
239
  lengthChanged(newLength);
243
240
  }
244
241
  });
@@ -256,7 +253,7 @@ var AlternateSection = /*#__PURE__*/function (_React$Component2) {
256
253
  var labelLengthsArr = choices.map(function (choice) {
257
254
  return (choice.label || '').length;
258
255
  });
259
- return (0, _markupUtils.getAdjustedLength)(Math.max.apply(Math, (0, _toConsumableArray2["default"])(labelLengthsArr)));
256
+ return Math.max.apply(Math, (0, _toConsumableArray2["default"])(labelLengthsArr));
260
257
  });
261
258
  (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this2), "changeLength", function (event) {
262
259
  var lengthChanged = _this2.props.lengthChanged;
@@ -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","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"}
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 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 />\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 = 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 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"}
@@ -56,7 +56,9 @@ var ECRToolbar = /*#__PURE__*/function (_React$Component) {
56
56
  }
57
57
 
58
58
  _this = _super.call.apply(_super, [this].concat(args));
59
- (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "state", {});
59
+ (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "state", {
60
+ markup: ''
61
+ });
60
62
  (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "onDone", function () {
61
63
  var newValue = _this.state.markup;
62
64
  var _this$props = _this.props,
@@ -74,7 +76,7 @@ var ECRToolbar = /*#__PURE__*/function (_React$Component) {
74
76
  });
75
77
  var nextText = value.document.getNextText(node.key);
76
78
  change.moveFocusTo(nextText.key, 0).moveAnchorTo(nextText.key, 0);
77
- onToolbarDone(change, false);
79
+ onToolbarDone(change, true);
78
80
  onChangeResponse(newValue);
79
81
  });
80
82
  (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "onChange", function (e) {
@@ -134,7 +136,7 @@ var ECRToolbar = /*#__PURE__*/function (_React$Component) {
134
136
  },
135
137
  onChange: this.onChange,
136
138
  onBlur: this.onDone,
137
- value: markup
139
+ value: markup || ''
138
140
  }));
139
141
  }
140
142
  }]);
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/ecr-toolbar.jsx"],"names":["findSlateNode","key","window","document","querySelector","ECRToolbar","newValue","state","markup","props","node","value","onToolbarDone","onChangeResponse","update","data","toJSON","change","setNodeByKey","nextText","getNextText","moveFocusTo","moveAnchorTo","e","setState","target","correctChoice","choice","domNode","domNodeRect","getBoundingClientRect","editor","closest","editorRect","top","left","label","toolbarStyle","position","height","width","classes","backgroundColor","input","onChange","onDone","React","Component","PropTypes","object","func","isRequired","shape","StyledECRToolbar","respArea","padding"],"mappings":"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","sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\nimport { withStyles } from '@material-ui/core/styles';\nimport OutlinedInput from '@material-ui/core/OutlinedInput';\n\nconst findSlateNode = key => {\n return window.document.querySelector('[data-key=\"' + key + '\"]');\n};\n\nexport class ECRToolbar extends React.Component {\n static propTypes = {\n correctChoice: PropTypes.object,\n classes: PropTypes.object,\n node: PropTypes.object,\n onDone: PropTypes.func,\n onChangeResponse: PropTypes.func.isRequired,\n onToolbarDone: PropTypes.func.isRequired,\n value: PropTypes.shape({\n change: PropTypes.func.isRequired,\n document: PropTypes.shape({\n getNextText: PropTypes.func.isRequired\n })\n })\n };\n\n state = {};\n\n componentDidMount() {\n const { correctChoice, node } = this.props;\n const choice = correctChoice || {};\n\n const domNode = findSlateNode(node.key);\n\n if (domNode) {\n //eslint-disable-next-line\n const domNodeRect = domNode.getBoundingClientRect();\n const editor = domNode.closest('[data-slate-editor]');\n const editorRect = editor.getBoundingClientRect();\n const top = domNodeRect.top - editorRect.top;\n const left = domNodeRect.left - editorRect.left;\n\n this.setState({\n markup: choice.label,\n toolbarStyle: {\n position: 'absolute',\n top: `${top + domNodeRect.height + 20}px`,\n left: `${left + 20}px`,\n width: domNodeRect.width\n }\n });\n }\n }\n\n onDone = () => {\n const { markup: newValue } = this.state;\n const { node, value, onToolbarDone, onChangeResponse } = this.props;\n const update = { ...node.data.toJSON(), value: newValue };\n const change = value.change().setNodeByKey(node.key, { data: update });\n\n const nextText = value.document.getNextText(node.key);\n\n change.moveFocusTo(nextText.key, 0).moveAnchorTo(nextText.key, 0);\n\n onToolbarDone(change, false);\n onChangeResponse(newValue);\n };\n\n onChange = e => this.setState({ markup: e.target.value });\n\n render() {\n const { classes } = this.props;\n const { markup, toolbarStyle } = this.state;\n\n return (\n <div\n style={{\n ...toolbarStyle,\n backgroundColor: '#E0E1E6'\n }}\n >\n <OutlinedInput\n style={{ width: '100%' }}\n autoFocus\n labelWidth={0}\n classes={{\n input: classes.input\n }}\n onChange={this.onChange}\n onBlur={this.onDone}\n value={markup}\n />\n </div>\n );\n }\n}\n\nconst StyledECRToolbar = withStyles({\n respArea: {\n backgroundColor: '#fff'\n },\n input: {\n backgroundColor: '#fff',\n padding: '10px 20px 10px 10px'\n }\n})(ECRToolbar);\n\nexport default StyledECRToolbar;\n"],"file":"ecr-toolbar.js"}
1
+ {"version":3,"sources":["../src/ecr-toolbar.jsx"],"names":["findSlateNode","key","window","document","querySelector","ECRToolbar","markup","newValue","state","props","node","value","onToolbarDone","onChangeResponse","update","data","toJSON","change","setNodeByKey","nextText","getNextText","moveFocusTo","moveAnchorTo","e","setState","target","correctChoice","choice","domNode","domNodeRect","getBoundingClientRect","editor","closest","editorRect","top","left","label","toolbarStyle","position","height","width","classes","backgroundColor","input","onChange","onDone","React","Component","PropTypes","object","func","isRequired","shape","StyledECRToolbar","respArea","padding"],"mappings":"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","sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\nimport { withStyles } from '@material-ui/core/styles';\nimport OutlinedInput from '@material-ui/core/OutlinedInput';\n\nconst findSlateNode = key => {\n return window.document.querySelector('[data-key=\"' + key + '\"]');\n};\n\nexport class ECRToolbar extends React.Component {\n static propTypes = {\n correctChoice: PropTypes.object,\n classes: PropTypes.object,\n node: PropTypes.object,\n onDone: PropTypes.func,\n onChangeResponse: PropTypes.func.isRequired,\n onToolbarDone: PropTypes.func.isRequired,\n value: PropTypes.shape({\n change: PropTypes.func.isRequired,\n document: PropTypes.shape({\n getNextText: PropTypes.func.isRequired\n })\n })\n };\n\n state = {\n markup: ''\n };\n\n componentDidMount() {\n const { correctChoice, node } = this.props;\n const choice = correctChoice || {};\n\n const domNode = findSlateNode(node.key);\n\n if (domNode) {\n //eslint-disable-next-line\n const domNodeRect = domNode.getBoundingClientRect();\n const editor = domNode.closest('[data-slate-editor]');\n const editorRect = editor.getBoundingClientRect();\n const top = domNodeRect.top - editorRect.top;\n const left = domNodeRect.left - editorRect.left;\n\n this.setState({\n markup: choice.label,\n toolbarStyle: {\n position: 'absolute',\n top: `${top + domNodeRect.height + 20}px`,\n left: `${left + 20}px`,\n width: domNodeRect.width\n }\n });\n }\n }\n\n onDone = () => {\n const { markup: newValue } = this.state;\n const { node, value, onToolbarDone, onChangeResponse } = this.props;\n const update = { ...node.data.toJSON(), value: newValue };\n const change = value.change().setNodeByKey(node.key, { data: update });\n\n const nextText = value.document.getNextText(node.key);\n\n change.moveFocusTo(nextText.key, 0).moveAnchorTo(nextText.key, 0);\n\n onToolbarDone(change, true);\n onChangeResponse(newValue);\n };\n\n onChange = e => this.setState({ markup: e.target.value });\n\n render() {\n const { classes } = this.props;\n const { markup, toolbarStyle } = this.state;\n\n return (\n <div\n style={{\n ...toolbarStyle,\n backgroundColor: '#E0E1E6'\n }}\n >\n <OutlinedInput\n style={{ width: '100%' }}\n autoFocus\n labelWidth={0}\n classes={{\n input: classes.input\n }}\n onChange={this.onChange}\n onBlur={this.onDone}\n value={markup || ''}\n />\n </div>\n );\n }\n}\n\nconst StyledECRToolbar = withStyles({\n respArea: {\n backgroundColor: '#fff'\n },\n input: {\n backgroundColor: '#fff',\n padding: '10px 20px 10px 10px'\n }\n})(ECRToolbar);\n\nexport default StyledECRToolbar;\n"],"file":"ecr-toolbar.js"}
@@ -33,6 +33,10 @@ var _cloneDeep = _interopRequireDefault(require("lodash/cloneDeep"));
33
33
 
34
34
  var _isEmpty = _interopRequireDefault(require("lodash/isEmpty"));
35
35
 
36
+ var _pick = _interopRequireDefault(require("lodash/pick"));
37
+
38
+ var _throttle = _interopRequireDefault(require("lodash/throttle"));
39
+
36
40
  var _editableHtml = _interopRequireWildcard(require("@pie-lib/editable-html"));
37
41
 
38
42
  var _configUi = require("@pie-lib/config-ui");
@@ -172,7 +176,7 @@ var Main = /*#__PURE__*/function (_React$Component) {
172
176
  onModelChanged = _this$props3.onModelChanged;
173
177
  var choices = model.choices,
174
178
  maxLengthPerChoice = model.maxLengthPerChoice;
175
- var newValLength = (0, _markupUtils.getAdjustedLength)((newVal || '').length);
179
+ var newValLength = (newVal || '').length;
176
180
 
177
181
  if (!choices[index]) {
178
182
  choices[index] = [{
@@ -194,9 +198,11 @@ var Main = /*#__PURE__*/function (_React$Component) {
194
198
  }));
195
199
  });
196
200
  (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "onChange", function (markup) {
197
- var _this$props$model = _this.props.model,
198
- choices = _this$props$model.choices,
199
- maxLengthPerChoice = _this$props$model.maxLengthPerChoice;
201
+ var _this$props4 = _this.props,
202
+ _this$props4$model = _this$props4.model,
203
+ choices = _this$props4$model.choices,
204
+ maxLengthPerChoice = _this$props4$model.maxLengthPerChoice,
205
+ onModelChanged = _this$props4.onModelChanged;
200
206
  var domMarkup = createElementFromHTML(markup);
201
207
  var allRespAreas = domMarkup.querySelectorAll('[data-type="explicit_constructed_response"]');
202
208
  var allChoices = {};
@@ -216,25 +222,74 @@ var Main = /*#__PURE__*/function (_React$Component) {
216
222
  el.dataset.index = index;
217
223
  });
218
224
 
219
- _this.props.onModelChanged(_objectSpread(_objectSpread({}, _this.props.model), {}, {
220
- choices: allChoices,
221
- slateMarkup: domMarkup.innerHTML,
222
- maxLengthPerChoice: updatedMaxLengthPerChoice
223
- }));
225
+ var callback = function callback() {
226
+ return onModelChanged(_objectSpread(_objectSpread({}, _this.props.model), {}, {
227
+ choices: allChoices,
228
+ slateMarkup: domMarkup.innerHTML,
229
+ maxLengthPerChoice: updatedMaxLengthPerChoice
230
+ }));
231
+ };
232
+
233
+ _this.setState({
234
+ cachedChoices: undefined
235
+ }, callback);
224
236
  });
237
+ (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "onHandleAreaChange", (0, _throttle["default"])(function (nodes) {
238
+ var _this$props5 = _this.props,
239
+ choices = _this$props5.model.choices,
240
+ onModelChanged = _this$props5.onModelChanged;
241
+ var cachedChoices = _this.state.cachedChoices;
242
+
243
+ if (!nodes) {
244
+ return;
245
+ }
246
+
247
+ var newChoices = choices ? (0, _cloneDeep["default"])(choices) : {};
248
+ var newCachedChoices = cachedChoices ? (0, _cloneDeep["default"])(cachedChoices) : {};
249
+ nodes.forEach(function (node) {
250
+ var keyForNode = node.data.get('index');
251
+
252
+ if (!newChoices[keyForNode] && newCachedChoices[keyForNode]) {
253
+ Object.assign(newChoices, (0, _pick["default"])(newCachedChoices, keyForNode));
254
+
255
+ if (newCachedChoices.hasOwnProperty(keyForNode)) {
256
+ delete newCachedChoices[keyForNode];
257
+ }
258
+ } else {
259
+ Object.assign(newCachedChoices, (0, _pick["default"])(newChoices, keyForNode));
260
+
261
+ if (newChoices.hasOwnProperty(keyForNode)) {
262
+ delete newChoices[keyForNode];
263
+ }
264
+ }
265
+ });
266
+
267
+ var callback = function callback() {
268
+ return onModelChanged(_objectSpread(_objectSpread({}, _this.props.model), {}, {
269
+ choices: newChoices
270
+ }));
271
+ };
272
+
273
+ _this.setState({
274
+ cachedChoices: newCachedChoices
275
+ }, callback);
276
+ }, 500, {
277
+ trailing: false,
278
+ leading: true
279
+ }));
225
280
  return _this;
226
281
  }
227
282
 
228
283
  (0, _createClass2["default"])(Main, [{
229
284
  key: "componentDidMount",
230
285
  value: function componentDidMount() {
231
- var _this$props4 = this.props,
232
- _this$props4$model = _this$props4.model,
233
- slateMarkup = _this$props4$model.slateMarkup,
234
- choices = _this$props4$model.choices,
235
- _this$props4$model$ma = _this$props4$model.maxLengthPerChoice,
236
- maxLengthPerChoice = _this$props4$model$ma === void 0 ? [] : _this$props4$model$ma,
237
- onModelChanged = _this$props4.onModelChanged;
286
+ var _this$props6 = this.props,
287
+ _this$props6$model = _this$props6.model,
288
+ slateMarkup = _this$props6$model.slateMarkup,
289
+ choices = _this$props6$model.choices,
290
+ _this$props6$model$ma = _this$props6$model.maxLengthPerChoice,
291
+ maxLengthPerChoice = _this$props6$model$ma === void 0 ? [] : _this$props6$model$ma,
292
+ onModelChanged = _this$props6.onModelChanged;
238
293
  var undefinedLengths = !maxLengthPerChoice.length;
239
294
  this.setState({
240
295
  markup: slateMarkup
@@ -244,10 +299,10 @@ var Main = /*#__PURE__*/function (_React$Component) {
244
299
  var labelLengthsArr = (choice || []).map(function (choice) {
245
300
  return (choice.label || '').length;
246
301
  });
247
- var length = (0, _markupUtils.getAdjustedLength)(Math.max.apply(Math, (0, _toConsumableArray2["default"])(labelLengthsArr)));
302
+ var length = Math.max.apply(Math, (0, _toConsumableArray2["default"])(labelLengthsArr));
248
303
 
249
- if (undefinedLengths || !maxLengthPerChoice[index] || maxLengthPerChoice[index] < length) {
250
- maxLengthPerChoice[index] = length;
304
+ if (undefinedLengths || !maxLengthPerChoice[index] || maxLengthPerChoice[index] < length || maxLengthPerChoice[index] > length + 10) {
305
+ maxLengthPerChoice[index] = (0, _markupUtils.getAdjustedLength)(length);
251
306
  }
252
307
  });
253
308
  onModelChanged(_objectSpread(_objectSpread({}, this.props.model), {}, {
@@ -259,12 +314,12 @@ var Main = /*#__PURE__*/function (_React$Component) {
259
314
  value: function render() {
260
315
  var _this2 = this;
261
316
 
262
- var _this$props5 = this.props,
263
- classes = _this$props5.classes,
264
- model = _this$props5.model,
265
- configuration = _this$props5.configuration,
266
- onConfigurationChanged = _this$props5.onConfigurationChanged,
267
- imageSupport = _this$props5.imageSupport;
317
+ var _this$props7 = this.props,
318
+ classes = _this$props7.classes,
319
+ model = _this$props7.model,
320
+ configuration = _this$props7.configuration,
321
+ onConfigurationChanged = _this$props7.onConfigurationChanged,
322
+ imageSupport = _this$props7.imageSupport;
268
323
 
269
324
  var _ref = configuration || {},
270
325
  _ref$prompt = _ref.prompt,
@@ -367,7 +422,8 @@ var Main = /*#__PURE__*/function (_React$Component) {
367
422
  correctChoice: correctChoice
368
423
  });
369
424
  };
370
- }
425
+ },
426
+ onHandleAreaChange: this.onHandleAreaChange
371
427
  },
372
428
  className: classes.markup,
373
429
  markup: model.slateMarkup,
@@ -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","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"}
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","callback","setState","cachedChoices","undefined","nodes","state","newCachedChoices","node","keyForNode","data","get","Object","assign","hasOwnProperty","trailing","leading","undefinedLengths","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","onToolbarDone","correctChoice","onChangeResponse","onHandleAreaChange","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 pick from 'lodash/pick';\nimport throttle from 'lodash/throttle';\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 = Math.max(...labelLengthsArr);\n\n if (\n undefinedLengths\n || !maxLengthPerChoice[index]\n || maxLengthPerChoice[index] < length\n || maxLengthPerChoice[index] > length + 10\n ) {\n maxLengthPerChoice[index] = getAdjustedLength(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 = (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 onModelChanged\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 const callback = () => onModelChanged({\n ...this.props.model,\n choices: allChoices,\n slateMarkup: domMarkup.innerHTML,\n maxLengthPerChoice: updatedMaxLengthPerChoice\n });\n\n this.setState({\n cachedChoices: undefined\n }, callback);\n };\n\n onHandleAreaChange = throttle((nodes) => {\n const {\n model: { choices },\n onModelChanged\n } = this.props;\n const { cachedChoices } = this.state;\n\n if (!nodes) {\n return;\n }\n\n const newChoices = choices ? cloneDeep(choices) : {};\n const newCachedChoices = cachedChoices ? cloneDeep(cachedChoices) : {};\n\n nodes.forEach((node) => {\n const keyForNode = node.data.get('index');\n\n if (!newChoices[keyForNode] && newCachedChoices[keyForNode]) {\n Object.assign(newChoices, pick(newCachedChoices, keyForNode));\n\n if (newCachedChoices.hasOwnProperty(keyForNode)) {\n delete newCachedChoices[keyForNode];\n }\n } else {\n Object.assign(newCachedChoices, pick(newChoices, keyForNode));\n\n if (newChoices.hasOwnProperty(keyForNode)) {\n delete newChoices[keyForNode];\n }\n }\n });\n\n const callback = () => onModelChanged({\n ...this.props.model,\n choices: newChoices\n });\n\n this.setState({\n cachedChoices: newCachedChoices\n }, callback);\n }, 500, { trailing: false, leading: true });\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 onHandleAreaChange: this.onHandleAreaChange\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"}
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pie-element/explicit-constructed-response-configure",
3
- "version": "3.7.1",
3
+ "version": "3.7.4",
4
4
  "private": true,
5
5
  "main": "lib/index.js",
6
6
  "modue": "src/index.js",
@@ -8,8 +8,8 @@
8
8
  "@material-ui/core": "^3.9.2",
9
9
  "@material-ui/icons": "^3.0.1",
10
10
  "@pie-framework/pie-configure-events": "^1.2.0",
11
- "@pie-lib/config-ui": "^10.10.18",
12
- "@pie-lib/editable-html": "^7.17.18",
11
+ "@pie-lib/config-ui": "^10.10.23",
12
+ "@pie-lib/editable-html": "^7.19.2",
13
13
  "classnames": "^2.2.6",
14
14
  "debug": "^3.1.0",
15
15
  "lodash": "^4.17.15",
@@ -3,6 +3,14 @@
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.4.7](https://github.com/pie-framework/pie-elements/compare/@pie-element/explicit-constructed-response-controller@3.4.6...@pie-element/explicit-constructed-response-controller@3.4.7) (2022-03-08)
7
+
8
+ **Note:** Version bump only for package @pie-element/explicit-constructed-response-controller
9
+
10
+
11
+
12
+
13
+
6
14
  ## [3.4.3](https://github.com/pie-framework/pie-elements/compare/@pie-element/explicit-constructed-response-controller@3.4.2...@pie-element/explicit-constructed-response-controller@3.4.3) (2021-12-01)
7
15
 
8
16
  **Note:** Version bump only for package @pie-element/explicit-constructed-response-controller
@@ -166,10 +166,10 @@ function model(question, session, env) {
166
166
  var labelLengthsArr = (choice || []).map(function (choice) {
167
167
  return (choice.label || '').length;
168
168
  });
169
- var length = getAdjustedLength(Math.max.apply(Math, (0, _toConsumableArray2["default"])(labelLengthsArr)));
169
+ var length = Math.max.apply(Math, (0, _toConsumableArray2["default"])(labelLengthsArr));
170
170
 
171
- if (undefinedLengths || !maxLengthPerChoice[index] || maxLengthPerChoice[index] < length) {
172
- maxLengthPerChoice[index] = length;
171
+ if (undefinedLengths || !maxLengthPerChoice[index] || maxLengthPerChoice[index] < length || maxLengthPerChoice[index] > length + 10) {
172
+ maxLengthPerChoice[index] = getAdjustedLength(length);
173
173
  }
174
174
  });
175
175
  out = {