@pie-element/categorize 7.2.2 → 7.3.0
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 +21 -0
- package/configure/CHANGELOG.md +21 -0
- package/configure/lib/defaults.js +13 -1
- package/configure/lib/defaults.js.map +1 -1
- package/configure/lib/design/categories/index.js +0 -20
- package/configure/lib/design/categories/index.js.map +1 -1
- package/configure/lib/design/choices/choice.js +9 -1
- package/configure/lib/design/choices/choice.js.map +1 -1
- package/configure/lib/design/choices/config.js +6 -36
- package/configure/lib/design/choices/config.js.map +1 -1
- package/configure/lib/design/choices/index.js +3 -1
- package/configure/lib/design/choices/index.js.map +1 -1
- package/configure/lib/design/index.js +29 -2
- package/configure/lib/design/index.js.map +1 -1
- package/configure/lib/utils.js +9 -2
- package/configure/lib/utils.js.map +1 -1
- package/configure/package.json +3 -3
- package/controller/CHANGELOG.md +11 -0
- package/controller/lib/defaults.js +19 -0
- package/controller/lib/defaults.js.map +1 -1
- package/controller/lib/index.js +1 -7
- package/controller/lib/index.js.map +1 -1
- package/controller/lib/utils.js +14 -0
- package/controller/lib/utils.js.map +1 -0
- package/controller/package.json +1 -1
- package/package.json +2 -2
package/CHANGELOG.md
CHANGED
|
@@ -3,6 +3,27 @@
|
|
|
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
|
+
# [7.3.0](https://github.com/pie-framework/pie-elements/compare/@pie-element/categorize@7.2.2...@pie-element/categorize@7.3.0) (2022-11-15)
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
### Bug Fixes
|
|
10
|
+
|
|
11
|
+
* **categorize:** move Lock Choice Order into settings - PD-1984 ([912b072](https://github.com/pie-framework/pie-elements/commit/912b072ea7c9555bba5ad2c18167326a7d82922e))
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
### Features
|
|
15
|
+
|
|
16
|
+
* **categorize:** add constant for multiplePlacements choices-PD-1974 ([05462c9](https://github.com/pie-framework/pie-elements/commit/05462c9a4ae50c93d2ae980bc8fca8a58e986436))
|
|
17
|
+
* **categorize:** delete unnecessarry spaces and avoid choiceCount undefined:PD-1974 ([4fca67f](https://github.com/pie-framework/pie-elements/commit/4fca67f878c06e694a9553c76f5516b84116044b))
|
|
18
|
+
* **categorize:** simplify if condition - PD-1974 ([2f795cd](https://github.com/pie-framework/pie-elements/commit/2f795cd5c792d94b2d680e0a997dff11f0d8144a))
|
|
19
|
+
* **categorize:** solve conflicts: PD-1984 ([1d746f6](https://github.com/pie-framework/pie-elements/commit/1d746f622129656c676517408ae4fb75b918e0b2))
|
|
20
|
+
* **categorize:** update same line return method-PD-1984 ([1bbe4b3](https://github.com/pie-framework/pie-elements/commit/1bbe4b36143e6fd77a005e334a3b79fb4ba94519))
|
|
21
|
+
* **categorize:** updatel model from controller to be consistent with the one in configure-PD-1985 ([d7f6e3f](https://github.com/pie-framework/pie-elements/commit/d7f6e3f47c28f9e0d41738a70ecff49c9b72a6af))
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
|
|
6
27
|
## [7.2.2](https://github.com/pie-framework/pie-elements/compare/@pie-element/categorize@7.2.1...@pie-element/categorize@7.2.2) (2022-11-11)
|
|
7
28
|
|
|
8
29
|
|
package/configure/CHANGELOG.md
CHANGED
|
@@ -3,6 +3,27 @@
|
|
|
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
|
+
# [6.3.0](https://github.com/pie-framework/pie-elements/compare/@pie-element/categorize-configure@6.2.2...@pie-element/categorize-configure@6.3.0) (2022-11-15)
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
### Bug Fixes
|
|
10
|
+
|
|
11
|
+
* **categorize:** move Lock Choice Order into settings - PD-1984 ([912b072](https://github.com/pie-framework/pie-elements/commit/912b072ea7c9555bba5ad2c18167326a7d82922e))
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
### Features
|
|
15
|
+
|
|
16
|
+
* **categorize:** add constant for multiplePlacements choices-PD-1974 ([05462c9](https://github.com/pie-framework/pie-elements/commit/05462c9a4ae50c93d2ae980bc8fca8a58e986436))
|
|
17
|
+
* **categorize:** delete unnecessarry spaces and avoid choiceCount undefined:PD-1974 ([4fca67f](https://github.com/pie-framework/pie-elements/commit/4fca67f878c06e694a9553c76f5516b84116044b))
|
|
18
|
+
* **categorize:** simplify if condition - PD-1974 ([2f795cd](https://github.com/pie-framework/pie-elements/commit/2f795cd5c792d94b2d680e0a997dff11f0d8144a))
|
|
19
|
+
* **categorize:** solve conflicts: PD-1984 ([1d746f6](https://github.com/pie-framework/pie-elements/commit/1d746f622129656c676517408ae4fb75b918e0b2))
|
|
20
|
+
* **categorize:** update same line return method-PD-1984 ([1bbe4b3](https://github.com/pie-framework/pie-elements/commit/1bbe4b36143e6fd77a005e334a3b79fb4ba94519))
|
|
21
|
+
* **categorize:** updatel model from controller to be consistent with the one in configure-PD-1985 ([d7f6e3f](https://github.com/pie-framework/pie-elements/commit/d7f6e3f47c28f9e0d41738a70ecff49c9b72a6af))
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
|
|
6
27
|
## [6.2.2](https://github.com/pie-framework/pie-elements/compare/@pie-element/categorize-configure@6.2.1...@pie-element/categorize-configure@6.2.2) (2022-11-11)
|
|
7
28
|
|
|
8
29
|
|
|
@@ -4,6 +4,9 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
6
|
exports["default"] = void 0;
|
|
7
|
+
|
|
8
|
+
var _utils = require("./utils");
|
|
9
|
+
|
|
7
10
|
var _default = {
|
|
8
11
|
model: {
|
|
9
12
|
choices: [],
|
|
@@ -11,6 +14,7 @@ var _default = {
|
|
|
11
14
|
choicesLabel: '',
|
|
12
15
|
lockChoiceOrder: true,
|
|
13
16
|
removeTilesAfterPlacing: false,
|
|
17
|
+
allowMultiplePlacementsEnabled: _utils.multiplePlacements.enabled,
|
|
14
18
|
categoriesPerRow: 2,
|
|
15
19
|
categories: [],
|
|
16
20
|
alternates: [],
|
|
@@ -36,9 +40,17 @@ var _default = {
|
|
|
36
40
|
enabled: true
|
|
37
41
|
},
|
|
38
42
|
lockChoiceOrder: {
|
|
39
|
-
settings:
|
|
43
|
+
settings: true,
|
|
40
44
|
label: 'Lock Choice Order'
|
|
41
45
|
},
|
|
46
|
+
allowMultiplePlacements: {
|
|
47
|
+
settings: true,
|
|
48
|
+
label: 'Allow Multiple Placements'
|
|
49
|
+
},
|
|
50
|
+
categoriesPerRow: {
|
|
51
|
+
settings: true,
|
|
52
|
+
label: 'Categories per row'
|
|
53
|
+
},
|
|
42
54
|
partialScoring: {
|
|
43
55
|
settings: false,
|
|
44
56
|
label: 'Allow Partial Scoring'
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/defaults.js"],"names":["model","choices","choicesPosition","choicesLabel","lockChoiceOrder","removeTilesAfterPlacing","categoriesPerRow","categories","alternates","correctResponse","rowLabels","partialScoring","feedbackEnabled","rationaleEnabled","promptEnabled","teacherInstructionsEnabled","studentInstructionsEnabled","toolbarEditorPosition","configuration","spellCheck","label","settings","
|
|
1
|
+
{"version":3,"sources":["../src/defaults.js"],"names":["model","choices","choicesPosition","choicesLabel","lockChoiceOrder","removeTilesAfterPlacing","allowMultiplePlacementsEnabled","multiplePlacements","enabled","categoriesPerRow","categories","alternates","correctResponse","rowLabels","partialScoring","feedbackEnabled","rationaleEnabled","promptEnabled","teacherInstructionsEnabled","studentInstructionsEnabled","toolbarEditorPosition","configuration","spellCheck","label","settings","feedback","allowMultiplePlacements","prompt","rationale","scoringType","studentInstructions","teacherInstructions","maxImageWidth","rowLabel","categoryLabel","maxImageHeight","withRubric"],"mappings":"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","sourcesContent":["import { multiplePlacements } from './utils';\n\nexport default {\n model: {\n choices: [],\n choicesPosition: 'below',\n choicesLabel: '',\n lockChoiceOrder: true,\n removeTilesAfterPlacing: false,\n allowMultiplePlacementsEnabled: multiplePlacements.enabled,\n categoriesPerRow: 2,\n categories: [],\n alternates: [],\n correctResponse: [],\n rowLabels: [''],\n partialScoring: true,\n feedbackEnabled: true,\n rationaleEnabled: true,\n promptEnabled: true,\n teacherInstructionsEnabled: true,\n studentInstructionsEnabled: true,\n toolbarEditorPosition: 'bottom',\n },\n configuration: {\n spellCheck: {\n label: 'Spellcheck',\n settings:false,\n enabled:true\n },\n feedback: {\n settings: true,\n label: 'Feedback',\n enabled: true\n },\n lockChoiceOrder: {\n settings: true,\n label: 'Lock Choice Order',\n },\n allowMultiplePlacements: {\n settings: true,\n label: 'Allow Multiple Placements'\n },\n categoriesPerRow: {\n settings: true,\n label: 'Categories per row'\n },\n partialScoring: {\n settings: false,\n label: 'Allow Partial Scoring',\n },\n prompt: {\n settings: true,\n label: 'Prompt'\n },\n rationale: {\n settings: true,\n label: 'Rationale'\n },\n scoringType: {\n settings: false,\n label: 'Scoring Type',\n },\n studentInstructions: {\n settings: false,\n label: 'Student Instructions'\n },\n teacherInstructions: {\n settings: true,\n label: 'Teacher Instructions'\n },\n toolbarEditorPosition:{\n settings: false,\n label: 'Toolbar Editor Position'\n },\n maxImageWidth: {\n teacherInstructions: 300,\n prompt: 300,\n rationale: 300,\n rowLabel: 200,\n categoryLabel: 260,\n choices: 240\n },\n maxImageHeight: {\n teacherInstructions: 300,\n prompt: 300,\n rationale: 300,\n rowLabel: 100,\n categoryLabel: 100,\n choices: 150\n },\n withRubric: {\n settings: false,\n label: 'Add Rubric'\n }\n }\n};\n"],"file":"defaults.js"}
|
|
@@ -145,15 +145,6 @@ var Categories = /*#__PURE__*/function (_React$Component) {
|
|
|
145
145
|
}
|
|
146
146
|
|
|
147
147
|
_this = _super.call.apply(_super, [this].concat(args));
|
|
148
|
-
(0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "changeCategoryColumns", function (event) {
|
|
149
|
-
var numberValue = parseInt(event.target.value, 10);
|
|
150
|
-
|
|
151
|
-
if (numberValue && numberValue >= 1 && numberValue <= 4) {
|
|
152
|
-
_this.props.onModelChanged({
|
|
153
|
-
categoriesPerRow: numberValue
|
|
154
|
-
});
|
|
155
|
-
}
|
|
156
|
-
});
|
|
157
148
|
(0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "add", function () {
|
|
158
149
|
var model = _this.props.model;
|
|
159
150
|
var categoriesPerRow = model.categoriesPerRow;
|
|
@@ -305,17 +296,6 @@ var Categories = /*#__PURE__*/function (_React$Component) {
|
|
|
305
296
|
}, associationError), categoriesError && /*#__PURE__*/_react["default"].createElement("div", {
|
|
306
297
|
className: classes.errorText
|
|
307
298
|
}, categoriesError), /*#__PURE__*/_react["default"].createElement("div", {
|
|
308
|
-
className: classes.row
|
|
309
|
-
}, /*#__PURE__*/_react["default"].createElement(_TextField["default"], {
|
|
310
|
-
label: "Categories per row",
|
|
311
|
-
type: "number",
|
|
312
|
-
inputProps: {
|
|
313
|
-
min: 1,
|
|
314
|
-
max: 4
|
|
315
|
-
},
|
|
316
|
-
value: categoriesPerRow,
|
|
317
|
-
onChange: this.changeCategoryColumns
|
|
318
|
-
})), /*#__PURE__*/_react["default"].createElement("div", {
|
|
319
299
|
className: classes.categoriesHolder,
|
|
320
300
|
style: holderStyle
|
|
321
301
|
}, categories.map(function (category, index) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/design/categories/index.jsx"],"names":["styles","theme","categories","marginBottom","spacing","unit","categoriesHolder","display","gridRowGap","gridColumnGap","row","gridTemplateColumns","alignItems","width","marginTop","rowLabel","gridColumn","rowLabelHolder","tooltip","fontSize","whiteSpace","maxWidth","errorText","color","padding","RowLabel","categoriesPerRow","classes","markup","imageSupport","onChange","toolbarOpts","spellCheck","maxImageWidth","maxImageHeight","uploadSoundSupport","text","language","Categories","event","numberValue","parseInt","target","value","props","onModelChanged","model","id","utils","firstAvailableIndex","map","a","data","label","addRowLabel","length","rowLabels","push","concat","category","index","findIndex","splice","correctResponse","c","choice","categoryId","undefined","choiceIndex","val","newRowLabels","className","configuration","defaultImageMaxHeight","defaultImageMaxWidth","errors","associationError","categoriesError","maxCategories","holderStyle","validationMessage","add","marginLeft","min","max","changeCategoryColumns","hasRowLabel","rowIndex","changeRowLabel","change","addChoiceToCategory","deleteChoiceFromCategory","categoryLabel","React","Component","PropTypes","shape","func","isRequired","object","string","array"],"mappings":"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","sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\nimport { withStyles } from '@material-ui/core/styles';\nimport TextField from '@material-ui/core/TextField';\nimport Typography from '@material-ui/core/Typography';\nimport { choiceUtils as utils } from '@pie-lib/config-ui';\nimport EditableHtml from '@pie-lib/editable-html';\nimport classNames from 'classnames';\nimport Info from '@material-ui/icons/Info';\nimport Tooltip from '@material-ui/core/Tooltip';\nimport { moveChoiceToCategory, removeCategory, removeChoiceFromCategory } from '@pie-lib/categorize';\n\nimport Category from './category';\nimport Header from '../header';\nimport { generateValidationMessage } from '../../utils';\n\nconst styles = theme => ({\n categories: {\n marginBottom: theme.spacing.unit\n },\n categoriesHolder: {\n display: 'grid',\n gridRowGap: `${theme.spacing.unit}px`,\n gridColumnGap: `${theme.spacing.unit}px`\n },\n row: {\n display: 'grid',\n gridTemplateColumns: 'repeat(2, 1fr)',\n gridColumnGap: `${theme.spacing.unit}px`,\n alignItems: 'baseline',\n width: '100%',\n marginTop: theme.spacing.unit,\n marginBottom: 2 * theme.spacing.unit\n },\n rowLabel: {\n gridColumn: '1/3'\n },\n rowLabelHolder: {\n width: '100%'\n },\n tooltip: {\n fontSize: '12px',\n whiteSpace: 'pre',\n maxWidth: '500px',\n },\n errorText: {\n fontSize: '12px',\n color: 'red',\n padding: '5px 0'\n },\n});\n\nconst RowLabel = withStyles(styles)(({ categoriesPerRow, classes, markup, imageSupport, onChange, toolbarOpts, spellCheck, maxImageWidth, maxImageHeight, uploadSoundSupport}) => {\n return (\n <div\n style={{\n gridColumn: `1/${categoriesPerRow + 1}`,\n width: '100%'\n }}\n >\n <Typography className={classes.text}>\n Row Label\n </Typography>\n <EditableHtml\n className={classes.rowLabelHolder}\n markup={markup}\n onChange={onChange}\n imageSupport={imageSupport}\n nonEmpty={false}\n toolbarOpts={toolbarOpts}\n spellCheck={spellCheck}\n maxImageWidth={maxImageWidth}\n maxImageHeight={maxImageHeight}\n uploadSoundSupport={uploadSoundSupport}\n languageCharactersProps={[{ language: 'spanish' }, { language: 'special' }]}\n />\n </div>\n );\n});\n\nexport class Categories extends React.Component {\n static propTypes = {\n imageSupport: PropTypes.shape({\n add: PropTypes.func.isRequired,\n delete: PropTypes.func.isRequired\n }),\n uploadSoundSupport: PropTypes.shape({\n add: PropTypes.func.isRequired,\n delete: PropTypes.func.isRequired\n }),\n classes: PropTypes.object.isRequired,\n className: PropTypes.string,\n categories: PropTypes.array,\n onModelChanged: PropTypes.func,\n model: PropTypes.object.isRequired,\n configuration: PropTypes.object.isRequired,\n toolbarOpts: PropTypes.object\n };\n\n changeCategoryColumns = event => {\n const numberValue = parseInt(event.target.value, 10);\n\n if (numberValue && numberValue >= 1 && numberValue <= 4) {\n this.props.onModelChanged({ categoriesPerRow: numberValue });\n }\n };\n\n add = () => {\n const { model } = this.props;\n const { categoriesPerRow } = model;\n const id = utils.firstAvailableIndex(model.categories.map(a => a.id), 0);\n const data = { id, label: 'Category ' + id };\n const addRowLabel = (model.categories.length) % categoriesPerRow === 0;\n const rowLabels = [...model.rowLabels];\n\n if (addRowLabel) {\n rowLabels.push('');\n }\n\n this.props.onModelChanged({\n rowLabels,\n categories: model.categories.concat([data])\n });\n };\n\n delete = category => {\n const { model, onModelChanged } = this.props;\n const index = model.categories.findIndex(a => a.id === category.id);\n\n if (index !== -1) {\n model.categories.splice(index, 1);\n model.correctResponse = removeCategory(\n category.id,\n model.correctResponse\n );\n onModelChanged(model);\n }\n };\n\n change = c => {\n const { categories } = this.props;\n const index = categories.findIndex(a => a.id === c.id);\n\n if (index !== -1) {\n categories.splice(index, 1, c);\n this.props.onModelChanged({ categories });\n }\n };\n\n addChoiceToCategory = (choice, categoryId) => {\n const { model, onModelChanged } = this.props;\n const correctResponse = moveChoiceToCategory(\n choice.id,\n undefined,\n categoryId,\n 0,\n model.correctResponse\n );\n\n onModelChanged({ correctResponse });\n };\n\n deleteChoiceFromCategory = (category, choice, choiceIndex) => {\n const { model, onModelChanged } = this.props;\n const correctResponse = removeChoiceFromCategory(\n choice.id,\n category.id,\n choiceIndex,\n model.correctResponse\n );\n\n onModelChanged({ correctResponse });\n };\n\n changeRowLabel = (val, index) => {\n const { model } = this.props;\n const { rowLabels } = model;\n const newRowLabels = [...rowLabels];\n\n if (newRowLabels.length < index) {\n newRowLabels.push(val);\n } else {\n newRowLabels[index] = val;\n }\n\n this.props.onModelChanged({\n rowLabels: newRowLabels\n });\n };\n\n render() {\n const {\n model,\n classes,\n className,\n categories,\n imageSupport,\n uploadSoundSupport,\n toolbarOpts,\n spellCheck,\n configuration,\n defaultImageMaxHeight,\n defaultImageMaxWidth\n } = this.props;\n\n const { categoriesPerRow, rowLabels, errors } = model;\n const { associationError, categoriesError } = errors || {};\n const {\n maxCategories,\n maxImageWidth = {},\n maxImageHeight = {},\n } = configuration || {};\n const holderStyle = {\n gridTemplateColumns: `repeat(${categoriesPerRow}, 1fr)`\n };\n\n const validationMessage = generateValidationMessage(configuration);\n\n return (\n <div className={classNames(classes.categories, className)}>\n <Header\n label=\"Categories\"\n buttonLabel=\"ADD A CATEGORY\"\n onAdd={this.add}\n info={<Tooltip\n classes={{tooltip: classes.tooltip}}\n disableFocusListener\n disableTouchListener\n placement={'right'}\n title={validationMessage}\n >\n <Info fontSize={'small'} color={'primary'} style={{ marginLeft: '5px' }}/>\n </Tooltip>}\n buttonDisabled={maxCategories && categories && maxCategories === categories.length}\n />\n {associationError && <div className={classes.errorText}>{associationError}</div>}\n {categoriesError && <div className={classes.errorText}>{categoriesError}</div>}\n <div className={classes.row}>\n <TextField\n label=\"Categories per row\"\n type=\"number\"\n inputProps={{\n min: 1,\n max: 4\n }}\n value={categoriesPerRow}\n onChange={this.changeCategoryColumns}\n />\n </div>\n <div className={classes.categoriesHolder} style={holderStyle}>\n {categories.map((category, index) => {\n const hasRowLabel = index % categoriesPerRow === 0;\n const rowIndex = index / categoriesPerRow;\n\n return (\n <React.Fragment\n key={index}\n >\n {hasRowLabel && (\n <RowLabel\n categoriesPerRow={categoriesPerRow}\n rowIndex={rowIndex}\n markup={rowLabels[rowIndex] || ''}\n onChange={(val) => this.changeRowLabel(val, rowIndex)}\n imageSupport={imageSupport}\n toolbarOpts={toolbarOpts}\n spellCheck={spellCheck}\n maxImageWidth={maxImageWidth && maxImageWidth.rowLabel || defaultImageMaxWidth}\n maxImageHeight={maxImageHeight && maxImageHeight.rowLabel || defaultImageMaxHeight}\n uploadSoundSupport={uploadSoundSupport}\n />\n )}\n <Category\n imageSupport={imageSupport}\n category={category}\n onChange={this.change}\n onDelete={() => this.delete(category)}\n onAddChoice={this.addChoiceToCategory}\n toolbarOpts={toolbarOpts}\n spellCheck={spellCheck}\n onDeleteChoice={(choice, choiceIndex) =>\n this.deleteChoiceFromCategory(category, choice, choiceIndex)\n }\n maxImageWidth={maxImageWidth && maxImageWidth.categoryLabel || defaultImageMaxWidth}\n maxImageHeight={maxImageHeight && maxImageHeight.categoryLabel || defaultImageMaxHeight}\n uploadSoundSupport={uploadSoundSupport}\n />\n </React.Fragment>\n );\n })}\n </div>\n </div>\n );\n }\n}\n\nexport default withStyles(styles)(Categories);\n"],"file":"index.js"}
|
|
1
|
+
{"version":3,"sources":["../../../src/design/categories/index.jsx"],"names":["styles","theme","categories","marginBottom","spacing","unit","categoriesHolder","display","gridRowGap","gridColumnGap","row","gridTemplateColumns","alignItems","width","marginTop","rowLabel","gridColumn","rowLabelHolder","tooltip","fontSize","whiteSpace","maxWidth","errorText","color","padding","RowLabel","categoriesPerRow","classes","markup","imageSupport","onChange","toolbarOpts","spellCheck","maxImageWidth","maxImageHeight","uploadSoundSupport","text","language","Categories","model","props","id","utils","firstAvailableIndex","map","a","data","label","addRowLabel","length","rowLabels","push","onModelChanged","concat","category","index","findIndex","splice","correctResponse","c","choice","categoryId","undefined","choiceIndex","val","newRowLabels","className","configuration","defaultImageMaxHeight","defaultImageMaxWidth","errors","associationError","categoriesError","maxCategories","holderStyle","validationMessage","add","marginLeft","hasRowLabel","rowIndex","changeRowLabel","change","addChoiceToCategory","deleteChoiceFromCategory","categoryLabel","React","Component","PropTypes","shape","func","isRequired","object","string","array"],"mappings":"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","sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\nimport { withStyles } from '@material-ui/core/styles';\nimport TextField from '@material-ui/core/TextField';\nimport Typography from '@material-ui/core/Typography';\nimport { choiceUtils as utils } from '@pie-lib/config-ui';\nimport EditableHtml from '@pie-lib/editable-html';\nimport classNames from 'classnames';\nimport Info from '@material-ui/icons/Info';\nimport Tooltip from '@material-ui/core/Tooltip';\nimport { moveChoiceToCategory, removeCategory, removeChoiceFromCategory } from '@pie-lib/categorize';\n\nimport Category from './category';\nimport Header from '../header';\nimport { generateValidationMessage } from '../../utils';\n\nconst styles = theme => ({\n categories: {\n marginBottom: theme.spacing.unit\n },\n categoriesHolder: {\n display: 'grid',\n gridRowGap: `${theme.spacing.unit}px`,\n gridColumnGap: `${theme.spacing.unit}px`\n },\n row: {\n display: 'grid',\n gridTemplateColumns: 'repeat(2, 1fr)',\n gridColumnGap: `${theme.spacing.unit}px`,\n alignItems: 'baseline',\n width: '100%',\n marginTop: theme.spacing.unit,\n marginBottom: 2 * theme.spacing.unit\n },\n rowLabel: {\n gridColumn: '1/3'\n },\n rowLabelHolder: {\n width: '100%'\n },\n tooltip: {\n fontSize: '12px',\n whiteSpace: 'pre',\n maxWidth: '500px',\n },\n errorText: {\n fontSize: '12px',\n color: 'red',\n padding: '5px 0'\n },\n});\n\nconst RowLabel = withStyles(styles)(({ categoriesPerRow, classes, markup, imageSupport, onChange, toolbarOpts, spellCheck, maxImageWidth, maxImageHeight, uploadSoundSupport}) => {\n return (\n <div\n style={{\n gridColumn: `1/${categoriesPerRow + 1}`,\n width: '100%'\n }}\n >\n <Typography className={classes.text}>\n Row Label\n </Typography>\n <EditableHtml\n className={classes.rowLabelHolder}\n markup={markup}\n onChange={onChange}\n imageSupport={imageSupport}\n nonEmpty={false}\n toolbarOpts={toolbarOpts}\n spellCheck={spellCheck}\n maxImageWidth={maxImageWidth}\n maxImageHeight={maxImageHeight}\n uploadSoundSupport={uploadSoundSupport}\n languageCharactersProps={[{ language: 'spanish' }, { language: 'special' }]}\n />\n </div>\n );\n});\n\nexport class Categories extends React.Component {\n static propTypes = {\n imageSupport: PropTypes.shape({\n add: PropTypes.func.isRequired,\n delete: PropTypes.func.isRequired\n }),\n uploadSoundSupport: PropTypes.shape({\n add: PropTypes.func.isRequired,\n delete: PropTypes.func.isRequired\n }),\n classes: PropTypes.object.isRequired,\n className: PropTypes.string,\n categories: PropTypes.array,\n onModelChanged: PropTypes.func,\n model: PropTypes.object.isRequired,\n configuration: PropTypes.object.isRequired,\n toolbarOpts: PropTypes.object\n };\n\n add = () => {\n const { model } = this.props;\n const { categoriesPerRow } = model;\n const id = utils.firstAvailableIndex(model.categories.map(a => a.id), 0);\n const data = { id, label: 'Category ' + id };\n const addRowLabel = (model.categories.length) % categoriesPerRow === 0;\n const rowLabels = [...model.rowLabels];\n\n if (addRowLabel) {\n rowLabels.push('');\n }\n\n this.props.onModelChanged({\n rowLabels,\n categories: model.categories.concat([data])\n });\n };\n\n delete = category => {\n const { model, onModelChanged } = this.props;\n const index = model.categories.findIndex(a => a.id === category.id);\n\n if (index !== -1) {\n model.categories.splice(index, 1);\n model.correctResponse = removeCategory(\n category.id,\n model.correctResponse\n );\n onModelChanged(model);\n }\n };\n\n change = c => {\n const { categories } = this.props;\n const index = categories.findIndex(a => a.id === c.id);\n\n if (index !== -1) {\n categories.splice(index, 1, c);\n this.props.onModelChanged({ categories });\n }\n };\n\n addChoiceToCategory = (choice, categoryId) => {\n const { model, onModelChanged } = this.props;\n const correctResponse = moveChoiceToCategory(\n choice.id,\n undefined,\n categoryId,\n 0,\n model.correctResponse\n );\n\n onModelChanged({ correctResponse });\n };\n\n deleteChoiceFromCategory = (category, choice, choiceIndex) => {\n const { model, onModelChanged } = this.props;\n const correctResponse = removeChoiceFromCategory(\n choice.id,\n category.id,\n choiceIndex,\n model.correctResponse\n );\n\n onModelChanged({ correctResponse });\n };\n\n changeRowLabel = (val, index) => {\n const { model } = this.props;\n const { rowLabels } = model;\n const newRowLabels = [...rowLabels];\n\n if (newRowLabels.length < index) {\n newRowLabels.push(val);\n } else {\n newRowLabels[index] = val;\n }\n\n this.props.onModelChanged({\n rowLabels: newRowLabels\n });\n };\n\n render() {\n const {\n model,\n classes,\n className,\n categories,\n imageSupport,\n uploadSoundSupport,\n toolbarOpts,\n spellCheck,\n configuration,\n defaultImageMaxHeight,\n defaultImageMaxWidth\n } = this.props;\n\n const { categoriesPerRow, rowLabels, errors } = model;\n const { associationError, categoriesError } = errors || {};\n const {\n maxCategories,\n maxImageWidth = {},\n maxImageHeight = {},\n } = configuration || {};\n const holderStyle = {\n gridTemplateColumns: `repeat(${categoriesPerRow}, 1fr)`\n };\n\n const validationMessage = generateValidationMessage(configuration);\n\n return (\n <div className={classNames(classes.categories, className)}>\n <Header\n label=\"Categories\"\n buttonLabel=\"ADD A CATEGORY\"\n onAdd={this.add}\n info={<Tooltip\n classes={{tooltip: classes.tooltip}}\n disableFocusListener\n disableTouchListener\n placement={'right'}\n title={validationMessage}\n >\n <Info fontSize={'small'} color={'primary'} style={{ marginLeft: '5px' }}/>\n </Tooltip>}\n buttonDisabled={maxCategories && categories && maxCategories === categories.length}\n />\n {associationError && <div className={classes.errorText}>{associationError}</div>}\n {categoriesError && <div className={classes.errorText}>{categoriesError}</div>}\n <div className={classes.categoriesHolder} style={holderStyle}>\n {categories.map((category, index) => {\n const hasRowLabel = index % categoriesPerRow === 0;\n const rowIndex = index / categoriesPerRow;\n\n return (\n <React.Fragment\n key={index}\n >\n {hasRowLabel && (\n <RowLabel\n categoriesPerRow={categoriesPerRow}\n rowIndex={rowIndex}\n markup={rowLabels[rowIndex] || ''}\n onChange={(val) => this.changeRowLabel(val, rowIndex)}\n imageSupport={imageSupport}\n toolbarOpts={toolbarOpts}\n spellCheck={spellCheck}\n maxImageWidth={maxImageWidth && maxImageWidth.rowLabel || defaultImageMaxWidth}\n maxImageHeight={maxImageHeight && maxImageHeight.rowLabel || defaultImageMaxHeight}\n uploadSoundSupport={uploadSoundSupport}\n />\n )}\n <Category\n imageSupport={imageSupport}\n category={category}\n onChange={this.change}\n onDelete={() => this.delete(category)}\n onAddChoice={this.addChoiceToCategory}\n toolbarOpts={toolbarOpts}\n spellCheck={spellCheck}\n onDeleteChoice={(choice, choiceIndex) =>\n this.deleteChoiceFromCategory(category, choice, choiceIndex)\n }\n maxImageWidth={maxImageWidth && maxImageWidth.categoryLabel || defaultImageMaxWidth}\n maxImageHeight={maxImageHeight && maxImageHeight.categoryLabel || defaultImageMaxHeight}\n uploadSoundSupport={uploadSoundSupport}\n />\n </React.Fragment>\n );\n })}\n </div>\n </div>\n );\n }\n}\n\nexport default withStyles(styles)(Categories);\n"],"file":"index.js"}
|
|
@@ -47,6 +47,8 @@ var _debug = _interopRequireDefault(require("debug"));
|
|
|
47
47
|
|
|
48
48
|
var _drag = require("@pie-lib/drag");
|
|
49
49
|
|
|
50
|
+
var _utils = require("../../utils");
|
|
51
|
+
|
|
50
52
|
function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = (0, _getPrototypeOf2["default"])(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = (0, _getPrototypeOf2["default"])(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return (0, _possibleConstructorReturn2["default"])(this, result); }; }
|
|
51
53
|
|
|
52
54
|
function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
|
|
@@ -98,6 +100,9 @@ var Choice = /*#__PURE__*/function (_React$Component) {
|
|
|
98
100
|
|
|
99
101
|
onChange(choice);
|
|
100
102
|
});
|
|
103
|
+
(0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "isCheckboxShown", function (allowMultiplePlacements) {
|
|
104
|
+
return allowMultiplePlacements === _utils.multiplePlacements.perChoice;
|
|
105
|
+
});
|
|
101
106
|
return _this;
|
|
102
107
|
}
|
|
103
108
|
|
|
@@ -105,6 +110,7 @@ var Choice = /*#__PURE__*/function (_React$Component) {
|
|
|
105
110
|
key: "render",
|
|
106
111
|
value: function render() {
|
|
107
112
|
var _this$props3 = this.props,
|
|
113
|
+
allowMultiplePlacements = _this$props3.allowMultiplePlacements,
|
|
108
114
|
classes = _this$props3.classes,
|
|
109
115
|
className = _this$props3.className,
|
|
110
116
|
choice = _this$props3.choice,
|
|
@@ -119,6 +125,7 @@ var Choice = /*#__PURE__*/function (_React$Component) {
|
|
|
119
125
|
maxImageHeight = _this$props3.maxImageHeight,
|
|
120
126
|
uploadSoundSupport = _this$props3.uploadSoundSupport;
|
|
121
127
|
var draggable = canDrag(this.props);
|
|
128
|
+
var showRemoveAfterPlacing = this.isCheckboxShown(allowMultiplePlacements);
|
|
122
129
|
return /*#__PURE__*/_react["default"].createElement(_Card["default"], {
|
|
123
130
|
className: (0, _classnames["default"])(classes.choice, className)
|
|
124
131
|
}, /*#__PURE__*/_react["default"].createElement(_CardActions["default"], {
|
|
@@ -145,7 +152,7 @@ var Choice = /*#__PURE__*/function (_React$Component) {
|
|
|
145
152
|
}, /*#__PURE__*/_react["default"].createElement(_buttons.DeleteButton, {
|
|
146
153
|
label: 'delete',
|
|
147
154
|
onClick: onDelete
|
|
148
|
-
}), /*#__PURE__*/_react["default"].createElement(_configUi.Checkbox, {
|
|
155
|
+
}), showRemoveAfterPlacing && /*#__PURE__*/_react["default"].createElement(_configUi.Checkbox, {
|
|
149
156
|
mini: true,
|
|
150
157
|
label: 'Remove after placing',
|
|
151
158
|
checked: choice.categoryCount === 1,
|
|
@@ -158,6 +165,7 @@ var Choice = /*#__PURE__*/function (_React$Component) {
|
|
|
158
165
|
|
|
159
166
|
exports.Choice = Choice;
|
|
160
167
|
(0, _defineProperty2["default"])(Choice, "propTypes", {
|
|
168
|
+
allowMultiplePlacements: _propTypes["default"].string,
|
|
161
169
|
classes: _propTypes["default"].object.isRequired,
|
|
162
170
|
className: _propTypes["default"].string,
|
|
163
171
|
choice: _propTypes["default"].object.isRequired,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/design/choices/choice.jsx"],"names":["log","canDrag","props","count","choice","categoryCount","correctResponseCount","Choice","content","onChange","classes","className","onDelete","connectDragSource","connectDragPreview","imageSupport","spellCheck","toolbarOpts","error","maxImageWidth","maxImageHeight","uploadSoundSupport","draggable","actions","dragHandle","dragDisabled","changeContent","errorText","changeCategoryCount","React","Component","PropTypes","object","isRequired","string","func","number","shape","add","styles","theme","padding","justifyContent","spacing","unit","overflow","cursor","fontSize","color","paddingBottom","StyledChoice","spec","beginDrag","out","id","endDrag","monitor","didDrop","item","getItem","categoryId","onRemoveChoice","DraggableChoice","uid","connect","dragSource","dragPreview","isDragging","withUid"],"mappings":"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","sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\nimport { withStyles } from '@material-ui/core/styles';\nimport classNames from 'classnames';\nimport Card from '@material-ui/core/Card';\nimport CardActions from '@material-ui/core/CardActions';\nimport InputHeader from '../input-header';\nimport { Checkbox } from '@pie-lib/config-ui';\nimport { DeleteButton } from '../buttons';\nimport DragHandle from '@material-ui/icons/DragHandle';\nimport { DragSource } from 'react-dnd';\nimport debug from 'debug';\nimport { uid } from '@pie-lib/drag';\n\nconst log = debug('@pie-element:categorize:configure:choice');\n\nconst canDrag = props => {\n const count = props.choice.categoryCount || 0;\n if (count === 0) {\n return true;\n } else {\n return props.correctResponseCount < count;\n }\n};\n\nexport class Choice extends React.Component {\n static propTypes = {\n classes: PropTypes.object.isRequired,\n className: PropTypes.string,\n choice: PropTypes.object.isRequired,\n onChange: PropTypes.func.isRequired,\n onDelete: PropTypes.func.isRequired,\n connectDragSource: PropTypes.func.isRequired,\n connectDragPreview: PropTypes.func.isRequired,\n correctResponseCount: PropTypes.number.isRequired,\n imageSupport: PropTypes.shape({\n add: PropTypes.func.isRequired,\n delete: PropTypes.func.isRequired\n }),\n toolbarOpts: PropTypes.object,\n error: PropTypes.string,\n uploadSoundSupport: PropTypes.shape({\n add: PropTypes.func.isRequired,\n delete: PropTypes.func.isRequired\n })\n };\n\n static defaultProps = {};\n\n changeContent = content => {\n const { onChange, choice } = this.props;\n choice.content = content;\n onChange(choice);\n };\n\n changeCategoryCount = () => {\n const { onChange, choice } = this.props;\n if (choice.categoryCount === 1) {\n choice.categoryCount = 0;\n } else {\n choice.categoryCount = 1;\n }\n onChange(choice);\n };\n\n render() {\n const {\n classes,\n className,\n choice,\n onDelete,\n connectDragSource,\n connectDragPreview,\n imageSupport,\n spellCheck,\n toolbarOpts,\n error,\n maxImageWidth,\n maxImageHeight,\n uploadSoundSupport\n } = this.props;\n\n const draggable = canDrag(this.props);\n\n return (\n <Card className={classNames(classes.choice, className)}>\n <CardActions className={classes.actions}>\n {connectDragSource(\n <span\n className={classNames(\n classes.dragHandle,\n draggable === false && classes.dragDisabled\n )}\n >\n <DragHandle color={draggable ? 'primary' : 'disabled'} />\n </span>\n )}\n </CardActions>\n {connectDragPreview(\n <span>\n <InputHeader\n imageSupport={imageSupport}\n label={choice.content}\n onChange={this.changeContent}\n onDelete={onDelete}\n toolbarOpts={toolbarOpts}\n spellCheck={spellCheck}\n error={error}\n maxImageWidth={maxImageWidth}\n maxImageHeight={maxImageHeight}\n uploadSoundSupport={uploadSoundSupport}\n />\n {error && <div className={classes.errorText}>{error}</div>}\n </span>\n )}\n\n <CardActions className={classes.actions}>\n <DeleteButton label={'delete'} onClick={onDelete} />\n <Checkbox\n mini\n label={'Remove after placing'}\n checked={choice.categoryCount === 1}\n onChange={this.changeCategoryCount}\n />\n </CardActions>\n </Card>\n );\n }\n}\nconst styles = theme => ({\n actions: {\n padding: 0,\n justifyContent: 'space-between'\n },\n choice: {\n padding: theme.spacing.unit,\n overflow: 'visible'\n },\n dragHandle: {\n cursor: 'move'\n },\n dragDisabled: {\n cursor: 'inherit'\n },\n errorText: {\n fontSize: '11px',\n color: 'red',\n paddingBottom: '5px'\n },\n});\n\nconst StyledChoice = withStyles(styles)(Choice);\n\nexport const spec = {\n canDrag,\n beginDrag: props => {\n const out = {\n id: props.choice.id\n };\n log('[beginDrag] out:', out);\n return out;\n },\n endDrag: (props, monitor) => {\n if (!monitor.didDrop()) {\n const item = monitor.getItem();\n if (item.categoryId) {\n log('wasnt droppped - what to do?');\n props.onRemoveChoice(item);\n }\n }\n }\n};\n\nconst DraggableChoice = DragSource(\n ({ uid }) => uid,\n spec,\n (connect, monitor) => ({\n connectDragSource: connect.dragSource(),\n connectDragPreview: connect.dragPreview(),\n isDragging: monitor.isDragging()\n })\n)(StyledChoice);\n\nexport default uid.withUid(DraggableChoice);\n"],"file":"choice.js"}
|
|
1
|
+
{"version":3,"sources":["../../../src/design/choices/choice.jsx"],"names":["log","canDrag","props","count","choice","categoryCount","correctResponseCount","Choice","content","onChange","allowMultiplePlacements","multiplePlacements","perChoice","classes","className","onDelete","connectDragSource","connectDragPreview","imageSupport","spellCheck","toolbarOpts","error","maxImageWidth","maxImageHeight","uploadSoundSupport","draggable","showRemoveAfterPlacing","isCheckboxShown","actions","dragHandle","dragDisabled","changeContent","errorText","changeCategoryCount","React","Component","PropTypes","string","object","isRequired","func","number","shape","add","styles","theme","padding","justifyContent","spacing","unit","overflow","cursor","fontSize","color","paddingBottom","StyledChoice","spec","beginDrag","out","id","endDrag","monitor","didDrop","item","getItem","categoryId","onRemoveChoice","DraggableChoice","uid","connect","dragSource","dragPreview","isDragging","withUid"],"mappings":"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","sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\nimport { withStyles } from '@material-ui/core/styles';\nimport classNames from 'classnames';\nimport Card from '@material-ui/core/Card';\nimport CardActions from '@material-ui/core/CardActions';\nimport InputHeader from '../input-header';\nimport { Checkbox } from '@pie-lib/config-ui';\nimport { DeleteButton } from '../buttons';\nimport DragHandle from '@material-ui/icons/DragHandle';\nimport { DragSource } from 'react-dnd';\nimport debug from 'debug';\nimport { uid } from '@pie-lib/drag';\nimport { multiplePlacements } from '../../utils';\n\nconst log = debug('@pie-element:categorize:configure:choice');\n\nconst canDrag = props => {\n const count = props.choice.categoryCount || 0;\n if (count === 0) {\n return true;\n } else {\n return props.correctResponseCount < count;\n }\n};\n\nexport class Choice extends React.Component {\n static propTypes = {\n allowMultiplePlacements: PropTypes.string,\n classes: PropTypes.object.isRequired,\n className: PropTypes.string,\n choice: PropTypes.object.isRequired,\n onChange: PropTypes.func.isRequired,\n onDelete: PropTypes.func.isRequired,\n connectDragSource: PropTypes.func.isRequired,\n connectDragPreview: PropTypes.func.isRequired,\n correctResponseCount: PropTypes.number.isRequired,\n imageSupport: PropTypes.shape({\n add: PropTypes.func.isRequired,\n delete: PropTypes.func.isRequired\n }),\n toolbarOpts: PropTypes.object,\n error: PropTypes.string,\n uploadSoundSupport: PropTypes.shape({\n add: PropTypes.func.isRequired,\n delete: PropTypes.func.isRequired\n })\n };\n\n static defaultProps = {};\n\n changeContent = content => {\n const { onChange, choice } = this.props;\n choice.content = content;\n onChange(choice);\n };\n\n changeCategoryCount = () => {\n const { onChange, choice } = this.props;\n if (choice.categoryCount === 1) {\n choice.categoryCount = 0;\n } else {\n choice.categoryCount = 1;\n }\n onChange(choice);\n };\n\n isCheckboxShown = allowMultiplePlacements => allowMultiplePlacements === multiplePlacements.perChoice;\n\n render() {\n const {\n allowMultiplePlacements,\n classes,\n className,\n choice,\n onDelete,\n connectDragSource,\n connectDragPreview,\n imageSupport,\n spellCheck,\n toolbarOpts,\n error,\n maxImageWidth,\n maxImageHeight,\n uploadSoundSupport\n } = this.props;\n\n const draggable = canDrag(this.props);\n\n const showRemoveAfterPlacing = this.isCheckboxShown(allowMultiplePlacements);\n\n return (\n <Card className={classNames(classes.choice, className)}>\n <CardActions className={classes.actions}>\n {connectDragSource(\n <span\n className={classNames(\n classes.dragHandle,\n draggable === false && classes.dragDisabled\n )}\n >\n <DragHandle color={draggable ? 'primary' : 'disabled'} />\n </span>\n )}\n </CardActions>\n {connectDragPreview(\n <span>\n <InputHeader\n imageSupport={imageSupport}\n label={choice.content}\n onChange={this.changeContent}\n onDelete={onDelete}\n toolbarOpts={toolbarOpts}\n spellCheck={spellCheck}\n error={error}\n maxImageWidth={maxImageWidth}\n maxImageHeight={maxImageHeight}\n uploadSoundSupport={uploadSoundSupport}\n />\n {error && <div className={classes.errorText}>{error}</div>}\n </span>\n )}\n\n <CardActions className={classes.actions}>\n <DeleteButton label={'delete'} onClick={onDelete} />\n {showRemoveAfterPlacing &&\n <Checkbox\n mini\n label={'Remove after placing'}\n checked={choice.categoryCount === 1}\n onChange={this.changeCategoryCount} />\n }\n </CardActions>\n </Card>\n );\n }\n}\nconst styles = theme => ({\n actions: {\n padding: 0,\n justifyContent: 'space-between'\n },\n choice: {\n padding: theme.spacing.unit,\n overflow: 'visible'\n },\n dragHandle: {\n cursor: 'move'\n },\n dragDisabled: {\n cursor: 'inherit'\n },\n errorText: {\n fontSize: '11px',\n color: 'red',\n paddingBottom: '5px'\n },\n});\n\nconst StyledChoice = withStyles(styles)(Choice);\n\nexport const spec = {\n canDrag,\n beginDrag: props => {\n const out = {\n id: props.choice.id\n };\n log('[beginDrag] out:', out);\n return out;\n },\n endDrag: (props, monitor) => {\n if (!monitor.didDrop()) {\n const item = monitor.getItem();\n if (item.categoryId) {\n log('wasnt droppped - what to do?');\n props.onRemoveChoice(item);\n }\n }\n }\n};\n\nconst DraggableChoice = DragSource(\n ({ uid }) => uid,\n spec,\n (connect, monitor) => ({\n connectDragSource: connect.dragSource(),\n connectDragPreview: connect.dragPreview(),\n isDragging: monitor.isDragging()\n })\n)(StyledChoice);\n\nexport default uid.withUid(DraggableChoice);\n"],"file":"choice.js"}
|
|
@@ -83,21 +83,6 @@ var Config = /*#__PURE__*/function (_React$Component) {
|
|
|
83
83
|
(0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "state", {
|
|
84
84
|
anchorEl: null
|
|
85
85
|
});
|
|
86
|
-
(0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "toggleRemoveAllTiles", function () {
|
|
87
|
-
var _this$props = _this.props,
|
|
88
|
-
config = _this$props.config,
|
|
89
|
-
onModelChanged = _this$props.onModelChanged;
|
|
90
|
-
|
|
91
|
-
var allAtOne = _this.props.allChoicesHaveCount(1);
|
|
92
|
-
|
|
93
|
-
var update = config.choices.map(function (c) {
|
|
94
|
-
c.categoryCount = allAtOne ? 0 : 1;
|
|
95
|
-
return c;
|
|
96
|
-
});
|
|
97
|
-
onModelChanged({
|
|
98
|
-
choices: update
|
|
99
|
-
});
|
|
100
|
-
});
|
|
101
86
|
(0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "changeLabel", function (_ref) {
|
|
102
87
|
var target = _ref.target;
|
|
103
88
|
|
|
@@ -105,11 +90,6 @@ var Config = /*#__PURE__*/function (_React$Component) {
|
|
|
105
90
|
choicesLabel: target.value
|
|
106
91
|
});
|
|
107
92
|
});
|
|
108
|
-
(0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "toggleShuffle", function () {
|
|
109
|
-
_this.props.onModelChanged({
|
|
110
|
-
lockChoiceOrder: !_this.props.config.lockChoiceOrder
|
|
111
|
-
});
|
|
112
|
-
});
|
|
113
93
|
(0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "changePosition", function (position) {
|
|
114
94
|
_this.props.onModelChanged({
|
|
115
95
|
choicesPosition: position.value
|
|
@@ -144,28 +124,18 @@ var Config = /*#__PURE__*/function (_React$Component) {
|
|
|
144
124
|
var _this2 = this;
|
|
145
125
|
|
|
146
126
|
var anchorEl = this.state.anchorEl;
|
|
147
|
-
var _this$
|
|
148
|
-
classes = _this$
|
|
149
|
-
className = _this$
|
|
150
|
-
categoryCountIsOne = _this$
|
|
151
|
-
config = _this$
|
|
152
|
-
spellCheck = _this$
|
|
127
|
+
var _this$props = this.props,
|
|
128
|
+
classes = _this$props.classes,
|
|
129
|
+
className = _this$props.className,
|
|
130
|
+
categoryCountIsOne = _this$props.categoryCountIsOne,
|
|
131
|
+
config = _this$props.config,
|
|
132
|
+
spellCheck = _this$props.spellCheck;
|
|
153
133
|
var positionOption = positionOptions.find(function (option) {
|
|
154
134
|
return option.value === config.choicesPosition;
|
|
155
135
|
}) || positionOption[1];
|
|
156
136
|
return /*#__PURE__*/_react["default"].createElement("div", {
|
|
157
137
|
className: (0, _classnames["default"])(classes.config, className)
|
|
158
138
|
}, /*#__PURE__*/_react["default"].createElement("div", {
|
|
159
|
-
className: classes.row
|
|
160
|
-
}, /*#__PURE__*/_react["default"].createElement(_configUi.Checkbox, {
|
|
161
|
-
label: 'Remove all tiles after placing',
|
|
162
|
-
checked: categoryCountIsOne,
|
|
163
|
-
onChange: this.toggleRemoveAllTiles
|
|
164
|
-
}), /*#__PURE__*/_react["default"].createElement(_configUi.Checkbox, {
|
|
165
|
-
label: 'Lock Choice Order',
|
|
166
|
-
checked: config.lockChoiceOrder,
|
|
167
|
-
onChange: this.toggleShuffle
|
|
168
|
-
})), /*#__PURE__*/_react["default"].createElement("div", {
|
|
169
139
|
className: classes.configuration
|
|
170
140
|
}, /*#__PURE__*/_react["default"].createElement(_TextField["default"], {
|
|
171
141
|
className: classes.label,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/design/choices/config.jsx"],"names":["positionOptions","label","value","secondaryText","Config","anchorEl","props","config","onModelChanged","allAtOne","allChoicesHaveCount","update","choices","map","c","categoryCount","target","choicesLabel","lockChoiceOrder","position","choicesPosition","setState","event","currentTarget","index","selectedIndex","state","classes","className","categoryCountIsOne","spellCheck","positionOption","find","option","row","toggleRemoveAllTiles","toggleShuffle","configuration","shrink","changeLabel","handleClickPosition","Boolean","handleClose","changePosition","React","Component","PropTypes","object","isRequired","string","bool","func","styles","theme","display","alignItems","gridColumnGap","spacing","unit","gridRowGap","gridTemplateColumns","justifyContent","marginBottom","choiceConfig","width","maxWidth","backgroundColor","palette","background","paper","marginTop","shuffleCheckbox","gridColumnStart","gridColumnEnd"],"mappings":"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","sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\nimport { withStyles } from '@material-ui/core/styles';\nimport classNames from 'classnames';\n\nimport TextField from '@material-ui/core/TextField';\nimport List from '@material-ui/core/List';\nimport ListItem from '@material-ui/core/ListItem';\nimport ListItemText from '@material-ui/core/ListItemText';\nimport MenuItem from '@material-ui/core/MenuItem';\nimport Menu from '@material-ui/core/Menu';\nimport { Checkbox } from '@pie-lib/config-ui';\n\nconst positionOptions = [\n {\n label: 'Above',\n value: 'above',\n secondaryText: 'Choices will be shown above categories'\n },\n {\n label: 'Below',\n value: 'below',\n secondaryText: 'Choices will be shown below categories'\n },\n {\n label: 'Left',\n value: 'left',\n secondaryText: 'Choices will be shown to the left of the categories'\n },\n {\n label: 'Right',\n value: 'right',\n secondaryText: 'Choices will be shown to the right of the categories'\n }\n];\n\nexport class Config extends React.Component {\n static propTypes = {\n classes: PropTypes.object.isRequired,\n className: PropTypes.string,\n config: PropTypes.object,\n categoryCountIsOne: PropTypes.bool,\n allChoicesHaveCount: PropTypes.func,\n onModelChanged: PropTypes.func\n };\n\n static defaultProps = {};\n\n state = {\n anchorEl: null\n };\n\n toggleRemoveAllTiles = () => {\n const { config, onModelChanged } = this.props;\n\n const allAtOne = this.props.allChoicesHaveCount(1);\n const update = config.choices.map(c => {\n c.categoryCount = allAtOne ? 0 : 1;\n return c;\n });\n\n onModelChanged({ choices: update });\n };\n\n changeLabel = ({ target }) => {\n this.props.onModelChanged({ choicesLabel: target.value });\n };\n\n toggleShuffle = () => {\n this.props.onModelChanged({\n lockChoiceOrder: !this.props.config.lockChoiceOrder\n });\n };\n\n changePosition = position => {\n this.props.onModelChanged({ choicesPosition: position.value });\n\n this.setState({ anchorEl: null });\n };\n\n handleClickPosition = event => {\n this.setState({ anchorEl: event.currentTarget });\n };\n\n handleMenuItemClick = (event, index) => {\n this.setState({ selectedIndex: index, anchorEl: null });\n };\n\n handleClose = () => {\n this.setState({ anchorEl: null });\n };\n\n render() {\n const { anchorEl } = this.state;\n const { classes, className, categoryCountIsOne, config, spellCheck} = this.props;\n\n const positionOption =\n positionOptions.find(option => option.value === config.choicesPosition) ||\n positionOption[1];\n\n return (\n <div className={classNames(classes.config, className)}>\n <div className={classes.row}>\n <Checkbox\n label={'Remove all tiles after placing'}\n checked={categoryCountIsOne}\n onChange={this.toggleRemoveAllTiles}\n />\n <Checkbox\n label={'Lock Choice Order'}\n checked={config.lockChoiceOrder}\n onChange={this.toggleShuffle}\n />\n </div>\n\n <div className={classes.configuration}>\n <TextField\n className={classes.label}\n InputLabelProps={{\n shrink: true\n }}\n label=\"Label\"\n value={config.choicesLabel}\n onChange={this.changeLabel}\n spellCheck={spellCheck}\n />\n <List component=\"nav\">\n <ListItem\n button\n aria-haspopup=\"true\"\n onClick={this.handleClickPosition}\n >\n <ListItemText\n primary=\"Choices Position\"\n secondary={positionOption.secondaryText}\n />\n </ListItem>\n </List>\n <Menu\n id=\"lock-menu\"\n anchorEl={anchorEl}\n open={Boolean(anchorEl)}\n onClose={this.handleClose}\n >\n {positionOptions.map(option => (\n <MenuItem\n key={option.value}\n selected={option.value === config.choicesPosition}\n onClick={() => this.changePosition(option)}\n >\n {option.label}\n </MenuItem>\n ))}\n </Menu>\n </div>\n </div>\n );\n }\n}\nconst styles = theme => ({\n configuration: {\n display: 'grid',\n alignItems: 'center',\n gridColumnGap: `${theme.spacing.unit}px`,\n gridRowGap: `${theme.spacing.unit}px`,\n gridTemplateColumns: 'repeat(2, 1fr)',\n justifyContent: 'space-between',\n marginBottom: theme.spacing.unit\n },\n choiceConfig: {\n width: '100%',\n maxWidth: 360,\n backgroundColor: theme.palette.background.paper\n },\n row: {\n display: 'grid',\n gridColumnGap: `${theme.spacing.unit}px`,\n gridRowGap: `${theme.spacing.unit}px`,\n gridTemplateColumns: 'repeat(2, 1fr)',\n justifyContent: 'space-between',\n marginTop: theme.spacing.unit,\n marginBottom: theme.spacing.unit\n },\n shuffleCheckbox: {\n gridColumnStart: 2,\n gridColumnEnd: 2\n }\n});\nexport default withStyles(styles)(Config);\n"],"file":"config.js"}
|
|
1
|
+
{"version":3,"sources":["../../../src/design/choices/config.jsx"],"names":["positionOptions","label","value","secondaryText","Config","anchorEl","target","props","onModelChanged","choicesLabel","position","choicesPosition","setState","event","currentTarget","index","selectedIndex","state","classes","className","categoryCountIsOne","config","spellCheck","positionOption","find","option","configuration","shrink","changeLabel","handleClickPosition","Boolean","handleClose","map","changePosition","React","Component","PropTypes","object","isRequired","string","bool","allChoicesHaveCount","func","styles","theme","display","alignItems","gridColumnGap","spacing","unit","gridRowGap","gridTemplateColumns","justifyContent","marginBottom","choiceConfig","width","maxWidth","backgroundColor","palette","background","paper","row","marginTop","shuffleCheckbox","gridColumnStart","gridColumnEnd"],"mappings":"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","sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\nimport { withStyles } from '@material-ui/core/styles';\nimport classNames from 'classnames';\n\nimport TextField from '@material-ui/core/TextField';\nimport List from '@material-ui/core/List';\nimport ListItem from '@material-ui/core/ListItem';\nimport ListItemText from '@material-ui/core/ListItemText';\nimport MenuItem from '@material-ui/core/MenuItem';\nimport Menu from '@material-ui/core/Menu';\nimport { Checkbox } from '@pie-lib/config-ui';\n\nconst positionOptions = [\n {\n label: 'Above',\n value: 'above',\n secondaryText: 'Choices will be shown above categories'\n },\n {\n label: 'Below',\n value: 'below',\n secondaryText: 'Choices will be shown below categories'\n },\n {\n label: 'Left',\n value: 'left',\n secondaryText: 'Choices will be shown to the left of the categories'\n },\n {\n label: 'Right',\n value: 'right',\n secondaryText: 'Choices will be shown to the right of the categories'\n }\n];\n\nexport class Config extends React.Component {\n static propTypes = {\n classes: PropTypes.object.isRequired,\n className: PropTypes.string,\n config: PropTypes.object,\n categoryCountIsOne: PropTypes.bool,\n allChoicesHaveCount: PropTypes.func,\n onModelChanged: PropTypes.func\n };\n\n static defaultProps = {};\n\n state = {\n anchorEl: null\n };\n\n changeLabel = ({ target }) => {\n this.props.onModelChanged({ choicesLabel: target.value });\n };\n\n changePosition = position => {\n this.props.onModelChanged({ choicesPosition: position.value });\n\n this.setState({ anchorEl: null });\n };\n\n handleClickPosition = event => {\n this.setState({ anchorEl: event.currentTarget });\n };\n\n handleMenuItemClick = (event, index) => {\n this.setState({ selectedIndex: index, anchorEl: null });\n };\n\n handleClose = () => {\n this.setState({ anchorEl: null });\n };\n\n render() {\n const { anchorEl } = this.state;\n const { classes, className, categoryCountIsOne, config, spellCheck} = this.props;\n\n const positionOption =\n positionOptions.find(option => option.value === config.choicesPosition) ||\n positionOption[1];\n\n return (\n <div className={classNames(classes.config, className)}>\n <div className={classes.configuration}>\n <TextField\n className={classes.label}\n InputLabelProps={{\n shrink: true\n }}\n label=\"Label\"\n value={config.choicesLabel}\n onChange={this.changeLabel}\n spellCheck={spellCheck}\n />\n <List component=\"nav\">\n <ListItem\n button\n aria-haspopup=\"true\"\n onClick={this.handleClickPosition}\n >\n <ListItemText\n primary=\"Choices Position\"\n secondary={positionOption.secondaryText}\n />\n </ListItem>\n </List>\n <Menu\n id=\"lock-menu\"\n anchorEl={anchorEl}\n open={Boolean(anchorEl)}\n onClose={this.handleClose}\n >\n {positionOptions.map(option => (\n <MenuItem\n key={option.value}\n selected={option.value === config.choicesPosition}\n onClick={() => this.changePosition(option)}\n >\n {option.label}\n </MenuItem>\n ))}\n </Menu>\n </div>\n </div>\n );\n }\n}\nconst styles = theme => ({\n configuration: {\n display: 'grid',\n alignItems: 'center',\n gridColumnGap: `${theme.spacing.unit}px`,\n gridRowGap: `${theme.spacing.unit}px`,\n gridTemplateColumns: 'repeat(2, 1fr)',\n justifyContent: 'space-between',\n marginBottom: theme.spacing.unit\n },\n choiceConfig: {\n width: '100%',\n maxWidth: 360,\n backgroundColor: theme.palette.background.paper\n },\n row: {\n display: 'grid',\n gridColumnGap: `${theme.spacing.unit}px`,\n gridRowGap: `${theme.spacing.unit}px`,\n gridTemplateColumns: 'repeat(2, 1fr)',\n justifyContent: 'space-between',\n marginTop: theme.spacing.unit,\n marginBottom: theme.spacing.unit\n },\n shuffleCheckbox: {\n gridColumnStart: 2,\n gridColumnEnd: 2\n }\n});\nexport default withStyles(styles)(Config);\n"],"file":"config.js"}
|
|
@@ -135,7 +135,8 @@ var Choices = /*#__PURE__*/function (_React$Component) {
|
|
|
135
135
|
configuration = _this$props4.configuration,
|
|
136
136
|
defaultImageMaxWidth = _this$props4.defaultImageMaxWidth,
|
|
137
137
|
defaultImageMaxHeight = _this$props4.defaultImageMaxHeight;
|
|
138
|
-
var errors = model.errors
|
|
138
|
+
var errors = model.errors,
|
|
139
|
+
allowMultiplePlacementsEnabled = model.allowMultiplePlacementsEnabled;
|
|
139
140
|
|
|
140
141
|
var _ref = errors || {},
|
|
141
142
|
choicesError = _ref.choicesError,
|
|
@@ -174,6 +175,7 @@ var Choices = /*#__PURE__*/function (_React$Component) {
|
|
|
174
175
|
return /*#__PURE__*/_react["default"].createElement(_choice["default"], {
|
|
175
176
|
choice: h,
|
|
176
177
|
correctResponseCount: h.correctResponseCount,
|
|
178
|
+
allowMultiplePlacements: allowMultiplePlacementsEnabled,
|
|
177
179
|
key: index,
|
|
178
180
|
imageSupport: imageSupport,
|
|
179
181
|
onChange: _this2.changeChoice,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/design/choices/index.jsx"],"names":["Choices","choice","props","choices","onModelChanged","index","findIndex","h","id","splice","count","c","categoryCount","model","utils","firstAvailableIndex","map","a","data","content","concat","correctResponse","classes","className","imageSupport","uploadSoundSupport","spellCheck","toolbarOpts","configuration","defaultImageMaxWidth","defaultImageMaxHeight","errors","choicesError","choicesErrors","maxChoices","maxImageWidth","maxImageHeight","categoryCountIsOne","allChoicesHaveCount","choiceHolderStyle","gridTemplateColumns","categoriesPerRow","addChoice","length","errorText","choiceHolder","correctResponseCount","changeChoice","deleteChoice","React","Component","PropTypes","object","isRequired","string","array","func","shape","add","styles","theme","paddingTop","spacing","unit","paddingBottom","display","gridRowGap","gridColumnGap","label","fontSize","color","padding"],"mappings":"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","sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\nimport { withStyles } from '@material-ui/core/styles';\nimport { Divider } from '../buttons';\nimport classNames from 'classnames';\nimport Choice from './choice';\nimport Header from '../header';\nimport every from 'lodash/every';\nimport Config from './config';\nimport { choiceUtils as utils } from '@pie-lib/config-ui';\nimport { removeAllChoices } from '@pie-lib/categorize';\n\nexport class Choices extends React.Component {\n static propTypes = {\n model: PropTypes.object.isRequired,\n configuration: PropTypes.object.isRequired,\n classes: PropTypes.object.isRequired,\n className: PropTypes.string,\n choices: PropTypes.array.isRequired,\n onModelChanged: PropTypes.func.isRequired,\n imageSupport: PropTypes.shape({\n add: PropTypes.func.isRequired,\n delete: PropTypes.func.isRequired\n }),\n uploadSoundSupport: PropTypes.shape({\n add: PropTypes.func.isRequired,\n delete: PropTypes.func.isRequired\n }),\n toolbarOpts: PropTypes.object\n };\n\n static defaultProps = {};\n\n changeChoice = choice => {\n const { choices, onModelChanged } = this.props;\n const index = choices.findIndex(h => h.id === choice.id);\n if (index !== -1) {\n choices.splice(index, 1, choice);\n onModelChanged({ choices });\n }\n };\n\n allChoicesHaveCount = count => {\n const { choices } = this.props;\n return every(choices, c => c.categoryCount === count);\n };\n\n addChoice = () => {\n const { onModelChanged, model } = this.props;\n\n const id = utils.firstAvailableIndex(model.choices.map(a => a.id), 0);\n const data = { id, content: 'Choice ' + id };\n\n onModelChanged({ choices: model.choices.concat([data]) });\n };\n\n deleteChoice = choice => {\n const { model, onModelChanged } = this.props;\n const index = model.choices.findIndex(a => a.id === choice.id);\n if (index !== -1) {\n model.choices.splice(index, 1);\n model.correctResponse = removeAllChoices(\n choice.id,\n model.correctResponse\n );\n onModelChanged(model);\n }\n };\n\n render() {\n const {\n classes,\n className,\n choices,\n model,\n imageSupport,\n uploadSoundSupport,\n onModelChanged,\n spellCheck,\n toolbarOpts,\n configuration,\n defaultImageMaxWidth,\n defaultImageMaxHeight\n } = this.props;\n const { errors } = model;\n const { choicesError, choicesErrors } = errors || {};\n const {\n maxChoices,\n maxImageWidth = {},\n maxImageHeight = {},\n } = configuration || {};\n\n const categoryCountIsOne = this.allChoicesHaveCount(1);\n const choiceHolderStyle = {\n gridTemplateColumns: `repeat(${model.categoriesPerRow}, 1fr)`\n };\n\n return (\n <div className={classNames(classes.choices, className)}>\n <Header\n label=\"Choices\"\n buttonLabel=\"ADD A CHOICE\"\n onAdd={this.addChoice}\n buttonDisabled={maxChoices && choices && maxChoices === choices.length}\n />\n {choicesError && <div className={classes.errorText}>{choicesError}</div>}\n <Config\n config={model}\n categoryCountIsOne={categoryCountIsOne}\n onModelChanged={onModelChanged}\n allChoicesHaveCount={this.allChoicesHaveCount}\n spellCheck={spellCheck}\n />\n <div className={classes.choiceHolder} style={choiceHolderStyle}>\n {choices.map((h, index) => (\n <Choice\n choice={h}\n correctResponseCount={h.correctResponseCount}\n key={index}\n imageSupport={imageSupport}\n onChange={this.changeChoice}\n onDelete={() => this.deleteChoice(h)}\n toolbarOpts={toolbarOpts}\n spellCheck={spellCheck}\n error={choicesErrors && choicesErrors[h.id]}\n maxImageWidth={maxImageWidth && maxImageWidth.choice || defaultImageMaxWidth}\n maxImageHeight={maxImageHeight && maxImageHeight.choice || defaultImageMaxHeight}\n uploadSoundSupport={uploadSoundSupport}\n />\n ))}\n </div>\n <Divider />\n </div>\n );\n }\n}\nconst styles = theme => ({\n choiceHolder: {\n paddingTop: theme.spacing.unit,\n paddingBottom: theme.spacing.unit,\n display: 'grid',\n gridRowGap: `${theme.spacing.unit}px`,\n gridColumnGap: `${theme.spacing.unit}px`\n },\n choices: {\n paddingTop: theme.spacing.unit * 2,\n paddingBottom: theme.spacing.unit * 2\n },\n label: {},\n errorText: {\n fontSize: '12px',\n color: 'red',\n padding: '5px 0'\n },\n});\nexport default withStyles(styles)(Choices);\n"],"file":"index.js"}
|
|
1
|
+
{"version":3,"sources":["../../../src/design/choices/index.jsx"],"names":["Choices","choice","props","choices","onModelChanged","index","findIndex","h","id","splice","count","c","categoryCount","model","utils","firstAvailableIndex","map","a","data","content","concat","correctResponse","classes","className","imageSupport","uploadSoundSupport","spellCheck","toolbarOpts","configuration","defaultImageMaxWidth","defaultImageMaxHeight","errors","allowMultiplePlacementsEnabled","choicesError","choicesErrors","maxChoices","maxImageWidth","maxImageHeight","categoryCountIsOne","allChoicesHaveCount","choiceHolderStyle","gridTemplateColumns","categoriesPerRow","addChoice","length","errorText","choiceHolder","correctResponseCount","changeChoice","deleteChoice","React","Component","PropTypes","object","isRequired","string","array","func","shape","add","styles","theme","paddingTop","spacing","unit","paddingBottom","display","gridRowGap","gridColumnGap","label","fontSize","color","padding"],"mappings":"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","sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\nimport { withStyles } from '@material-ui/core/styles';\nimport { Divider } from '../buttons';\nimport classNames from 'classnames';\nimport Choice from './choice';\nimport Header from '../header';\nimport every from 'lodash/every';\nimport Config from './config';\nimport { choiceUtils as utils } from '@pie-lib/config-ui';\nimport { removeAllChoices } from '@pie-lib/categorize';\n\nexport class Choices extends React.Component {\n static propTypes = {\n model: PropTypes.object.isRequired,\n configuration: PropTypes.object.isRequired,\n classes: PropTypes.object.isRequired,\n className: PropTypes.string,\n choices: PropTypes.array.isRequired,\n onModelChanged: PropTypes.func.isRequired,\n imageSupport: PropTypes.shape({\n add: PropTypes.func.isRequired,\n delete: PropTypes.func.isRequired\n }),\n uploadSoundSupport: PropTypes.shape({\n add: PropTypes.func.isRequired,\n delete: PropTypes.func.isRequired\n }),\n toolbarOpts: PropTypes.object\n };\n\n static defaultProps = {};\n\n changeChoice = choice => {\n const { choices, onModelChanged } = this.props;\n const index = choices.findIndex(h => h.id === choice.id);\n if (index !== -1) {\n choices.splice(index, 1, choice);\n onModelChanged({ choices });\n }\n };\n\n allChoicesHaveCount = count => {\n const { choices } = this.props;\n return every(choices, c => c.categoryCount === count);\n };\n\n addChoice = () => {\n const { onModelChanged, model } = this.props;\n\n const id = utils.firstAvailableIndex(model.choices.map(a => a.id), 0);\n const data = { id, content: 'Choice ' + id };\n\n onModelChanged({ choices: model.choices.concat([data]) });\n };\n\n deleteChoice = choice => {\n const { model, onModelChanged } = this.props;\n const index = model.choices.findIndex(a => a.id === choice.id);\n if (index !== -1) {\n model.choices.splice(index, 1);\n model.correctResponse = removeAllChoices(\n choice.id,\n model.correctResponse\n );\n onModelChanged(model);\n }\n };\n\n render() {\n const {\n classes,\n className,\n choices,\n model,\n imageSupport,\n uploadSoundSupport,\n onModelChanged,\n spellCheck,\n toolbarOpts,\n configuration,\n defaultImageMaxWidth,\n defaultImageMaxHeight\n } = this.props;\n const { errors, allowMultiplePlacementsEnabled } = model;\n const { choicesError, choicesErrors } = errors || {};\n const {\n maxChoices,\n maxImageWidth = {},\n maxImageHeight = {},\n } = configuration || {};\n\n const categoryCountIsOne = this.allChoicesHaveCount(1);\n const choiceHolderStyle = {\n gridTemplateColumns: `repeat(${model.categoriesPerRow}, 1fr)`\n };\n\n return (\n <div className={classNames(classes.choices, className)}>\n <Header\n label=\"Choices\"\n buttonLabel=\"ADD A CHOICE\"\n onAdd={this.addChoice}\n buttonDisabled={maxChoices && choices && maxChoices === choices.length}\n />\n {choicesError && <div className={classes.errorText}>{choicesError}</div>}\n <Config\n config={model}\n categoryCountIsOne={categoryCountIsOne}\n onModelChanged={onModelChanged}\n allChoicesHaveCount={this.allChoicesHaveCount}\n spellCheck={spellCheck}\n />\n <div className={classes.choiceHolder} style={choiceHolderStyle}>\n {choices.map((h, index) => (\n <Choice\n choice={h}\n correctResponseCount={h.correctResponseCount}\n allowMultiplePlacements={allowMultiplePlacementsEnabled}\n key={index}\n imageSupport={imageSupport}\n onChange={this.changeChoice}\n onDelete={() => this.deleteChoice(h)}\n toolbarOpts={toolbarOpts}\n spellCheck={spellCheck}\n error={choicesErrors && choicesErrors[h.id]}\n maxImageWidth={maxImageWidth && maxImageWidth.choice || defaultImageMaxWidth}\n maxImageHeight={maxImageHeight && maxImageHeight.choice || defaultImageMaxHeight}\n uploadSoundSupport={uploadSoundSupport}\n />\n ))}\n </div>\n <Divider />\n </div>\n );\n }\n}\nconst styles = theme => ({\n choiceHolder: {\n paddingTop: theme.spacing.unit,\n paddingBottom: theme.spacing.unit,\n display: 'grid',\n gridRowGap: `${theme.spacing.unit}px`,\n gridColumnGap: `${theme.spacing.unit}px`\n },\n choices: {\n paddingTop: theme.spacing.unit * 2,\n paddingBottom: theme.spacing.unit * 2\n },\n label: {},\n errorText: {\n fontSize: '12px',\n color: 'red',\n padding: '5px 0'\n },\n});\nexport default withStyles(styles)(Choices);\n"],"file":"index.js"}
|
|
@@ -51,6 +51,8 @@ var _builder = require("./builder");
|
|
|
51
51
|
|
|
52
52
|
var _header = _interopRequireDefault(require("./header"));
|
|
53
53
|
|
|
54
|
+
var _utils = require("../utils");
|
|
55
|
+
|
|
54
56
|
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
|
|
55
57
|
|
|
56
58
|
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { (0, _defineProperty2["default"])(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
|
|
@@ -59,9 +61,11 @@ function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflec
|
|
|
59
61
|
|
|
60
62
|
function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
|
|
61
63
|
|
|
62
|
-
var
|
|
64
|
+
var dropdown = _configUi.settings.dropdown,
|
|
65
|
+
Panel = _configUi.settings.Panel,
|
|
63
66
|
toggle = _configUi.settings.toggle,
|
|
64
|
-
radio = _configUi.settings.radio
|
|
67
|
+
radio = _configUi.settings.radio,
|
|
68
|
+
numberField = _configUi.settings.numberField;
|
|
65
69
|
var IdProvider = _drag.uid.Provider;
|
|
66
70
|
|
|
67
71
|
var Design = /*#__PURE__*/function (_React$Component) {
|
|
@@ -153,6 +157,17 @@ var Design = /*#__PURE__*/function (_React$Component) {
|
|
|
153
157
|
var model = _this.props.model;
|
|
154
158
|
return (0, _categorize.countInAnswer)(choice.id, model.correctResponse);
|
|
155
159
|
});
|
|
160
|
+
(0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "checkAllowMultiplePlacements", function (allowMultiplePlacements, c) {
|
|
161
|
+
if (allowMultiplePlacements === _utils.multiplePlacements.enabled) {
|
|
162
|
+
return 0;
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
if (allowMultiplePlacements === _utils.multiplePlacements.disabled) {
|
|
166
|
+
return 1;
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
return c.categoryCount || 0;
|
|
170
|
+
});
|
|
156
171
|
_this.uid = _props.uid || _drag.uid.generateId();
|
|
157
172
|
return _this;
|
|
158
173
|
}
|
|
@@ -173,10 +188,14 @@ var Design = /*#__PURE__*/function (_React$Component) {
|
|
|
173
188
|
onConfigurationChanged = _this$props4.onConfigurationChanged;
|
|
174
189
|
|
|
175
190
|
var _ref = configuration || {},
|
|
191
|
+
_ref$allowMultiplePla = _ref.allowMultiplePlacements,
|
|
192
|
+
allowMultiplePlacements = _ref$allowMultiplePla === void 0 ? {} : _ref$allowMultiplePla,
|
|
176
193
|
_ref$partialScoring = _ref.partialScoring,
|
|
177
194
|
partialScoring = _ref$partialScoring === void 0 ? {} : _ref$partialScoring,
|
|
178
195
|
_ref$lockChoiceOrder = _ref.lockChoiceOrder,
|
|
179
196
|
lockChoiceOrder = _ref$lockChoiceOrder === void 0 ? {} : _ref$lockChoiceOrder,
|
|
197
|
+
_ref$categoriesPerRow = _ref.categoriesPerRow,
|
|
198
|
+
categoriesPerRow = _ref$categoriesPerRow === void 0 ? {} : _ref$categoriesPerRow,
|
|
180
199
|
_ref$teacherInstructi = _ref.teacherInstructions,
|
|
181
200
|
teacherInstructions = _ref$teacherInstructi === void 0 ? {} : _ref$teacherInstructi,
|
|
182
201
|
_ref$studentInstructi = _ref.studentInstructions,
|
|
@@ -199,6 +218,7 @@ var Design = /*#__PURE__*/function (_React$Component) {
|
|
|
199
218
|
withRubric = _ref$withRubric === void 0 ? {} : _ref$withRubric;
|
|
200
219
|
|
|
201
220
|
var _ref2 = model || {},
|
|
221
|
+
allowMultiplePlacementsEnabled = _ref2.allowMultiplePlacementsEnabled,
|
|
202
222
|
teacherInstructionsEnabled = _ref2.teacherInstructionsEnabled,
|
|
203
223
|
promptEnabled = _ref2.promptEnabled,
|
|
204
224
|
rationaleEnabled = _ref2.rationaleEnabled,
|
|
@@ -228,6 +248,7 @@ var Design = /*#__PURE__*/function (_React$Component) {
|
|
|
228
248
|
var alternateResponses = (0, _builder.buildAlternateResponses)(model.categories || [], model.choices || [], model.correctResponse || []);
|
|
229
249
|
var choices = model.choices.map(function (c) {
|
|
230
250
|
c.correctResponseCount = _this2.countChoiceInCorrectResponse(c);
|
|
251
|
+
c.categoryCount = _this2.checkAllowMultiplePlacements(allowMultiplePlacementsEnabled, c);
|
|
231
252
|
return c;
|
|
232
253
|
});
|
|
233
254
|
var defaultImageMaxWidth = maxImageWidth && maxImageWidth.prompt;
|
|
@@ -244,6 +265,12 @@ var Design = /*#__PURE__*/function (_React$Component) {
|
|
|
244
265
|
Settings: {
|
|
245
266
|
partialScoring: partialScoring.settings && toggle(partialScoring.label),
|
|
246
267
|
lockChoiceOrder: lockChoiceOrder.settings && toggle(lockChoiceOrder.label),
|
|
268
|
+
categoriesPerRow: categoriesPerRow.settings && numberField(categoriesPerRow.label, {
|
|
269
|
+
label: categoriesPerRow.label,
|
|
270
|
+
min: 1,
|
|
271
|
+
max: 4
|
|
272
|
+
}),
|
|
273
|
+
allowMultiplePlacementsEnabled: allowMultiplePlacements.settings && dropdown(allowMultiplePlacements.label, [_utils.multiplePlacements.enabled, _utils.multiplePlacements.disabled, _utils.multiplePlacements.perChoice]),
|
|
247
274
|
promptEnabled: prompt.settings && toggle(prompt.label),
|
|
248
275
|
feedbackEnabled: feedback.settings && toggle(feedback.label)
|
|
249
276
|
},
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/design/index.jsx"],"names":["Panel","settings","toggle","radio","IdProvider","uid","Provider","Design","props","model","onChange","updatedModel","correctResponse","choices","categories","map","c","id","label","h","content","categoryCount","rationale","teacherInstructions","feedback","updateModel","cr","alternateResponses","prompt","index","filter","alt","altIndex","choice","generateId","classes","className","imageSupport","uploadSoundSupport","configuration","onConfigurationChanged","partialScoring","lockChoiceOrder","studentInstructions","scoringType","spellCheck","maxImageWidth","maxImageHeight","withRubric","teacherInstructionsEnabled","promptEnabled","rationaleEnabled","feedbackEnabled","spellCheckEnabled","errors","rubricEnabled","toolbarOpts","toolbarEditorPosition","position","config","columns","correctResponseCount","countChoiceInCorrectResponse","defaultImageMaxWidth","defaultImageMaxHeight","Settings","Properties","studentInstructionsEnabled","design","promptHolder","onPromptChanged","language","inputHolder","input","changeTeacherInstructions","changeRationale","alternatesHeader","onAddAlternateResponse","categoriesList","onRemoveAlternateResponse","changeFeedback","React","Component","PropTypes","object","isRequired","string","func","shape","add","styles","theme","paddingTop","spacing","unit","paddingBottom","text","width","marginBottom","maxWidth","title"],"mappings":"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","sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\nimport { withStyles } from '@material-ui/core/styles';\nimport classNames from 'classnames';\nimport {\n FeedbackConfig,\n InputContainer,\n layout,\n settings,\n} from '@pie-lib/config-ui';\nimport {\n countInAnswer,\n ensureNoExtraChoicesInAnswer,\n} from '@pie-lib/categorize';\nimport EditableHtml from '@pie-lib/editable-html';\nimport { uid, withDragContext } from '@pie-lib/drag';\n\nimport Categories from './categories';\nimport AlternateResponses from './categories/alternateResponses';\nimport Choices from './choices';\nimport { Divider } from './buttons';\nimport { buildAlternateResponses, buildCategories } from './builder';\nimport Header from './header';\n\nconst { Panel, toggle, radio } = settings;\nconst { Provider: IdProvider } = uid;\n\nexport class Design extends React.Component {\n static propTypes = {\n classes: PropTypes.object.isRequired,\n configuration: PropTypes.object,\n className: PropTypes.string,\n onConfigurationChanged: PropTypes.func,\n model: PropTypes.object.isRequired,\n onChange: PropTypes.func.isRequired,\n uid: PropTypes.string,\n imageSupport: PropTypes.shape({\n add: PropTypes.func.isRequired,\n delete: PropTypes.func.isRequired,\n }),\n uploadSoundSupport: PropTypes.shape({\n add: PropTypes.func.isRequired,\n delete: PropTypes.func.isRequired,\n }),\n };\n\n constructor(props) {\n super(props);\n this.uid = props.uid || uid.generateId();\n }\n\n updateModel = (props) => {\n const { model, onChange } = this.props;\n\n const updatedModel = {\n ...model,\n ...props,\n };\n\n //Ensure that there are no extra choices in correctResponse, if the user has decided that only one choice may be used.\n updatedModel.correctResponse = ensureNoExtraChoicesInAnswer(\n updatedModel.correctResponse || [],\n updatedModel.choices\n );\n\n //clean categories\n updatedModel.categories = updatedModel.categories.map((c) => ({\n id: c.id,\n label: c.label,\n }));\n\n updatedModel.choices = updatedModel.choices.map((h) => ({\n id: h.id,\n content: h.content,\n categoryCount: h.categoryCount,\n }));\n\n onChange(updatedModel);\n };\n\n changeRationale = (rationale) => {\n const { model, onChange } = this.props;\n\n onChange({\n ...model,\n rationale,\n });\n };\n\n changeTeacherInstructions = (teacherInstructions) => {\n const { model, onChange } = this.props;\n\n onChange({\n ...model,\n teacherInstructions,\n });\n };\n\n changeFeedback = (feedback) => {\n this.updateModel({ feedback });\n };\n\n onAddAlternateResponse = () => {\n const {\n model: { correctResponse },\n } = this.props;\n\n this.updateModel({\n correctResponse: (correctResponse || []).map((cr) => ({\n ...cr,\n alternateResponses: [...(cr.alternateResponses || []), []],\n })),\n });\n };\n\n onPromptChanged = (prompt) => this.updateModel({ prompt });\n\n onRemoveAlternateResponse = (index) => {\n const {\n model: { correctResponse },\n } = this.props;\n\n this.updateModel({\n correctResponse: (correctResponse || []).map((cr) => ({\n ...cr,\n alternateResponses: (cr.alternateResponses || []).filter(\n (alt, altIndex) => altIndex !== index\n ),\n })),\n });\n };\n\n countChoiceInCorrectResponse = (choice) => {\n const { model } = this.props;\n\n return countInAnswer(choice.id, model.correctResponse);\n };\n\n render() {\n const {\n classes,\n className,\n model,\n imageSupport,\n uploadSoundSupport,\n configuration,\n onChange,\n onConfigurationChanged,\n } = this.props;\n const {\n partialScoring = {},\n lockChoiceOrder = {},\n teacherInstructions = {},\n studentInstructions = {},\n rationale = {},\n scoringType = {},\n feedback = {},\n prompt = {},\n spellCheck = {},\n maxImageWidth = {},\n maxImageHeight = {},\n withRubric = {}\n } = configuration || {};\n const {\n teacherInstructionsEnabled,\n promptEnabled,\n rationaleEnabled,\n feedbackEnabled,\n spellCheckEnabled,\n errors,\n rubricEnabled\n } = model || {};\n\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\n const config = model.config || {};\n config.choices = config.choices || { label: '', columns: 2 };\n\n const categories = buildCategories(\n model.categories || [],\n model.choices || [],\n model.correctResponse || []\n );\n\n const alternateResponses = buildAlternateResponses(\n model.categories || [],\n model.choices || [],\n model.correctResponse || []\n );\n\n const choices = model.choices.map((c) => {\n c.correctResponseCount = this.countChoiceInCorrectResponse(c);\n return c;\n });\n\n const defaultImageMaxWidth = maxImageWidth && maxImageWidth.prompt;\n const defaultImageMaxHeight = maxImageHeight && maxImageHeight.prompt;\n\n return (\n <IdProvider value={this.uid}>\n <layout.ConfigLayout\n settings={\n <Panel\n model={model}\n onChangeModel={onChange}\n configuration={configuration}\n onChangeConfiguration={onConfigurationChanged}\n groups={{\n Settings: {\n partialScoring:\n partialScoring.settings && toggle(partialScoring.label),\n lockChoiceOrder:\n lockChoiceOrder.settings && toggle(lockChoiceOrder.label),\n promptEnabled: prompt.settings && toggle(prompt.label),\n feedbackEnabled: feedback.settings && toggle(feedback.label),\n },\n Properties: {\n teacherInstructionsEnabled:\n teacherInstructions.settings &&\n toggle(teacherInstructions.label),\n studentInstructionsEnabled:\n studentInstructions.settings &&\n toggle(studentInstructions.label),\n rationaleEnabled:\n rationale.settings && toggle(rationale.label),\n spellCheckEnabled:\n spellCheck.settings && toggle(spellCheck.label),\n scoringType:\n scoringType.settings &&\n radio(scoringType.label, ['auto', 'rubric']),\n rubricEnabled: withRubric?.settings && toggle(withRubric?.label)\n },\n }}\n />\n }\n >\n <div className={classNames(classes.design, className)}>\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 spellCheck={spellCheckEnabled}\n maxImageWidth={maxImageWidth && maxImageWidth.prompt}\n maxImageHeight={maxImageHeight && maxImageHeight.prompt}\n uploadSoundSupport={uploadSoundSupport}\n languageCharactersProps={[{ language: 'spanish' }, { language: 'special' }]}\n />\n </InputContainer>\n )}\n\n {teacherInstructionsEnabled && (\n <InputContainer\n label={teacherInstructions.label}\n className={classes.inputHolder}\n >\n <EditableHtml\n className={classes.input}\n markup={model.teacherInstructions || ''}\n onChange={this.changeTeacherInstructions}\n imageSupport={imageSupport}\n nonEmpty={false}\n toolbarOpts={toolbarOpts}\n spellCheck={spellCheckEnabled}\n maxImageWidth={maxImageWidth && maxImageWidth.teacherInstructions || defaultImageMaxWidth}\n maxImageHeight={maxImageHeight && maxImageHeight.teacherInstructions || defaultImageMaxHeight}\n uploadSoundSupport={uploadSoundSupport}\n languageCharactersProps={[{ language: 'spanish' }, { language: 'special' }]}\n />\n </InputContainer>\n )}\n\n {rationaleEnabled && (\n <InputContainer\n label={rationale.label}\n className={classes.inputHolder}\n >\n <EditableHtml\n className={classes.input}\n markup={model.rationale || ''}\n onChange={this.changeRationale}\n imageSupport={imageSupport}\n nonEmpty={false}\n toolbarOpts={toolbarOpts}\n spellCheck={spellCheckEnabled}\n maxImageWidth={maxImageWidth && maxImageWidth.rationale || defaultImageMaxWidth}\n maxImageHeight={maxImageHeight && maxImageHeight.rationale || defaultImageMaxHeight}\n uploadSoundSupport={uploadSoundSupport}\n languageCharactersProps={[{ language: 'spanish' }, { language: 'special' }]}\n />\n </InputContainer>\n )}\n\n <Categories\n imageSupport={imageSupport}\n uploadSoundSupport={uploadSoundSupport}\n model={model}\n categories={categories || []}\n onModelChanged={this.updateModel}\n toolbarOpts={toolbarOpts}\n spellCheck={spellCheckEnabled}\n configuration={configuration}\n defaultImageMaxWidth={defaultImageMaxWidth}\n defaultImageMaxHeight={defaultImageMaxHeight}\n />\n\n <Header\n className={classes.alternatesHeader}\n label=\"Alternate Responses\"\n buttonLabel=\"ADD AN ALTERNATE RESPONSE\"\n onAdd={this.onAddAlternateResponse}\n />\n\n {alternateResponses.map((categoriesList, index) => {\n return (\n <React.Fragment key={index}>\n <Header\n className={classes.alternatesHeader}\n label=\"Alternate Response\"\n buttonLabel=\"REMOVE ALTERNATE RESPONSE\"\n onAdd={() => this.onRemoveAlternateResponse(index)}\n />\n\n <AlternateResponses\n altIndex={index}\n imageSupport={imageSupport}\n model={model}\n categories={categoriesList}\n onModelChanged={this.updateModel}\n uploadSoundSupport={uploadSoundSupport}\n />\n </React.Fragment>\n );\n })}\n\n <Divider />\n <Choices\n imageSupport={imageSupport}\n uploadSoundSupport={uploadSoundSupport}\n choices={choices}\n model={model}\n onModelChanged={this.updateModel}\n toolbarOpts={toolbarOpts}\n spellCheck={spellCheckEnabled}\n configuration={configuration}\n defaultImageMaxWidth={defaultImageMaxWidth}\n defaultImageMaxHeight={defaultImageMaxHeight}\n />\n\n {feedbackEnabled && (\n <FeedbackConfig\n feedback={model.feedback}\n onChange={this.changeFeedback}\n toolbarOpts={toolbarOpts}\n />\n )}\n </div>\n </layout.ConfigLayout>\n </IdProvider>\n );\n }\n}\n\nconst styles = (theme) => ({\n alternatesHeader: {\n paddingTop: theme.spacing.unit * 2,\n paddingBottom: theme.spacing.unit * 2,\n },\n text: {\n paddingTop: theme.spacing.unit * 2,\n paddingBottom: theme.spacing.unit * 2,\n },\n design: {\n paddingTop: theme.spacing.unit,\n paddingBottom: theme.spacing.unit,\n },\n inputHolder: {\n width: '100%',\n paddingBottom: theme.spacing.unit * 2,\n marginBottom: theme.spacing.unit * 2,\n },\n input: {\n paddingTop: theme.spacing.unit * 2,\n width: '100%',\n maxWidth: '600px',\n },\n prompt: {\n paddingTop: theme.spacing.unit * 2,\n width: '100%',\n },\n promptHolder: {\n width: '100%',\n paddingBottom: theme.spacing.unit * 2,\n marginBottom: theme.spacing.unit * 2,\n },\n title: {\n marginBottom: '30px',\n },\n});\n\nexport default withDragContext(withStyles(styles)(Design));\n"],"file":"index.js"}
|
|
1
|
+
{"version":3,"sources":["../../src/design/index.jsx"],"names":["dropdown","settings","Panel","toggle","radio","numberField","IdProvider","uid","Provider","Design","props","model","onChange","updatedModel","correctResponse","choices","categories","map","c","id","label","h","content","categoryCount","rationale","teacherInstructions","feedback","updateModel","cr","alternateResponses","prompt","index","filter","alt","altIndex","choice","allowMultiplePlacements","multiplePlacements","enabled","disabled","generateId","classes","className","imageSupport","uploadSoundSupport","configuration","onConfigurationChanged","partialScoring","lockChoiceOrder","categoriesPerRow","studentInstructions","scoringType","spellCheck","maxImageWidth","maxImageHeight","withRubric","allowMultiplePlacementsEnabled","teacherInstructionsEnabled","promptEnabled","rationaleEnabled","feedbackEnabled","spellCheckEnabled","errors","rubricEnabled","toolbarOpts","toolbarEditorPosition","position","config","columns","correctResponseCount","countChoiceInCorrectResponse","checkAllowMultiplePlacements","defaultImageMaxWidth","defaultImageMaxHeight","Settings","min","max","perChoice","Properties","studentInstructionsEnabled","design","promptHolder","onPromptChanged","language","inputHolder","input","changeTeacherInstructions","changeRationale","alternatesHeader","onAddAlternateResponse","categoriesList","onRemoveAlternateResponse","changeFeedback","React","Component","PropTypes","object","isRequired","string","func","shape","add","styles","theme","paddingTop","spacing","unit","paddingBottom","text","width","marginBottom","maxWidth","title"],"mappings":"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","sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\nimport { withStyles } from '@material-ui/core/styles';\nimport classNames from 'classnames';\nimport {\n FeedbackConfig,\n InputContainer,\n layout,\n settings,\n} from '@pie-lib/config-ui';\nimport {\n countInAnswer,\n ensureNoExtraChoicesInAnswer,\n} from '@pie-lib/categorize';\nimport EditableHtml from '@pie-lib/editable-html';\nimport { uid, withDragContext } from '@pie-lib/drag';\n\nimport Categories from './categories';\nimport AlternateResponses from './categories/alternateResponses';\nimport Choices from './choices';\nimport { Divider } from './buttons';\nimport { buildAlternateResponses, buildCategories } from './builder';\nimport Header from './header';\nimport { multiplePlacements } from '../utils';\n\nconst { dropdown, Panel, toggle, radio, numberField } = settings;\nconst { Provider: IdProvider } = uid;\n\nexport class Design extends React.Component {\n static propTypes = {\n classes: PropTypes.object.isRequired,\n configuration: PropTypes.object,\n className: PropTypes.string,\n onConfigurationChanged: PropTypes.func,\n model: PropTypes.object.isRequired,\n onChange: PropTypes.func.isRequired,\n uid: PropTypes.string,\n imageSupport: PropTypes.shape({\n add: PropTypes.func.isRequired,\n delete: PropTypes.func.isRequired,\n }),\n uploadSoundSupport: PropTypes.shape({\n add: PropTypes.func.isRequired,\n delete: PropTypes.func.isRequired,\n }),\n };\n\n constructor(props) {\n super(props);\n this.uid = props.uid || uid.generateId();\n }\n\n updateModel = (props) => {\n const { model, onChange } = this.props;\n\n const updatedModel = {\n ...model,\n ...props,\n };\n\n //Ensure that there are no extra choices in correctResponse, if the user has decided that only one choice may be used.\n updatedModel.correctResponse = ensureNoExtraChoicesInAnswer(\n updatedModel.correctResponse || [],\n updatedModel.choices\n );\n\n //clean categories\n updatedModel.categories = updatedModel.categories.map((c) => ({\n id: c.id,\n label: c.label,\n }));\n\n updatedModel.choices = updatedModel.choices.map((h) => ({\n id: h.id,\n content: h.content,\n categoryCount: h.categoryCount,\n }));\n\n onChange(updatedModel);\n };\n\n changeRationale = (rationale) => {\n const { model, onChange } = this.props;\n\n onChange({\n ...model,\n rationale,\n });\n };\n\n changeTeacherInstructions = (teacherInstructions) => {\n const { model, onChange } = this.props;\n\n onChange({\n ...model,\n teacherInstructions,\n });\n };\n\n changeFeedback = (feedback) => {\n this.updateModel({ feedback });\n };\n\n onAddAlternateResponse = () => {\n const {\n model: { correctResponse },\n } = this.props;\n\n this.updateModel({\n correctResponse: (correctResponse || []).map((cr) => ({\n ...cr,\n alternateResponses: [...(cr.alternateResponses || []), []],\n })),\n });\n };\n\n onPromptChanged = (prompt) => this.updateModel({ prompt });\n\n onRemoveAlternateResponse = (index) => {\n const {\n model: { correctResponse },\n } = this.props;\n\n this.updateModel({\n correctResponse: (correctResponse || []).map((cr) => ({\n ...cr,\n alternateResponses: (cr.alternateResponses || []).filter(\n (alt, altIndex) => altIndex !== index\n ),\n })),\n });\n };\n\n countChoiceInCorrectResponse = (choice) => {\n const { model } = this.props;\n\n return countInAnswer(choice.id, model.correctResponse);\n };\n\n checkAllowMultiplePlacements = (allowMultiplePlacements, c) => {\n if (allowMultiplePlacements === multiplePlacements.enabled) {\n return 0;\n }\n if (allowMultiplePlacements === multiplePlacements.disabled) {\n return 1;\n }\n return c.categoryCount || 0;\n\n };\n\n render() {\n const {\n classes,\n className,\n model,\n imageSupport,\n uploadSoundSupport,\n configuration,\n onChange,\n onConfigurationChanged,\n } = this.props;\n const {\n allowMultiplePlacements = {},\n partialScoring = {},\n lockChoiceOrder = {},\n categoriesPerRow = {},\n teacherInstructions = {},\n studentInstructions = {},\n rationale = {},\n scoringType = {},\n feedback = {},\n prompt = {},\n spellCheck = {},\n maxImageWidth = {},\n maxImageHeight = {},\n withRubric = {}\n } = configuration || {};\n const {\n allowMultiplePlacementsEnabled,\n teacherInstructionsEnabled,\n promptEnabled,\n rationaleEnabled,\n feedbackEnabled,\n spellCheckEnabled,\n errors,\n rubricEnabled\n } = model || {};\n\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\n const config = model.config || {};\n config.choices = config.choices || { label: '', columns: 2 };\n\n const categories = buildCategories(\n model.categories || [],\n model.choices || [],\n model.correctResponse || []\n );\n\n const alternateResponses = buildAlternateResponses(\n model.categories || [],\n model.choices || [],\n model.correctResponse || []\n );\n\n const choices = model.choices.map((c) => {\n c.correctResponseCount = this.countChoiceInCorrectResponse(c);\n c.categoryCount = this.checkAllowMultiplePlacements(allowMultiplePlacementsEnabled, c);\n return c;\n });\n\n const defaultImageMaxWidth = maxImageWidth && maxImageWidth.prompt;\n const defaultImageMaxHeight = maxImageHeight && maxImageHeight.prompt;\n\n return (\n <IdProvider value={this.uid}>\n <layout.ConfigLayout\n settings={\n <Panel\n model={model}\n onChangeModel={onChange}\n configuration={configuration}\n onChangeConfiguration={onConfigurationChanged}\n groups={{\n Settings: {\n partialScoring:\n partialScoring.settings && toggle(partialScoring.label),\n lockChoiceOrder:\n lockChoiceOrder.settings && toggle(lockChoiceOrder.label),\n categoriesPerRow: categoriesPerRow.settings && numberField(categoriesPerRow.label,\n {\n label: categoriesPerRow.label,\n min: 1,\n max: 4,\n }),\n allowMultiplePlacementsEnabled:\n allowMultiplePlacements.settings &&\n dropdown(allowMultiplePlacements.label, [\n multiplePlacements.enabled,\n multiplePlacements.disabled,\n multiplePlacements.perChoice,\n ], ),\n promptEnabled: prompt.settings && toggle(prompt.label),\n feedbackEnabled: feedback.settings && toggle(feedback.label),\n },\n Properties: {\n teacherInstructionsEnabled:\n teacherInstructions.settings &&\n toggle(teacherInstructions.label),\n studentInstructionsEnabled:\n studentInstructions.settings &&\n toggle(studentInstructions.label),\n rationaleEnabled:\n rationale.settings && toggle(rationale.label),\n spellCheckEnabled:\n spellCheck.settings && toggle(spellCheck.label),\n scoringType:\n scoringType.settings &&\n radio(scoringType.label, ['auto', 'rubric']),\n rubricEnabled: withRubric?.settings && toggle(withRubric?.label)\n },\n }}\n />\n }\n >\n <div className={classNames(classes.design, className)}>\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 spellCheck={spellCheckEnabled}\n maxImageWidth={maxImageWidth && maxImageWidth.prompt}\n maxImageHeight={maxImageHeight && maxImageHeight.prompt}\n uploadSoundSupport={uploadSoundSupport}\n languageCharactersProps={[{ language: 'spanish' }, { language: 'special' }]}\n />\n </InputContainer>\n )}\n\n {teacherInstructionsEnabled && (\n <InputContainer\n label={teacherInstructions.label}\n className={classes.inputHolder}\n >\n <EditableHtml\n className={classes.input}\n markup={model.teacherInstructions || ''}\n onChange={this.changeTeacherInstructions}\n imageSupport={imageSupport}\n nonEmpty={false}\n toolbarOpts={toolbarOpts}\n spellCheck={spellCheckEnabled}\n maxImageWidth={maxImageWidth && maxImageWidth.teacherInstructions || defaultImageMaxWidth}\n maxImageHeight={maxImageHeight && maxImageHeight.teacherInstructions || defaultImageMaxHeight}\n uploadSoundSupport={uploadSoundSupport}\n languageCharactersProps={[{ language: 'spanish' }, { language: 'special' }]}\n />\n </InputContainer>\n )}\n\n {rationaleEnabled && (\n <InputContainer\n label={rationale.label}\n className={classes.inputHolder}\n >\n <EditableHtml\n className={classes.input}\n markup={model.rationale || ''}\n onChange={this.changeRationale}\n imageSupport={imageSupport}\n nonEmpty={false}\n toolbarOpts={toolbarOpts}\n spellCheck={spellCheckEnabled}\n maxImageWidth={maxImageWidth && maxImageWidth.rationale || defaultImageMaxWidth}\n maxImageHeight={maxImageHeight && maxImageHeight.rationale || defaultImageMaxHeight}\n uploadSoundSupport={uploadSoundSupport}\n languageCharactersProps={[{ language: 'spanish' }, { language: 'special' }]}\n />\n </InputContainer>\n )}\n\n <Categories\n imageSupport={imageSupport}\n uploadSoundSupport={uploadSoundSupport}\n model={model}\n categories={categories || []}\n onModelChanged={this.updateModel}\n toolbarOpts={toolbarOpts}\n spellCheck={spellCheckEnabled}\n configuration={configuration}\n defaultImageMaxWidth={defaultImageMaxWidth}\n defaultImageMaxHeight={defaultImageMaxHeight}\n />\n\n <Header\n className={classes.alternatesHeader}\n label=\"Alternate Responses\"\n buttonLabel=\"ADD AN ALTERNATE RESPONSE\"\n onAdd={this.onAddAlternateResponse}\n />\n\n {alternateResponses.map((categoriesList, index) => {\n return (\n <React.Fragment key={index}>\n <Header\n className={classes.alternatesHeader}\n label=\"Alternate Response\"\n buttonLabel=\"REMOVE ALTERNATE RESPONSE\"\n onAdd={() => this.onRemoveAlternateResponse(index)}\n />\n\n <AlternateResponses\n altIndex={index}\n imageSupport={imageSupport}\n model={model}\n categories={categoriesList}\n onModelChanged={this.updateModel}\n uploadSoundSupport={uploadSoundSupport}\n />\n </React.Fragment>\n );\n })}\n\n <Divider />\n <Choices\n imageSupport={imageSupport}\n uploadSoundSupport={uploadSoundSupport}\n choices={choices}\n model={model}\n onModelChanged={this.updateModel}\n toolbarOpts={toolbarOpts}\n spellCheck={spellCheckEnabled}\n configuration={configuration}\n defaultImageMaxWidth={defaultImageMaxWidth}\n defaultImageMaxHeight={defaultImageMaxHeight}\n />\n\n {feedbackEnabled && (\n <FeedbackConfig\n feedback={model.feedback}\n onChange={this.changeFeedback}\n toolbarOpts={toolbarOpts}\n />\n )}\n </div>\n </layout.ConfigLayout>\n </IdProvider>\n );\n }\n}\n\nconst styles = (theme) => ({\n alternatesHeader: {\n paddingTop: theme.spacing.unit * 2,\n paddingBottom: theme.spacing.unit * 2,\n },\n text: {\n paddingTop: theme.spacing.unit * 2,\n paddingBottom: theme.spacing.unit * 2,\n },\n design: {\n paddingTop: theme.spacing.unit,\n paddingBottom: theme.spacing.unit,\n },\n inputHolder: {\n width: '100%',\n paddingBottom: theme.spacing.unit * 2,\n marginBottom: theme.spacing.unit * 2,\n },\n input: {\n paddingTop: theme.spacing.unit * 2,\n width: '100%',\n maxWidth: '600px',\n },\n prompt: {\n paddingTop: theme.spacing.unit * 2,\n width: '100%',\n },\n promptHolder: {\n width: '100%',\n paddingBottom: theme.spacing.unit * 2,\n marginBottom: theme.spacing.unit * 2,\n },\n title: {\n marginBottom: '30px',\n },\n});\n\nexport default withDragContext(withStyles(styles)(Design));\n"],"file":"index.js"}
|
package/configure/lib/utils.js
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
-
exports.generateValidationMessage = void 0;
|
|
6
|
+
exports.multiplePlacements = exports.generateValidationMessage = void 0;
|
|
7
7
|
|
|
8
8
|
var generateValidationMessage = function generateValidationMessage(config) {
|
|
9
9
|
var _ref = config || {},
|
|
@@ -14,7 +14,14 @@ var generateValidationMessage = function generateValidationMessage(config) {
|
|
|
14
14
|
minChoices = minChoices || 1;
|
|
15
15
|
var validationMessage = '\nThe choices content should ' + 'not be empty and should be unique.\nThere should be at least 1 ' + (maxCategories ? "and at most ".concat(maxCategories, " ") : '') + 'category' + (maxCategories ? 's' : '') + ' defined.' + (minChoices ? "\nThere should be at least ".concat(minChoices, " choices defined.") : '') + (maxChoices ? "\nNo more than ".concat(maxChoices, " choices should be defined.") : '') + '\nAt least one token should be assigned to at least one category.';
|
|
16
16
|
return 'Validation requirements:' + validationMessage;
|
|
17
|
-
};
|
|
17
|
+
}; // used in controller too, for consistency modify it there too
|
|
18
|
+
|
|
18
19
|
|
|
19
20
|
exports.generateValidationMessage = generateValidationMessage;
|
|
21
|
+
var multiplePlacements = {
|
|
22
|
+
enabled: 'Yes',
|
|
23
|
+
disabled: 'No',
|
|
24
|
+
perChoice: 'Set Per Choice'
|
|
25
|
+
};
|
|
26
|
+
exports.multiplePlacements = multiplePlacements;
|
|
20
27
|
//# sourceMappingURL=utils.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/utils.js"],"names":["generateValidationMessage","config","minChoices","maxChoices","maxCategories","validationMessage"],"mappings":";;;;;;;AAAO,IAAMA,yBAAyB,GAAG,SAA5BA,yBAA4B,CAAAC,MAAM,EAAI;AACjD,aAAgDA,MAAM,IAAI,EAA1D;AAAA,MAAMC,UAAN,QAAMA,UAAN;AAAA,MAAkBC,UAAlB,QAAkBA,UAAlB;AAAA,MAA8BC,aAA9B,QAA8BA,aAA9B;;AACAF,EAAAA,UAAU,GAAGA,UAAU,IAAI,CAA3B;AAEA,MAAMG,iBAAiB,GAAG,kCACxB,iEADwB,IAEvBD,aAAa,yBAAkBA,aAAlB,SAAqC,EAF3B,IAGxB,UAHwB,IAGVA,aAAa,GAAG,GAAH,GAAS,EAHZ,IAGkB,WAHlB,IAIvBF,UAAU,wCAAiCA,UAAjC,yBAAiE,EAJpD,KAKvBC,UAAU,4BAAqBA,UAArB,mCAA+D,EALlD,IAMxB,mEANF;AAQA,SAAO,6BAA6BE,iBAApC;AACD,CAbM","sourcesContent":["export const generateValidationMessage = config => {\n let { minChoices, maxChoices, maxCategories } = config || {};\n minChoices = minChoices || 1;\n\n const validationMessage = '\\nThe choices content should ' +\n 'not be empty and should be unique.\\nThere should be at least 1 ' +\n (maxCategories ? `and at most ${maxCategories} ` : '') +\n 'category' + (maxCategories ? 's' : '') + ' defined.' +\n (minChoices ? `\\nThere should be at least ${minChoices} choices defined.` : '') +\n (maxChoices ? `\\nNo more than ${maxChoices} choices should be defined.` : '') +\n '\\nAt least one token should be assigned to at least one category.';\n\n return 'Validation requirements:' + validationMessage;\n};\n"],"file":"utils.js"}
|
|
1
|
+
{"version":3,"sources":["../src/utils.js"],"names":["generateValidationMessage","config","minChoices","maxChoices","maxCategories","validationMessage","multiplePlacements","enabled","disabled","perChoice"],"mappings":";;;;;;;AAAO,IAAMA,yBAAyB,GAAG,SAA5BA,yBAA4B,CAAAC,MAAM,EAAI;AACjD,aAAgDA,MAAM,IAAI,EAA1D;AAAA,MAAMC,UAAN,QAAMA,UAAN;AAAA,MAAkBC,UAAlB,QAAkBA,UAAlB;AAAA,MAA8BC,aAA9B,QAA8BA,aAA9B;;AACAF,EAAAA,UAAU,GAAGA,UAAU,IAAI,CAA3B;AAEA,MAAMG,iBAAiB,GAAG,kCACxB,iEADwB,IAEvBD,aAAa,yBAAkBA,aAAlB,SAAqC,EAF3B,IAGxB,UAHwB,IAGVA,aAAa,GAAG,GAAH,GAAS,EAHZ,IAGkB,WAHlB,IAIvBF,UAAU,wCAAiCA,UAAjC,yBAAiE,EAJpD,KAKvBC,UAAU,4BAAqBA,UAArB,mCAA+D,EALlD,IAMxB,mEANF;AAQA,SAAO,6BAA6BE,iBAApC;AACD,CAbM,C,CAeP;;;;AACO,IAAMC,kBAAkB,GAAG;AAAEC,EAAAA,OAAO,EAAE,KAAX;AAAkBC,EAAAA,QAAQ,EAAE,IAA5B;AAAkCC,EAAAA,SAAS,EAAE;AAA7C,CAA3B","sourcesContent":["export const generateValidationMessage = config => {\n let { minChoices, maxChoices, maxCategories } = config || {};\n minChoices = minChoices || 1;\n\n const validationMessage = '\\nThe choices content should ' +\n 'not be empty and should be unique.\\nThere should be at least 1 ' +\n (maxCategories ? `and at most ${maxCategories} ` : '') +\n 'category' + (maxCategories ? 's' : '') + ' defined.' +\n (minChoices ? `\\nThere should be at least ${minChoices} choices defined.` : '') +\n (maxChoices ? `\\nNo more than ${maxChoices} choices should be defined.` : '') +\n '\\nAt least one token should be assigned to at least one category.';\n\n return 'Validation requirements:' + validationMessage;\n};\n\n// used in controller too, for consistency modify it there too\nexport const multiplePlacements = { enabled: 'Yes', disabled: 'No', perChoice: 'Set Per Choice' };\n"],"file":"utils.js"}
|
package/configure/package.json
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
"private": true,
|
|
4
4
|
"main": "lib/index.js",
|
|
5
5
|
"module": "src/index.js",
|
|
6
|
-
"version": "6.
|
|
6
|
+
"version": "6.3.0",
|
|
7
7
|
"description": "",
|
|
8
8
|
"scripts": {},
|
|
9
9
|
"author": "pie framework developers",
|
|
@@ -13,9 +13,9 @@
|
|
|
13
13
|
"@material-ui/icons": "^3.0.1",
|
|
14
14
|
"@pie-framework/pie-configure-events": "^1.3.0",
|
|
15
15
|
"@pie-lib/categorize": "^0.6.24",
|
|
16
|
-
"@pie-lib/config-ui": "^11.0.
|
|
16
|
+
"@pie-lib/config-ui": "^11.0.22",
|
|
17
17
|
"@pie-lib/drag": "^1.1.52",
|
|
18
|
-
"@pie-lib/editable-html": "^9.2.
|
|
18
|
+
"@pie-lib/editable-html": "^9.2.4",
|
|
19
19
|
"@pie-lib/render-ui": "^4.13.6",
|
|
20
20
|
"classnames": "^2.2.5",
|
|
21
21
|
"debug": "^3.1.0",
|
package/controller/CHANGELOG.md
CHANGED
|
@@ -3,6 +3,17 @@
|
|
|
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
|
+
# [5.4.0](https://github.com/pie-framework/pie-elements/compare/@pie-element/categorize-controller@5.3.0...@pie-element/categorize-controller@5.4.0) (2022-11-15)
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
### Features
|
|
10
|
+
|
|
11
|
+
* **categorize:** updatel model from controller to be consistent with the one in configure-PD-1985 ([d7f6e3f](https://github.com/pie-framework/pie-elements/commit/d7f6e3f47c28f9e0d41738a70ecff49c9b72a6af))
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
|
|
6
17
|
# [5.3.0](https://github.com/pie-framework/pie-elements/compare/@pie-element/categorize-controller@5.2.8...@pie-element/categorize-controller@5.3.0) (2022-08-31)
|
|
7
18
|
|
|
8
19
|
|
|
@@ -4,9 +4,28 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
6
|
exports["default"] = void 0;
|
|
7
|
+
|
|
8
|
+
var _utils = require("./utils");
|
|
9
|
+
|
|
7
10
|
var _default = {
|
|
8
11
|
choices: [],
|
|
12
|
+
choicesPosition: 'below',
|
|
13
|
+
choicesLabel: '',
|
|
14
|
+
lockChoiceOrder: true,
|
|
15
|
+
removeTilesAfterPlacing: false,
|
|
16
|
+
allowMultiplePlacementsEnabled: _utils.multiplePlacements.enabled,
|
|
17
|
+
categoriesPerRow: 2,
|
|
9
18
|
categories: [],
|
|
19
|
+
alternates: [],
|
|
20
|
+
correctResponse: [],
|
|
21
|
+
rowLabels: [''],
|
|
22
|
+
partialScoring: true,
|
|
23
|
+
feedbackEnabled: true,
|
|
24
|
+
rationaleEnabled: true,
|
|
25
|
+
promptEnabled: true,
|
|
26
|
+
teacherInstructionsEnabled: true,
|
|
27
|
+
studentInstructionsEnabled: true,
|
|
28
|
+
toolbarEditorPosition: 'bottom',
|
|
10
29
|
note: 'The answer shown above is the most common correct answer for this item. One or more additional correct answers are also defined, and will also be recognized as correct.'
|
|
11
30
|
};
|
|
12
31
|
exports["default"] = _default;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/defaults.js"],"names":["choices","categories","note"],"mappings":"
|
|
1
|
+
{"version":3,"sources":["../src/defaults.js"],"names":["choices","choicesPosition","choicesLabel","lockChoiceOrder","removeTilesAfterPlacing","allowMultiplePlacementsEnabled","multiplePlacements","enabled","categoriesPerRow","categories","alternates","correctResponse","rowLabels","partialScoring","feedbackEnabled","rationaleEnabled","promptEnabled","teacherInstructionsEnabled","studentInstructionsEnabled","toolbarEditorPosition","note"],"mappings":";;;;;;;AAAA;;eAEe;AACbA,EAAAA,OAAO,EAAE,EADI;AAEbC,EAAAA,eAAe,EAAE,OAFJ;AAGbC,EAAAA,YAAY,EAAE,EAHD;AAIbC,EAAAA,eAAe,EAAE,IAJJ;AAKbC,EAAAA,uBAAuB,EAAE,KALZ;AAMbC,EAAAA,8BAA8B,EAAEC,0BAAmBC,OANtC;AAObC,EAAAA,gBAAgB,EAAE,CAPL;AAQbC,EAAAA,UAAU,EAAE,EARC;AASbC,EAAAA,UAAU,EAAE,EATC;AAUbC,EAAAA,eAAe,EAAE,EAVJ;AAWbC,EAAAA,SAAS,EAAE,CAAC,EAAD,CAXE;AAYbC,EAAAA,cAAc,EAAE,IAZH;AAabC,EAAAA,eAAe,EAAE,IAbJ;AAcbC,EAAAA,gBAAgB,EAAE,IAdL;AAebC,EAAAA,aAAa,EAAE,IAfF;AAgBbC,EAAAA,0BAA0B,EAAE,IAhBf;AAiBbC,EAAAA,0BAA0B,EAAE,IAjBf;AAkBbC,EAAAA,qBAAqB,EAAE,QAlBV;AAmBbC,EAAAA,IAAI,EAAE;AAnBO,C","sourcesContent":["import { multiplePlacements } from './utils';\n\nexport default {\n choices: [],\n choicesPosition: 'below',\n choicesLabel: '',\n lockChoiceOrder: true,\n removeTilesAfterPlacing: false,\n allowMultiplePlacementsEnabled: multiplePlacements.enabled,\n categoriesPerRow: 2,\n categories: [],\n alternates: [],\n correctResponse: [],\n rowLabels: [''],\n partialScoring: true,\n feedbackEnabled: true,\n rationaleEnabled: true,\n promptEnabled: true,\n teacherInstructionsEnabled: true,\n studentInstructionsEnabled: true,\n toolbarEditorPosition: 'bottom',\n note: 'The answer shown above is the most common correct answer for this item. One or more additional correct answers are also defined, and will also be recognized as correct.'\n};\n"],"file":"defaults.js"}
|
package/controller/lib/index.js
CHANGED
|
@@ -155,13 +155,7 @@ var createDefaultModel = function createDefaultModel() {
|
|
|
155
155
|
exports.createDefaultModel = createDefaultModel;
|
|
156
156
|
|
|
157
157
|
var normalize = function normalize(question) {
|
|
158
|
-
return _objectSpread({
|
|
159
|
-
feedbackEnabled: true,
|
|
160
|
-
rationaleEnabled: true,
|
|
161
|
-
promptEnabled: true,
|
|
162
|
-
teacherInstructionsEnabled: true,
|
|
163
|
-
studentInstructionsEnabled: true
|
|
164
|
-
}, question);
|
|
158
|
+
return _objectSpread(_objectSpread({}, _defaults["default"]), question);
|
|
165
159
|
};
|
|
166
160
|
/**
|
|
167
161
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.js"],"names":["getPartialScore","correctResponse","builtCategories","reduce","acc","choices","placements","length","score","filter","ch","correct","maxScore","extraPlacements","totalScore","parseFloat","toFixed","getAlternates","map","c","alternateResponses","alternate","getTotalScore","question","session","env","Object","keys","categories","answers","alternates","enabled","partialScoring","getCorrectness","Promise","resolve","mode","undefined","createDefaultModel","model","defaults","normalize","feedbackEnabled","rationaleEnabled","promptEnabled","teacherInstructionsEnabled","studentInstructionsEnabled","updateSession","normalizedQuestion","answerCorrectness","role","categoriesPerRow","choicesLabel","choicesPosition","feedback","prompt","removeTilesAfterPlacing","rowLabels","rationale","note","teacherInstructions","lockChoiceOrder","filteredCorrectResponse","response","filteredChoices","choice","fb","out","correctness","disabled","showNote","outcome","reject","Error","empty","createCorrectResponseSession","id","validate","config","minChoices","maxChoices","maxCategories","reversedChoices","reverse","errors","choicesErrors","forEach","index","content","identicalAnswer","slice","some","nbOfCategories","nbOfChoices","categoriesError","choicesError","hasAssociations","associationError"],"mappings":"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","sourcesContent":["import isEmpty from 'lodash/isEmpty';\nimport { buildState, score } from '@pie-lib/categorize';\nimport { getFeedbackForCorrectness } from '@pie-lib/feedback';\nimport {\n lockChoices,\n getShuffledChoices,\n partialScoring,\n} from '@pie-lib/controller-utils';\nimport defaults from './defaults';\n\n// eslint-disable-next-line no-console\n\nexport { score };\n\nexport const getPartialScore = (correctResponse, builtCategories) => {\n // in the resulted best scenario we make a sum with all the correct responses\n // and all the placements\n const { placements, score } = builtCategories.reduce(\n (acc, { choices = [] }) => ({\n placements: acc.placements + choices.length,\n score: acc.score + choices.filter((ch) => ch.correct).length,\n }),\n { placements: 0, score: 0 }\n );\n\n // in the correct response, we make a sum of the max possible score\n const { maxScore } = correctResponse.reduce(\n (acc, { choices }) => ({\n maxScore: acc.maxScore + choices.length,\n }),\n { maxScore: 0 }\n );\n\n // if there are any extra placements, we subtract from the obtained score\n const extraPlacements = placements > maxScore ? placements - maxScore : 0;\n const totalScore = (score - extraPlacements) / maxScore;\n\n return totalScore < 0 ? 0 : parseFloat(totalScore.toFixed(2));\n};\n\nconst getAlternates = correctResponse => correctResponse\n .map((c) => c.alternateResponses)\n .filter((alternate) => alternate);\n\nexport const getTotalScore = (question, session, env) => {\n if (!session) {\n return 0;\n }\n\n if (Object.keys(session).length === 0) {\n return 0;\n }\n const { categories, choices } = question || {};\n let { correctResponse } = question || {};\n let { answers } = session || {};\n answers = answers || [];\n correctResponse = correctResponse || [];\n\n // this function is used in pie-ui/categorize as well, in order to get the best scenario\n // so we get the best scenario and calculate the score\n const { categories: builtCategories, correct } = buildState(\n categories,\n choices,\n answers,\n correctResponse\n );\n\n const alternates = getAlternates(correctResponse);\n const enabled = partialScoring.enabled(question, env);\n\n // if there are any alternates, there will be no partial scoring!\n if (enabled && !alternates.length) {\n // we apply partial scoring\n return getPartialScore(correctResponse, builtCategories);\n }\n\n // else we apply dichotomous\n return correct ? 1 : 0;\n};\n\nexport const getCorrectness = (question, session, env) => {\n return new Promise((resolve) => {\n if (env.mode === 'evaluate') {\n const score = getTotalScore(question, session, env);\n if (score === 1) {\n resolve('correct');\n } else if (score === 0) {\n resolve('incorrect');\n } else {\n resolve('partially-correct');\n }\n } else {\n resolve(undefined);\n }\n });\n};\n\nexport const createDefaultModel = (model = {}) =>\n new Promise((resolve) => {\n resolve({\n ...defaults,\n ...model,\n });\n });\n\nexport const normalize = (question) => ({\n feedbackEnabled: true,\n rationaleEnabled: true,\n promptEnabled: true,\n teacherInstructionsEnabled: true,\n studentInstructionsEnabled: true,\n ...question,\n});\n\n/**\n *\n * @param {*} question\n * @param {*} session\n * @param {*} env\n * @param {*} updateSession - optional - a function that will set the properties passed into it on the session.\n */\nexport const model = (question, session, env, updateSession) =>\n new Promise(async (resolve) => {\n const normalizedQuestion = normalize(question);\n const answerCorrectness = await getCorrectness(normalizedQuestion, session, env);\n\n const { mode, role } = env || {};\n\n const {\n categories,\n categoriesPerRow,\n choicesLabel,\n choicesPosition,\n correctResponse,\n feedback,\n feedbackEnabled,\n promptEnabled,\n prompt,\n removeTilesAfterPlacing,\n rowLabels,\n rationaleEnabled,\n rationale,\n note,\n teacherInstructionsEnabled,\n teacherInstructions,\n } = normalizedQuestion;\n let { choices } = normalizedQuestion;\n let fb;\n\n const lockChoiceOrder = lockChoices(normalizedQuestion, session, env);\n\n const filteredCorrectResponse = correctResponse.map(response => {\n const filteredChoices = (response.choices || []).filter(choice => choice !== 'null');\n return { ...response, choices: filteredChoices};\n });\n\n if (mode === 'evaluate' && feedbackEnabled) {\n fb = await getFeedbackForCorrectness(\n answerCorrectness,\n feedback\n );\n }\n\n if (!lockChoiceOrder) {\n choices = await getShuffledChoices(choices, session, updateSession, 'id');\n }\n\n const alternates = getAlternates(filteredCorrectResponse);\n const out = {\n categories: categories || [],\n categoriesPerRow: categoriesPerRow || 2,\n correctness: answerCorrectness,\n choices: choices || [],\n choicesLabel: choicesLabel || '',\n choicesPosition,\n disabled: mode !== 'gather',\n feedback: fb,\n lockChoiceOrder,\n prompt: promptEnabled ? prompt : null,\n removeTilesAfterPlacing,\n rowLabels,\n note,\n env,\n showNote: alternates && alternates.length > 0,\n correctResponse: mode === 'evaluate' ? filteredCorrectResponse : undefined,\n };\n\n if (role === 'instructor' && (mode === 'view' || mode === 'evaluate')) {\n out.rationale = rationaleEnabled ? rationale : null;\n out.teacherInstructions = teacherInstructionsEnabled\n ? teacherInstructions\n : null;\n } else {\n out.rationale = null;\n out.teacherInstructions = null;\n }\n\n resolve(out);\n });\n\nexport const outcome = (question, session, env) => {\n if (env.mode !== 'evaluate') {\n return Promise.reject(\n new Error('Can not call outcome when mode is not evaluate')\n );\n } else {\n return new Promise((resolve) => {\n resolve({\n score: getTotalScore(question, session, env),\n empty: !session || isEmpty(session),\n });\n });\n }\n};\n\nexport const createCorrectResponseSession = (question, env) => {\n return new Promise((resolve) => {\n const { mode, role } = env || {};\n\n if (mode !== 'evaluate' && role === 'instructor') {\n const { correctResponse } = question;\n\n resolve({ answers: correctResponse, id: 1 });\n } else {\n return resolve(null);\n }\n });\n};\n\nexport const validate = (model = {}, config = {}) => {\n const { categories, choices, correctResponse } = model;\n const { minChoices = 1, maxChoices, maxCategories } = config;\n const reversedChoices = [ ...choices || []].reverse();\n const errors = {};\n const choicesErrors = {};\n\n reversedChoices.forEach((choice, index) => {\n const { id, content } = choice;\n\n if (content === '' || content === '<div></div>') {\n choicesErrors[id] = 'Content should not be empty.';\n } else {\n const identicalAnswer = reversedChoices.slice(index + 1).some(c => c.content === content);\n\n if (identicalAnswer) {\n choicesErrors[id] = 'Content should be unique.';\n }\n }\n });\n\n const nbOfCategories = (categories || []).length;\n const nbOfChoices = (choices || []).length\n\n if (nbOfCategories > maxCategories) {\n errors.categoriesError = `No more than ${maxCategories} categories should be defined.`;\n } else if (nbOfCategories < 1) {\n errors.categoriesError = 'There should be at least 1 category defined.';\n }\n\n if (nbOfChoices < minChoices) {\n errors.choicesError = `There should be at least ${minChoices} choices defined.`;\n } else if (nbOfChoices > maxChoices) {\n errors.choicesError = `No more than ${maxChoices} choices should be defined.`;\n }\n\n if (nbOfChoices && nbOfCategories) {\n let hasAssociations = false;\n\n (correctResponse || []).forEach(response => {\n const { choices = [], alternateResponses = [] } = response;\n\n if (choices.length) {\n hasAssociations = true;\n } else {\n alternateResponses.forEach(alternate => {\n if ((alternate || []).length) {\n hasAssociations = true;\n }\n });\n }\n });\n\n if (!hasAssociations) {\n errors.associationError = 'At least one token should be assigned to at least one category.';\n }\n }\n\n if (!isEmpty(choicesErrors)) {\n errors.choicesErrors = choicesErrors;\n }\n\n return errors;\n};\n"],"file":"index.js"}
|
|
1
|
+
{"version":3,"sources":["../src/index.js"],"names":["getPartialScore","correctResponse","builtCategories","reduce","acc","choices","placements","length","score","filter","ch","correct","maxScore","extraPlacements","totalScore","parseFloat","toFixed","getAlternates","map","c","alternateResponses","alternate","getTotalScore","question","session","env","Object","keys","categories","answers","alternates","enabled","partialScoring","getCorrectness","Promise","resolve","mode","undefined","createDefaultModel","model","defaults","normalize","updateSession","normalizedQuestion","answerCorrectness","role","categoriesPerRow","choicesLabel","choicesPosition","feedback","feedbackEnabled","promptEnabled","prompt","removeTilesAfterPlacing","rowLabels","rationaleEnabled","rationale","note","teacherInstructionsEnabled","teacherInstructions","lockChoiceOrder","filteredCorrectResponse","response","filteredChoices","choice","fb","out","correctness","disabled","showNote","outcome","reject","Error","empty","createCorrectResponseSession","id","validate","config","minChoices","maxChoices","maxCategories","reversedChoices","reverse","errors","choicesErrors","forEach","index","content","identicalAnswer","slice","some","nbOfCategories","nbOfChoices","categoriesError","choicesError","hasAssociations","associationError"],"mappings":"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","sourcesContent":["import isEmpty from 'lodash/isEmpty';\nimport { buildState, score } from '@pie-lib/categorize';\nimport { getFeedbackForCorrectness } from '@pie-lib/feedback';\nimport {\n lockChoices,\n getShuffledChoices,\n partialScoring,\n} from '@pie-lib/controller-utils';\nimport defaults from './defaults';\n\n// eslint-disable-next-line no-console\n\nexport { score };\n\nexport const getPartialScore = (correctResponse, builtCategories) => {\n // in the resulted best scenario we make a sum with all the correct responses\n // and all the placements\n const { placements, score } = builtCategories.reduce(\n (acc, { choices = [] }) => ({\n placements: acc.placements + choices.length,\n score: acc.score + choices.filter((ch) => ch.correct).length,\n }),\n { placements: 0, score: 0 }\n );\n\n // in the correct response, we make a sum of the max possible score\n const { maxScore } = correctResponse.reduce(\n (acc, { choices }) => ({\n maxScore: acc.maxScore + choices.length,\n }),\n { maxScore: 0 }\n );\n\n // if there are any extra placements, we subtract from the obtained score\n const extraPlacements = placements > maxScore ? placements - maxScore : 0;\n const totalScore = (score - extraPlacements) / maxScore;\n\n return totalScore < 0 ? 0 : parseFloat(totalScore.toFixed(2));\n};\n\nconst getAlternates = correctResponse => correctResponse\n .map((c) => c.alternateResponses)\n .filter((alternate) => alternate);\n\nexport const getTotalScore = (question, session, env) => {\n if (!session) {\n return 0;\n }\n\n if (Object.keys(session).length === 0) {\n return 0;\n }\n const { categories, choices } = question || {};\n let { correctResponse } = question || {};\n let { answers } = session || {};\n answers = answers || [];\n correctResponse = correctResponse || [];\n\n // this function is used in pie-ui/categorize as well, in order to get the best scenario\n // so we get the best scenario and calculate the score\n const { categories: builtCategories, correct } = buildState(\n categories,\n choices,\n answers,\n correctResponse\n );\n\n const alternates = getAlternates(correctResponse);\n const enabled = partialScoring.enabled(question, env);\n\n // if there are any alternates, there will be no partial scoring!\n if (enabled && !alternates.length) {\n // we apply partial scoring\n return getPartialScore(correctResponse, builtCategories);\n }\n\n // else we apply dichotomous\n return correct ? 1 : 0;\n};\n\nexport const getCorrectness = (question, session, env) => {\n return new Promise((resolve) => {\n if (env.mode === 'evaluate') {\n const score = getTotalScore(question, session, env);\n if (score === 1) {\n resolve('correct');\n } else if (score === 0) {\n resolve('incorrect');\n } else {\n resolve('partially-correct');\n }\n } else {\n resolve(undefined);\n }\n });\n};\n\nexport const createDefaultModel = (model = {}) =>\n new Promise((resolve) => {\n resolve({\n ...defaults,\n ...model,\n });\n });\n\nexport const normalize = (question) => ({\n ...defaults,\n ...question,\n});\n\n/**\n *\n * @param {*} question\n * @param {*} session\n * @param {*} env\n * @param {*} updateSession - optional - a function that will set the properties passed into it on the session.\n */\nexport const model = (question, session, env, updateSession) =>\n new Promise(async (resolve) => {\n const normalizedQuestion = normalize(question);\n const answerCorrectness = await getCorrectness(normalizedQuestion, session, env);\n\n const { mode, role } = env || {};\n\n const {\n categories,\n categoriesPerRow,\n choicesLabel,\n choicesPosition,\n correctResponse,\n feedback,\n feedbackEnabled,\n promptEnabled,\n prompt,\n removeTilesAfterPlacing,\n rowLabels,\n rationaleEnabled,\n rationale,\n note,\n teacherInstructionsEnabled,\n teacherInstructions,\n } = normalizedQuestion;\n let { choices } = normalizedQuestion;\n let fb;\n\n const lockChoiceOrder = lockChoices(normalizedQuestion, session, env);\n\n const filteredCorrectResponse = correctResponse.map(response => {\n const filteredChoices = (response.choices || []).filter(choice => choice !== 'null');\n return { ...response, choices: filteredChoices};\n });\n\n if (mode === 'evaluate' && feedbackEnabled) {\n fb = await getFeedbackForCorrectness(\n answerCorrectness,\n feedback\n );\n }\n\n if (!lockChoiceOrder) {\n choices = await getShuffledChoices(choices, session, updateSession, 'id');\n }\n\n const alternates = getAlternates(filteredCorrectResponse);\n const out = {\n categories: categories || [],\n categoriesPerRow: categoriesPerRow || 2,\n correctness: answerCorrectness,\n choices: choices || [],\n choicesLabel: choicesLabel || '',\n choicesPosition,\n disabled: mode !== 'gather',\n feedback: fb,\n lockChoiceOrder,\n prompt: promptEnabled ? prompt : null,\n removeTilesAfterPlacing,\n rowLabels,\n note,\n env,\n showNote: alternates && alternates.length > 0,\n correctResponse: mode === 'evaluate' ? filteredCorrectResponse : undefined,\n };\n\n if (role === 'instructor' && (mode === 'view' || mode === 'evaluate')) {\n out.rationale = rationaleEnabled ? rationale : null;\n out.teacherInstructions = teacherInstructionsEnabled\n ? teacherInstructions\n : null;\n } else {\n out.rationale = null;\n out.teacherInstructions = null;\n }\n\n resolve(out);\n });\n\nexport const outcome = (question, session, env) => {\n if (env.mode !== 'evaluate') {\n return Promise.reject(\n new Error('Can not call outcome when mode is not evaluate')\n );\n } else {\n return new Promise((resolve) => {\n resolve({\n score: getTotalScore(question, session, env),\n empty: !session || isEmpty(session),\n });\n });\n }\n};\n\nexport const createCorrectResponseSession = (question, env) => {\n return new Promise((resolve) => {\n const { mode, role } = env || {};\n\n if (mode !== 'evaluate' && role === 'instructor') {\n const { correctResponse } = question;\n\n resolve({ answers: correctResponse, id: 1 });\n } else {\n return resolve(null);\n }\n });\n};\n\nexport const validate = (model = {}, config = {}) => {\n const { categories, choices, correctResponse } = model;\n const { minChoices = 1, maxChoices, maxCategories } = config;\n const reversedChoices = [ ...choices || []].reverse();\n const errors = {};\n const choicesErrors = {};\n\n reversedChoices.forEach((choice, index) => {\n const { id, content } = choice;\n\n if (content === '' || content === '<div></div>') {\n choicesErrors[id] = 'Content should not be empty.';\n } else {\n const identicalAnswer = reversedChoices.slice(index + 1).some(c => c.content === content);\n\n if (identicalAnswer) {\n choicesErrors[id] = 'Content should be unique.';\n }\n }\n });\n\n const nbOfCategories = (categories || []).length;\n const nbOfChoices = (choices || []).length\n\n if (nbOfCategories > maxCategories) {\n errors.categoriesError = `No more than ${maxCategories} categories should be defined.`;\n } else if (nbOfCategories < 1) {\n errors.categoriesError = 'There should be at least 1 category defined.';\n }\n\n if (nbOfChoices < minChoices) {\n errors.choicesError = `There should be at least ${minChoices} choices defined.`;\n } else if (nbOfChoices > maxChoices) {\n errors.choicesError = `No more than ${maxChoices} choices should be defined.`;\n }\n\n if (nbOfChoices && nbOfCategories) {\n let hasAssociations = false;\n\n (correctResponse || []).forEach(response => {\n const { choices = [], alternateResponses = [] } = response;\n\n if (choices.length) {\n hasAssociations = true;\n } else {\n alternateResponses.forEach(alternate => {\n if ((alternate || []).length) {\n hasAssociations = true;\n }\n });\n }\n });\n\n if (!hasAssociations) {\n errors.associationError = 'At least one token should be assigned to at least one category.';\n }\n }\n\n if (!isEmpty(choicesErrors)) {\n errors.choicesErrors = choicesErrors;\n }\n\n return errors;\n};\n"],"file":"index.js"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.multiplePlacements = void 0;
|
|
7
|
+
// used in configure too, for consistency modify it there too
|
|
8
|
+
var multiplePlacements = {
|
|
9
|
+
enabled: 'Yes',
|
|
10
|
+
disabled: 'No',
|
|
11
|
+
perChoice: 'Set Per Choice'
|
|
12
|
+
};
|
|
13
|
+
exports.multiplePlacements = multiplePlacements;
|
|
14
|
+
//# sourceMappingURL=utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/utils.js"],"names":["multiplePlacements","enabled","disabled","perChoice"],"mappings":";;;;;;AAAA;AACO,IAAMA,kBAAkB,GAAG;AAAEC,EAAAA,OAAO,EAAE,KAAX;AAAkBC,EAAAA,QAAQ,EAAE,IAA5B;AAAkCC,EAAAA,SAAS,EAAE;AAA7C,CAA3B","sourcesContent":["// used in configure too, for consistency modify it there too\nexport const multiplePlacements = { enabled: 'Yes', disabled: 'No', perChoice: 'Set Per Choice' };\n"],"file":"utils.js"}
|
package/controller/package.json
CHANGED
package/package.json
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
"publishConfig": {
|
|
5
5
|
"access": "public"
|
|
6
6
|
},
|
|
7
|
-
"version": "7.
|
|
7
|
+
"version": "7.3.0",
|
|
8
8
|
"description": "",
|
|
9
9
|
"author": "pie framework developers",
|
|
10
10
|
"license": "ISC",
|
|
@@ -24,7 +24,7 @@
|
|
|
24
24
|
"react-dnd": "^9.3.2",
|
|
25
25
|
"react-dom": "^16.8.1"
|
|
26
26
|
},
|
|
27
|
-
"gitHead": "
|
|
27
|
+
"gitHead": "19adc2ec317c22a14f9962feb1f92cddb8e46838",
|
|
28
28
|
"scripts": {
|
|
29
29
|
"postpublish": "../../scripts/postpublish"
|
|
30
30
|
},
|