@pie-element/categorize 7.3.1-next.76 → 7.3.1-next.88
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/configure/lib/design/categories/alternateResponses.js +9 -1
- package/configure/lib/design/categories/alternateResponses.js.map +1 -1
- package/configure/lib/design/categories/category.js +18 -3
- package/configure/lib/design/categories/category.js.map +1 -1
- package/configure/lib/design/categories/index.js +3 -1
- package/configure/lib/design/categories/index.js.map +1 -1
- package/configure/lib/design/index.js +0 -1
- package/configure/lib/design/index.js.map +1 -1
- package/controller/lib/index.js +61 -6
- package/controller/lib/index.js.map +1 -1
- package/controller/lib/utils.js +39 -2
- package/controller/lib/utils.js.map +1 -1
- package/package.json +2 -2
|
@@ -130,6 +130,7 @@ var AlternateResponses = /*#__PURE__*/function (_React$Component) {
|
|
|
130
130
|
var _this2 = this;
|
|
131
131
|
|
|
132
132
|
var _this$props3 = this.props,
|
|
133
|
+
altIndex = _this$props3.altIndex,
|
|
133
134
|
model = _this$props3.model,
|
|
134
135
|
classes = _this$props3.classes,
|
|
135
136
|
className = _this$props3.className,
|
|
@@ -137,10 +138,16 @@ var AlternateResponses = /*#__PURE__*/function (_React$Component) {
|
|
|
137
138
|
imageSupport = _this$props3.imageSupport,
|
|
138
139
|
spellCheck = _this$props3.spellCheck,
|
|
139
140
|
uploadSoundSupport = _this$props3.uploadSoundSupport;
|
|
140
|
-
var categoriesPerRow = model.categoriesPerRow
|
|
141
|
+
var categoriesPerRow = model.categoriesPerRow,
|
|
142
|
+
errors = model.errors;
|
|
143
|
+
|
|
144
|
+
var _ref = errors || {},
|
|
145
|
+
duplicateAlternate = _ref.duplicateAlternate;
|
|
146
|
+
|
|
141
147
|
var holderStyle = {
|
|
142
148
|
gridTemplateColumns: "repeat(".concat(categoriesPerRow, ", 1fr)")
|
|
143
149
|
};
|
|
150
|
+
var isDuplicated = duplicateAlternate ? duplicateAlternate.index === altIndex : false;
|
|
144
151
|
return /*#__PURE__*/_react["default"].createElement("div", {
|
|
145
152
|
className: (0, _classnames["default"])(classes.categories, className)
|
|
146
153
|
}, /*#__PURE__*/_react["default"].createElement("div", {
|
|
@@ -150,6 +157,7 @@ var AlternateResponses = /*#__PURE__*/function (_React$Component) {
|
|
|
150
157
|
return /*#__PURE__*/_react["default"].createElement(_category["default"], {
|
|
151
158
|
key: index,
|
|
152
159
|
imageSupport: imageSupport,
|
|
160
|
+
isDuplicated: isDuplicated && duplicateAlternate.category === category.id,
|
|
153
161
|
category: category,
|
|
154
162
|
spellCheck: spellCheck,
|
|
155
163
|
onAddChoice: _this2.addChoiceToCategory,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/design/categories/alternateResponses.jsx"],"names":["styles","theme","categories","marginBottom","spacing","unit","categoriesHolder","display","gridRowGap","gridColumnGap","row","gridTemplateColumns","alignItems","width","marginTop","rowLabel","gridColumn","rowLabelHolder","AlternateResponses","choice","categoryId","props","altIndex","correctResponse","model","onModelChanged","forEach","a","category","alternateResponses","push","id","filter","altId","classes","className","imageSupport","spellCheck","uploadSoundSupport","categoriesPerRow","holderStyle","
|
|
1
|
+
{"version":3,"sources":["../../../src/design/categories/alternateResponses.jsx"],"names":["styles","theme","categories","marginBottom","spacing","unit","categoriesHolder","display","gridRowGap","gridColumnGap","row","gridTemplateColumns","alignItems","width","marginTop","rowLabel","gridColumn","rowLabelHolder","AlternateResponses","choice","categoryId","props","altIndex","correctResponse","model","onModelChanged","forEach","a","category","alternateResponses","push","id","filter","altId","classes","className","imageSupport","spellCheck","uploadSoundSupport","categoriesPerRow","errors","duplicateAlternate","holderStyle","isDuplicated","index","map","addChoiceToCategory","choiceIndex","deleteChoiceFromCategory","React","Component","PropTypes","number","isRequired","shape","add","func","object","string","array"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;AAAA;;AACA;;AACA;;AACA;;AACA;;;;;;AAEA,IAAMA,MAAM,GAAG,SAATA,MAAS,CAACC,KAAD;AAAA,SAAY;AACzBC,IAAAA,UAAU,EAAE;AACVC,MAAAA,YAAY,EAAEF,KAAK,CAACG,OAAN,CAAcC;AADlB,KADa;AAIzBC,IAAAA,gBAAgB,EAAE;AAChBC,MAAAA,OAAO,EAAE,MADO;AAEhBC,MAAAA,UAAU,YAAKP,KAAK,CAACG,OAAN,CAAcC,IAAnB,OAFM;AAGhBI,MAAAA,aAAa,YAAKR,KAAK,CAACG,OAAN,CAAcC,IAAnB;AAHG,KAJO;AASzBK,IAAAA,GAAG,EAAE;AACHH,MAAAA,OAAO,EAAE,MADN;AAEHI,MAAAA,mBAAmB,EAAE,gBAFlB;AAGHF,MAAAA,aAAa,YAAKR,KAAK,CAACG,OAAN,CAAcC,IAAnB,OAHV;AAIHO,MAAAA,UAAU,EAAE,UAJT;AAKHC,MAAAA,KAAK,EAAE,MALJ;AAMHC,MAAAA,SAAS,EAAEb,KAAK,CAACG,OAAN,CAAcC,IANtB;AAOHF,MAAAA,YAAY,EAAE,IAAIF,KAAK,CAACG,OAAN,CAAcC;AAP7B,KAToB;AAkBzBU,IAAAA,QAAQ,EAAE;AACRC,MAAAA,UAAU,EAAE;AADJ,KAlBe;AAqBzBC,IAAAA,cAAc,EAAE;AACdJ,MAAAA,KAAK,EAAE;AADO;AArBS,GAAZ;AAAA,CAAf;;IA0BaK,kB;;;;;;;;;;;;;;;4GAkBW,UAACC,MAAD,EAASC,UAAT,EAAwB;AAC5C,wBAII,MAAKC,KAJT;AAAA,UACEC,QADF,eACEA,QADF;AAAA,UAEWC,eAFX,eAEEC,KAFF,CAEWD,eAFX;AAAA,UAGEE,cAHF,eAGEA,cAHF;AAMAF,MAAAA,eAAe,CAACG,OAAhB,CAAwB,UAACC,CAAD,EAAO;AAC7B,YAAIA,CAAC,CAACC,QAAF,KAAeR,UAAnB,EAA+B;AAC7BO,UAAAA,CAAC,CAACE,kBAAF,GAAuBF,CAAC,CAACE,kBAAF,IAAwB,EAA/C;;AAEA,cAAI,CAACF,CAAC,CAACE,kBAAF,CAAqBP,QAArB,CAAL,EAAqC;AACnCK,YAAAA,CAAC,CAACE,kBAAF,CAAqBP,QAArB,IAAiC,EAAjC;AACD;;AAEDK,UAAAA,CAAC,CAACE,kBAAF,CAAqBP,QAArB,EAA+BQ,IAA/B,CAAoCX,MAAM,CAACY,EAA3C;AAEA,iBAAOJ,CAAP;AACD;;AAED,eAAOA,CAAP;AACD,OAdD;AAgBAF,MAAAA,cAAc,CAAC;AAAEF,QAAAA,eAAe,EAAfA;AAAF,OAAD,CAAd;AACD,K;iHAE0B,UAACK,QAAD,EAAWT,MAAX,EAAsB;AAC/C,yBAII,MAAKE,KAJT;AAAA,UACEC,QADF,gBACEA,QADF;AAAA,UAEWC,eAFX,gBAEEC,KAFF,CAEWD,eAFX;AAAA,UAGEE,cAHF,gBAGEA,cAHF;AAMAF,MAAAA,eAAe,CAACG,OAAhB,CAAwB,UAACC,CAAD,EAAO;AAC7B,YAAIA,CAAC,CAACC,QAAF,KAAeA,QAAQ,CAACG,EAA5B,EAAgC;AAC9B,cAAIJ,CAAC,CAACE,kBAAF,CAAqBP,QAArB,CAAJ,EAAoC;AAClCK,YAAAA,CAAC,CAACE,kBAAF,CAAqBP,QAArB,IAAiCK,CAAC,CAACE,kBAAF,CAAqBP,QAArB,EAA+BU,MAA/B,CAAsC,UAACC,KAAD;AAAA,qBAAWA,KAAK,KAAKd,MAAM,CAACY,EAA5B;AAAA,aAAtC,CAAjC;AACD;AACF;;AAED,eAAOJ,CAAP;AACD,OARD;AAUAF,MAAAA,cAAc,CAAC;AAAEF,QAAAA,eAAe,EAAfA;AAAF,OAAD,CAAd;AACD,K;;;;;;WAED,kBAAS;AAAA;;AACP,yBASI,KAAKF,KATT;AAAA,UACEC,QADF,gBACEA,QADF;AAAA,UAEEE,KAFF,gBAEEA,KAFF;AAAA,UAGEU,OAHF,gBAGEA,OAHF;AAAA,UAIEC,SAJF,gBAIEA,SAJF;AAAA,UAKEjC,UALF,gBAKEA,UALF;AAAA,UAMEkC,YANF,gBAMEA,YANF;AAAA,UAOEC,UAPF,gBAOEA,UAPF;AAAA,UAQEC,kBARF,gBAQEA,kBARF;AAUA,UAAQC,gBAAR,GAAqCf,KAArC,CAAQe,gBAAR;AAAA,UAA0BC,MAA1B,GAAqChB,KAArC,CAA0BgB,MAA1B;;AACA,iBAA+BA,MAAM,IAAI,EAAzC;AAAA,UAAQC,kBAAR,QAAQA,kBAAR;;AAEA,UAAMC,WAAW,GAAG;AAClB/B,QAAAA,mBAAmB,mBAAY4B,gBAAZ;AADD,OAApB;AAGA,UAAMI,YAAY,GAAGF,kBAAkB,GAAGA,kBAAkB,CAACG,KAAnB,KAA6BtB,QAAhC,GAA2C,KAAlF;AAEA,0BACE;AAAK,QAAA,SAAS,EAAE,4BAAWY,OAAO,CAAChC,UAAnB,EAA+BiC,SAA/B;AAAhB,sBACE;AAAK,QAAA,SAAS,EAAED,OAAO,CAAC5B,gBAAxB;AAA0C,QAAA,KAAK,EAAEoC;AAAjD,SACGxC,UAAU,CAAC2C,GAAX,CAAe,UAACjB,QAAD,EAAWgB,KAAX;AAAA,4BACd,gCAAC,oBAAD;AACE,UAAA,GAAG,EAAEA,KADP;AAEE,UAAA,YAAY,EAAER,YAFhB;AAGE,UAAA,YAAY,EAAEO,YAAY,IAAIF,kBAAkB,CAACb,QAAnB,KAAgCA,QAAQ,CAACG,EAHzE;AAIE,UAAA,QAAQ,EAAEH,QAJZ;AAKE,UAAA,UAAU,EAAES,UALd;AAME,UAAA,WAAW,EAAE,MAAI,CAACS,mBANpB;AAOE,UAAA,cAAc,EAAE,wBAAC3B,MAAD,EAAS4B,WAAT;AAAA,mBAAyB,MAAI,CAACC,wBAAL,CAA8BpB,QAA9B,EAAwCT,MAAxC,EAAgD4B,WAAhD,CAAzB;AAAA,WAPlB;AAQE,UAAA,kBAAkB,EAAET;AARtB,UADc;AAAA,OAAf,CADH,CADF,CADF;AAkBD;;;EArGqCW,kBAAMC,S;;;iCAAjChC,kB,eACQ;AACjBI,EAAAA,QAAQ,EAAE6B,sBAAUC,MAAV,CAAiBC,UADV;AAEjBjB,EAAAA,YAAY,EAAEe,sBAAUG,KAAV,CAAgB;AAC5BC,IAAAA,GAAG,EAAEJ,sBAAUK,IAAV,CAAeH,UADQ;AAE5B,cAAQF,sBAAUK,IAAV,CAAeH;AAFK,GAAhB,CAFG;AAMjBnB,EAAAA,OAAO,EAAEiB,sBAAUM,MAAV,CAAiBJ,UANT;AAOjBlB,EAAAA,SAAS,EAAEgB,sBAAUO,MAPJ;AAQjBxD,EAAAA,UAAU,EAAEiD,sBAAUQ,KARL;AASjBlC,EAAAA,cAAc,EAAE0B,sBAAUK,IATT;AAUjBhC,EAAAA,KAAK,EAAE2B,sBAAUM,MAAV,CAAiBJ,UAVP;AAWjBf,EAAAA,kBAAkB,EAAEa,sBAAUG,KAAV,CAAgB;AAClCC,IAAAA,GAAG,EAAEJ,sBAAUK,IAAV,CAAeH,UADc;AAElC,cAAQF,sBAAUK,IAAV,CAAeH;AAFW,GAAhB;AAXH,C;;eAuGN,wBAAWrD,MAAX,EAAmBkB,kBAAnB,C","sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\nimport { withStyles } from '@material-ui/core/styles';\nimport classNames from 'classnames';\nimport Category from './category';\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});\n\nexport class AlternateResponses extends React.Component {\n static propTypes = {\n altIndex: PropTypes.number.isRequired,\n imageSupport: 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 uploadSoundSupport: PropTypes.shape({\n add: PropTypes.func.isRequired,\n delete: PropTypes.func.isRequired,\n }),\n };\n\n addChoiceToCategory = (choice, categoryId) => {\n const {\n altIndex,\n model: { correctResponse },\n onModelChanged,\n } = this.props;\n\n correctResponse.forEach((a) => {\n if (a.category === categoryId) {\n a.alternateResponses = a.alternateResponses || [];\n\n if (!a.alternateResponses[altIndex]) {\n a.alternateResponses[altIndex] = [];\n }\n\n a.alternateResponses[altIndex].push(choice.id);\n\n return a;\n }\n\n return a;\n });\n\n onModelChanged({ correctResponse });\n };\n\n deleteChoiceFromCategory = (category, choice) => {\n const {\n altIndex,\n model: { correctResponse },\n onModelChanged,\n } = this.props;\n\n correctResponse.forEach((a) => {\n if (a.category === category.id) {\n if (a.alternateResponses[altIndex]) {\n a.alternateResponses[altIndex] = a.alternateResponses[altIndex].filter((altId) => altId !== choice.id);\n }\n }\n\n return a;\n });\n\n onModelChanged({ correctResponse });\n };\n\n render() {\n const {\n altIndex,\n model,\n classes,\n className,\n categories,\n imageSupport,\n spellCheck,\n uploadSoundSupport,\n } = this.props;\n const { categoriesPerRow, errors } = model;\n const { duplicateAlternate } = errors || {};\n\n const holderStyle = {\n gridTemplateColumns: `repeat(${categoriesPerRow}, 1fr)`,\n };\n const isDuplicated = duplicateAlternate ? duplicateAlternate.index === altIndex : false;\n\n return (\n <div className={classNames(classes.categories, className)}>\n <div className={classes.categoriesHolder} style={holderStyle}>\n {categories.map((category, index) => (\n <Category\n key={index}\n imageSupport={imageSupport}\n isDuplicated={isDuplicated && duplicateAlternate.category === category.id}\n category={category}\n spellCheck={spellCheck}\n onAddChoice={this.addChoiceToCategory}\n onDeleteChoice={(choice, choiceIndex) => this.deleteChoiceFromCategory(category, choice, choiceIndex)}\n uploadSoundSupport={uploadSoundSupport}\n />\n ))}\n </div>\n </div>\n );\n }\n}\n\nexport default withStyles(styles)(AlternateResponses);\n"],"file":"alternateResponses.js"}
|
|
@@ -75,6 +75,8 @@ var Category = /*#__PURE__*/function (_React$Component) {
|
|
|
75
75
|
category = _this$props2.category,
|
|
76
76
|
classes = _this$props2.classes,
|
|
77
77
|
className = _this$props2.className,
|
|
78
|
+
error = _this$props2.error,
|
|
79
|
+
isDuplicated = _this$props2.isDuplicated,
|
|
78
80
|
onChange = _this$props2.onChange,
|
|
79
81
|
onDelete = _this$props2.onDelete,
|
|
80
82
|
onDeleteChoice = _this$props2.onDeleteChoice,
|
|
@@ -86,9 +88,10 @@ var Category = /*#__PURE__*/function (_React$Component) {
|
|
|
86
88
|
maxImageHeight = _this$props2.maxImageHeight,
|
|
87
89
|
uploadSoundSupport = _this$props2.uploadSoundSupport;
|
|
88
90
|
return /*#__PURE__*/_react["default"].createElement(_Card["default"], {
|
|
89
|
-
className: (0, _classnames["default"])(classes.category, className)
|
|
90
|
-
}, onChange && /*#__PURE__*/_react["default"].createElement(_inputHeader["default"], {
|
|
91
|
+
className: (0, _classnames["default"])(classes.category, className, (0, _defineProperty2["default"])({}, classes.duplicateError, isDuplicated))
|
|
92
|
+
}, onChange && /*#__PURE__*/_react["default"].createElement("span", null, /*#__PURE__*/_react["default"].createElement(_inputHeader["default"], {
|
|
91
93
|
label: category.label,
|
|
94
|
+
error: error,
|
|
92
95
|
onChange: this.changeLabel,
|
|
93
96
|
onDelete: onDelete,
|
|
94
97
|
imageSupport: imageSupport,
|
|
@@ -97,7 +100,9 @@ var Category = /*#__PURE__*/function (_React$Component) {
|
|
|
97
100
|
maxImageWidth: maxImageWidth,
|
|
98
101
|
maxImageHeight: maxImageHeight,
|
|
99
102
|
uploadSoundSupport: uploadSoundSupport
|
|
100
|
-
}), /*#__PURE__*/_react["default"].createElement(
|
|
103
|
+
}), error && /*#__PURE__*/_react["default"].createElement("div", {
|
|
104
|
+
className: classes.errorText
|
|
105
|
+
}, error)), /*#__PURE__*/_react["default"].createElement(_droppablePlaceholder["default"], {
|
|
101
106
|
className: classes.placeHolder,
|
|
102
107
|
choices: category.choices,
|
|
103
108
|
onDeleteChoice: onDeleteChoice,
|
|
@@ -119,6 +124,8 @@ exports.Category = Category;
|
|
|
119
124
|
classes: _propTypes["default"].object.isRequired,
|
|
120
125
|
className: _propTypes["default"].string,
|
|
121
126
|
category: _propTypes["default"].object.isRequired,
|
|
127
|
+
error: _propTypes["default"].string,
|
|
128
|
+
isDuplicated: _propTypes["default"].bool,
|
|
122
129
|
onChange: _propTypes["default"].func,
|
|
123
130
|
onDelete: _propTypes["default"].func,
|
|
124
131
|
onDeleteChoice: _propTypes["default"].func,
|
|
@@ -160,6 +167,14 @@ var styles = function styles(theme) {
|
|
|
160
167
|
padding: theme.spacing.unit,
|
|
161
168
|
overflow: 'visible'
|
|
162
169
|
},
|
|
170
|
+
duplicateError: {
|
|
171
|
+
border: '1px solid red'
|
|
172
|
+
},
|
|
173
|
+
errorText: {
|
|
174
|
+
fontSize: '11px',
|
|
175
|
+
color: 'red',
|
|
176
|
+
paddingBottom: '5px'
|
|
177
|
+
},
|
|
163
178
|
editor: {
|
|
164
179
|
flex: '1',
|
|
165
180
|
paddingBottom: theme.spacing.unit * 2
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/design/categories/category.jsx"],"names":["Category","l","props","category","onChange","label","classes","className","onDelete","onDeleteChoice","onAddChoice","imageSupport","spellCheck","toolbarOpts","maxImageWidth","maxImageHeight","uploadSoundSupport","changeLabel","placeHolder","choices","id","actions","React","Component","PropTypes","object","isRequired","string","func","shape","add","styles","theme","minHeight","deleteButton","margin","padding","paddingBottom","paddingTop","spacing","unit","iconButtonRoot","width","height","header","display","justifyContent","overflow","editor","flex"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;AAAA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AAEA;;;;;;IAEaA,Q;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"sources":["../../../src/design/categories/category.jsx"],"names":["Category","l","props","category","onChange","label","classes","className","error","isDuplicated","onDelete","onDeleteChoice","onAddChoice","imageSupport","spellCheck","toolbarOpts","maxImageWidth","maxImageHeight","uploadSoundSupport","duplicateError","changeLabel","errorText","placeHolder","choices","id","actions","React","Component","PropTypes","object","isRequired","string","bool","func","shape","add","styles","theme","minHeight","deleteButton","margin","padding","paddingBottom","paddingTop","spacing","unit","iconButtonRoot","width","height","header","display","justifyContent","overflow","border","fontSize","color","editor","flex"],"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 InputHeader from '../input-header';\nimport CardActions from '@material-ui/core/CardActions';\nimport { DeleteButton } from '../buttons';\n\nimport PlaceHolder from './droppable-placeholder';\n\nexport class Category extends React.Component {\n static propTypes = {\n classes: PropTypes.object.isRequired,\n className: PropTypes.string,\n category: PropTypes.object.isRequired,\n error: PropTypes.string,\n isDuplicated: PropTypes.bool,\n onChange: PropTypes.func,\n onDelete: PropTypes.func,\n onDeleteChoice: PropTypes.func,\n onAddChoice: PropTypes.func,\n imageSupport: PropTypes.shape({\n add: PropTypes.func.isRequired,\n delete: PropTypes.func.isRequired,\n }),\n toolbarOpts: PropTypes.object,\n uploadSoundSupport: PropTypes.shape({\n add: PropTypes.func.isRequired,\n delete: PropTypes.func.isRequired,\n }),\n };\n\n static defaultProps = {};\n\n changeLabel = (l) => {\n const { category, onChange } = this.props;\n category.label = l;\n onChange(category);\n };\n\n render() {\n const {\n category,\n classes,\n className,\n error,\n isDuplicated,\n onChange,\n onDelete,\n onDeleteChoice,\n onAddChoice,\n imageSupport,\n spellCheck,\n toolbarOpts,\n maxImageWidth,\n maxImageHeight,\n uploadSoundSupport,\n } = this.props;\n return (\n <Card className={classNames(classes.category, className, {\n [classes.duplicateError]: isDuplicated\n })}>\n {onChange && (\n <span>\n <InputHeader\n label={category.label}\n error={error}\n onChange={this.changeLabel}\n onDelete={onDelete}\n imageSupport={imageSupport}\n toolbarOpts={toolbarOpts}\n spellCheck={spellCheck}\n maxImageWidth={maxImageWidth}\n maxImageHeight={maxImageHeight}\n uploadSoundSupport={uploadSoundSupport}\n />\n {error && <div className={classes.errorText}>{error}</div>}\n </span>\n )\n }\n <PlaceHolder\n className={classes.placeHolder}\n choices={category.choices}\n onDeleteChoice={onDeleteChoice}\n onDropChoice={onAddChoice}\n categoryId={category.id}\n />\n {onDelete && (\n <CardActions className={classes.actions}>\n <DeleteButton label={'delete'} onClick={onDelete} />\n </CardActions>\n )}\n </Card>\n );\n }\n}\nconst styles = (theme) => ({\n placeHolder: {\n minHeight: '100px',\n },\n deleteButton: {\n margin: 0,\n },\n actions: {\n padding: 0,\n paddingBottom: 0,\n paddingTop: theme.spacing.unit,\n },\n iconButtonRoot: {\n width: 'auto',\n height: 'auto',\n },\n header: {\n display: 'flex',\n justifyContent: 'space-between',\n },\n category: {\n padding: theme.spacing.unit,\n overflow: 'visible',\n },\n duplicateError: {\n border: '1px solid red',\n },\n errorText: {\n fontSize: '11px',\n color: 'red',\n paddingBottom: '5px'\n },\n editor: {\n flex: '1',\n paddingBottom: theme.spacing.unit * 2,\n },\n});\nexport default withStyles(styles)(Category);\n"],"file":"category.js"}
|
|
@@ -256,7 +256,8 @@ var Categories = /*#__PURE__*/function (_React$Component) {
|
|
|
256
256
|
|
|
257
257
|
var _ref2 = errors || {},
|
|
258
258
|
associationError = _ref2.associationError,
|
|
259
|
-
categoriesError = _ref2.categoriesError
|
|
259
|
+
categoriesError = _ref2.categoriesError,
|
|
260
|
+
categoriesErrors = _ref2.categoriesErrors;
|
|
260
261
|
|
|
261
262
|
var _ref3 = configuration || {},
|
|
262
263
|
maxCategories = _ref3.maxCategories,
|
|
@@ -319,6 +320,7 @@ var Categories = /*#__PURE__*/function (_React$Component) {
|
|
|
319
320
|
}), /*#__PURE__*/_react["default"].createElement(_category["default"], {
|
|
320
321
|
imageSupport: imageSupport,
|
|
321
322
|
category: category,
|
|
323
|
+
error: categoriesErrors && categoriesErrors[category.id],
|
|
322
324
|
onChange: _this2.change,
|
|
323
325
|
onDelete: function onDelete() {
|
|
324
326
|
return _this2["delete"](category);
|
|
@@ -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","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)(\n ({\n categoriesPerRow,\n classes,\n markup,\n imageSupport,\n onChange,\n toolbarOpts,\n spellCheck,\n maxImageWidth,\n maxImageHeight,\n uploadSoundSupport,\n }) => {\n return (\n <div\n style={{\n gridColumn: `1/${categoriesPerRow + 1}`,\n width: '100%',\n }}\n >\n <Typography className={classes.text}>Row Label</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);\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(\n model.categories.map((a) => a.id),\n 0,\n );\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(category.id, model.correctResponse);\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(choice.id, undefined, categoryId, 0, model.correctResponse);\n\n onModelChanged({ correctResponse });\n };\n\n deleteChoiceFromCategory = (category, choice, choiceIndex) => {\n const { model, onModelChanged } = this.props;\n const correctResponse = removeChoiceFromCategory(choice.id, category.id, choiceIndex, model.correctResponse);\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 { maxCategories, maxImageWidth = {}, maxImageHeight = {} } = 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={\n <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 }\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 key={index}>\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) => this.deleteChoiceFromCategory(category, choice, choiceIndex)}\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","categoriesErrors","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)(\n ({\n categoriesPerRow,\n classes,\n markup,\n imageSupport,\n onChange,\n toolbarOpts,\n spellCheck,\n maxImageWidth,\n maxImageHeight,\n uploadSoundSupport,\n }) => {\n return (\n <div\n style={{\n gridColumn: `1/${categoriesPerRow + 1}`,\n width: '100%',\n }}\n >\n <Typography className={classes.text}>Row Label</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);\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(\n model.categories.map((a) => a.id),\n 0,\n );\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(category.id, model.correctResponse);\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(choice.id, undefined, categoryId, 0, model.correctResponse);\n\n onModelChanged({ correctResponse });\n };\n\n deleteChoiceFromCategory = (category, choice, choiceIndex) => {\n const { model, onModelChanged } = this.props;\n const correctResponse = removeChoiceFromCategory(choice.id, category.id, choiceIndex, model.correctResponse);\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, categoriesErrors } = 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={\n <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 }\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 key={index}>\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 error={categoriesErrors && categoriesErrors[category.id]}\n onChange={this.change}\n onDelete={() => this.delete(category)}\n onAddChoice={this.addChoiceToCategory}\n toolbarOpts={toolbarOpts}\n spellCheck={spellCheck}\n onDeleteChoice={(choice, choiceIndex) => this.deleteChoiceFromCategory(category, choice, choiceIndex)}\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"}
|
|
@@ -228,7 +228,6 @@ var Design = /*#__PURE__*/function (_React$Component) {
|
|
|
228
228
|
rationaleEnabled = _ref2.rationaleEnabled,
|
|
229
229
|
feedbackEnabled = _ref2.feedbackEnabled,
|
|
230
230
|
spellCheckEnabled = _ref2.spellCheckEnabled,
|
|
231
|
-
errors = _ref2.errors,
|
|
232
231
|
rubricEnabled = _ref2.rubricEnabled;
|
|
233
232
|
|
|
234
233
|
var toolbarOpts = {};
|
|
@@ -1 +1 @@
|
|
|
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","choicesPosition","studentInstructions","scoringType","spellCheck","maxImageWidth","maxImageHeight","withRubric","minCategoriesPerRow","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 choicesPosition = {},\n teacherInstructions = {},\n studentInstructions = {},\n rationale = {},\n scoringType = {},\n feedback = {},\n prompt = {},\n spellCheck = {},\n maxImageWidth = {},\n maxImageHeight = {},\n withRubric = {},\n minCategoriesPerRow = 1,\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: minCategoriesPerRow,\n max: 6,\n }),\n choicesPosition:\n choicesPosition.settings &&\n radio(choicesPosition.label, ['below', 'above','left','right']),\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"}
|
|
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","choicesPosition","studentInstructions","scoringType","spellCheck","maxImageWidth","maxImageHeight","withRubric","minCategoriesPerRow","allowMultiplePlacementsEnabled","teacherInstructionsEnabled","promptEnabled","rationaleEnabled","feedbackEnabled","spellCheckEnabled","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 choicesPosition = {},\n teacherInstructions = {},\n studentInstructions = {},\n rationale = {},\n scoringType = {},\n feedback = {},\n prompt = {},\n spellCheck = {},\n maxImageWidth = {},\n maxImageHeight = {},\n withRubric = {},\n minCategoriesPerRow = 1,\n } = configuration || {};\n const {\n allowMultiplePlacementsEnabled,\n teacherInstructionsEnabled,\n promptEnabled,\n rationaleEnabled,\n feedbackEnabled,\n spellCheckEnabled,\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: minCategoriesPerRow,\n max: 6,\n }),\n choicesPosition:\n choicesPosition.settings &&\n radio(choicesPosition.label, ['below', 'above','left','right']),\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/controller/lib/index.js
CHANGED
|
@@ -28,6 +28,8 @@ var _categorize = require("@pie-lib/categorize");
|
|
|
28
28
|
|
|
29
29
|
var _feedback = require("@pie-lib/feedback");
|
|
30
30
|
|
|
31
|
+
var _utils = require("./utils");
|
|
32
|
+
|
|
31
33
|
var _controllerUtils = require("@pie-lib/controller-utils");
|
|
32
34
|
|
|
33
35
|
var _defaults = _interopRequireDefault(require("./defaults"));
|
|
@@ -309,24 +311,47 @@ var validate = function validate() {
|
|
|
309
311
|
correctResponse = model.correctResponse;
|
|
310
312
|
var _config$minChoices = config.minChoices,
|
|
311
313
|
minChoices = _config$minChoices === void 0 ? 1 : _config$minChoices,
|
|
312
|
-
maxChoices = config.maxChoices,
|
|
313
|
-
|
|
314
|
+
_config$maxChoices = config.maxChoices,
|
|
315
|
+
maxChoices = _config$maxChoices === void 0 ? 15 : _config$maxChoices,
|
|
316
|
+
_config$minCategories = config.minCategories,
|
|
317
|
+
minCategories = _config$minCategories === void 0 ? 1 : _config$minCategories,
|
|
318
|
+
_config$maxCategories = config.maxCategories,
|
|
319
|
+
maxCategories = _config$maxCategories === void 0 ? 12 : _config$maxCategories,
|
|
320
|
+
_config$maxLengthPerC = config.maxLengthPerChoice,
|
|
321
|
+
maxLengthPerChoice = _config$maxLengthPerC === void 0 ? 300 : _config$maxLengthPerC,
|
|
322
|
+
_config$maxLengthPerC2 = config.maxLengthPerCategory,
|
|
323
|
+
maxLengthPerCategory = _config$maxLengthPerC2 === void 0 ? 150 : _config$maxLengthPerC2;
|
|
314
324
|
var reversedChoices = (0, _toConsumableArray2["default"])(choices || []).reverse();
|
|
315
325
|
var errors = {};
|
|
316
326
|
var choicesErrors = {};
|
|
327
|
+
var categoriesErrors = {};
|
|
328
|
+
categories.forEach(function (category) {
|
|
329
|
+
var id = category.id,
|
|
330
|
+
label = category.label;
|
|
331
|
+
var parsedLabel = label.replace(/<(?:.|\n)*?>/gm, '');
|
|
332
|
+
|
|
333
|
+
if (parsedLabel.length > maxLengthPerCategory) {
|
|
334
|
+
categoriesErrors[id] = "Category labels should be no more than ".concat(maxLengthPerCategory, " characters long.");
|
|
335
|
+
}
|
|
336
|
+
});
|
|
317
337
|
reversedChoices.forEach(function (choice, index) {
|
|
318
338
|
var id = choice.id,
|
|
319
339
|
content = choice.content;
|
|
340
|
+
var parsedContent = content.replace(/<(?:.|\n)*?>/gm, '');
|
|
341
|
+
|
|
342
|
+
if (parsedContent.length > maxLengthPerChoice) {
|
|
343
|
+
choicesErrors[id] = "Tokens should be no more than ".concat(maxLengthPerChoice, " characters long.");
|
|
344
|
+
}
|
|
320
345
|
|
|
321
346
|
if (content === '' || content === '<div></div>') {
|
|
322
|
-
choicesErrors[id] = '
|
|
347
|
+
choicesErrors[id] = 'Tokens should not be empty.';
|
|
323
348
|
} else {
|
|
324
349
|
var identicalAnswer = reversedChoices.slice(index + 1).some(function (c) {
|
|
325
350
|
return c.content === content;
|
|
326
351
|
});
|
|
327
352
|
|
|
328
353
|
if (identicalAnswer) {
|
|
329
|
-
choicesErrors[id] = '
|
|
354
|
+
choicesErrors[id] = 'Tokens content should be unique.';
|
|
330
355
|
}
|
|
331
356
|
}
|
|
332
357
|
});
|
|
@@ -335,8 +360,8 @@ var validate = function validate() {
|
|
|
335
360
|
|
|
336
361
|
if (nbOfCategories > maxCategories) {
|
|
337
362
|
errors.categoriesError = "No more than ".concat(maxCategories, " categories should be defined.");
|
|
338
|
-
} else if (nbOfCategories <
|
|
339
|
-
errors.categoriesError =
|
|
363
|
+
} else if (nbOfCategories < minCategories) {
|
|
364
|
+
errors.categoriesError = "There should be at least ".concat(minCategories, " category defined.");
|
|
340
365
|
}
|
|
341
366
|
|
|
342
367
|
if (nbOfChoices < minChoices) {
|
|
@@ -363,6 +388,32 @@ var validate = function validate() {
|
|
|
363
388
|
});
|
|
364
389
|
}
|
|
365
390
|
});
|
|
391
|
+
var duplicateAlternateIndex = -1;
|
|
392
|
+
var duplicateCategory = '';
|
|
393
|
+
(correctResponse || []).forEach(function (response) {
|
|
394
|
+
var _response$choices2 = response.choices,
|
|
395
|
+
choices = _response$choices2 === void 0 ? [] : _response$choices2,
|
|
396
|
+
_response$alternateRe2 = response.alternateResponses,
|
|
397
|
+
alternateResponses = _response$alternateRe2 === void 0 ? [] : _response$alternateRe2,
|
|
398
|
+
category = response.category;
|
|
399
|
+
|
|
400
|
+
if (duplicateAlternateIndex === -1) {
|
|
401
|
+
duplicateAlternateIndex = (0, _utils.isCorrectResponseDuplicated)(choices, alternateResponses);
|
|
402
|
+
|
|
403
|
+
if (duplicateAlternateIndex === -1) {
|
|
404
|
+
duplicateAlternateIndex = (0, _utils.isAlternateDuplicated)(alternateResponses);
|
|
405
|
+
}
|
|
406
|
+
|
|
407
|
+
duplicateCategory = category;
|
|
408
|
+
}
|
|
409
|
+
});
|
|
410
|
+
|
|
411
|
+
if (duplicateAlternateIndex > -1) {
|
|
412
|
+
errors.duplicateAlternate = {
|
|
413
|
+
index: duplicateAlternateIndex,
|
|
414
|
+
category: duplicateCategory
|
|
415
|
+
};
|
|
416
|
+
}
|
|
366
417
|
|
|
367
418
|
if (!hasAssociations) {
|
|
368
419
|
errors.associationError = 'At least one token should be assigned to at least one category.';
|
|
@@ -373,6 +424,10 @@ var validate = function validate() {
|
|
|
373
424
|
errors.choicesErrors = choicesErrors;
|
|
374
425
|
}
|
|
375
426
|
|
|
427
|
+
if (!(0, _isEmpty["default"])(categoriesErrors)) {
|
|
428
|
+
errors.categoriesErrors = categoriesErrors;
|
|
429
|
+
}
|
|
430
|
+
|
|
376
431
|
return errors;
|
|
377
432
|
};
|
|
378
433
|
|
|
@@ -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","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 { lockChoices, getShuffledChoices, partialScoring } 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) =>\n correctResponse.map((c) => c.alternateResponses).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(categories, choices, answers, correctResponse);\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(answerCorrectness, feedback);\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 ? teacherInstructions : 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(new Error('Can not call outcome when mode is not evaluate'));\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","minCategories","maxCategories","maxLengthPerChoice","maxLengthPerCategory","reversedChoices","reverse","errors","choicesErrors","categoriesErrors","forEach","category","label","parsedLabel","replace","index","content","parsedContent","identicalAnswer","slice","some","nbOfCategories","nbOfChoices","categoriesError","choicesError","hasAssociations","duplicateAlternateIndex","duplicateCategory","duplicateAlternate","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 { isAlternateDuplicated, isCorrectResponseDuplicated } from './utils';\nimport { lockChoices, getShuffledChoices, partialScoring } 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) =>\n correctResponse.map((c) => c.alternateResponses).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(categories, choices, answers, correctResponse);\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(answerCorrectness, feedback);\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 ? teacherInstructions : 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(new Error('Can not call outcome when mode is not evaluate'));\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 = 15, minCategories = 1, maxCategories = 12, maxLengthPerChoice = 300, maxLengthPerCategory = 150 } = config;\n const reversedChoices = [ ...choices || []].reverse();\n const errors = {};\n const choicesErrors = {};\n const categoriesErrors = {};\n\n categories.forEach((category) => {\n const {id, label} = category;\n const parsedLabel = label.replace(/<(?:.|\\n)*?>/gm, '');\n if (parsedLabel.length > maxLengthPerCategory){\n categoriesErrors[id] = `Category labels should be no more than ${maxLengthPerCategory} characters long.`;\n }\n });\n\n reversedChoices.forEach((choice, index) => {\n const { id, content } = choice;\n const parsedContent = content.replace(/<(?:.|\\n)*?>/gm, '');\n if (parsedContent.length > maxLengthPerChoice){\n choicesErrors[id] = `Tokens should be no more than ${maxLengthPerChoice} characters long.`;\n }\n if (content === '' || content === '<div></div>') {\n choicesErrors[id] = 'Tokens 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] = 'Tokens 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 < minCategories) {\n errors.categoriesError = `There should be at least ${minCategories} 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 let duplicateAlternateIndex = -1;\n let duplicateCategory = '';\n (correctResponse || []).forEach(response => {\n const { choices = [], alternateResponses = [], category } = response;\n if (duplicateAlternateIndex === -1) {\n duplicateAlternateIndex = isCorrectResponseDuplicated(choices,alternateResponses);\n if (duplicateAlternateIndex === -1) {\n duplicateAlternateIndex = isAlternateDuplicated(alternateResponses);\n }\n duplicateCategory = category;\n }\n });\n\n if (duplicateAlternateIndex > -1) {\n errors.duplicateAlternate = {index:duplicateAlternateIndex, category:duplicateCategory};\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 if (!isEmpty(categoriesErrors)) {\n errors.categoriesErrors = categoriesErrors;\n }\n return errors;\n};\n"],"file":"index.js"}
|
package/controller/lib/utils.js
CHANGED
|
@@ -3,12 +3,49 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
-
exports.multiplePlacements = void 0;
|
|
6
|
+
exports.multiplePlacements = exports.isCorrectResponseDuplicated = exports.isAlternateDuplicated = void 0;
|
|
7
7
|
// used in configure too, for consistency modify it there too
|
|
8
8
|
var multiplePlacements = {
|
|
9
9
|
enabled: 'Yes',
|
|
10
10
|
disabled: 'No',
|
|
11
11
|
perChoice: 'Set Per Choice'
|
|
12
|
-
};
|
|
12
|
+
}; // used to validate the config
|
|
13
|
+
|
|
13
14
|
exports.multiplePlacements = multiplePlacements;
|
|
15
|
+
|
|
16
|
+
var isCorrectResponseDuplicated = function isCorrectResponseDuplicated(choices, alternate) {
|
|
17
|
+
var stringChoices = JSON.stringify(choices.sort());
|
|
18
|
+
var stringAlternate = alternate.filter(function (alternate) {
|
|
19
|
+
return alternate.length > 0;
|
|
20
|
+
}).map(function (alternate) {
|
|
21
|
+
return JSON.stringify(alternate.sort());
|
|
22
|
+
});
|
|
23
|
+
var foundIndexDuplicate = stringAlternate.findIndex(function (alternate) {
|
|
24
|
+
return alternate.length && alternate === stringChoices;
|
|
25
|
+
});
|
|
26
|
+
return foundIndexDuplicate;
|
|
27
|
+
};
|
|
28
|
+
|
|
29
|
+
exports.isCorrectResponseDuplicated = isCorrectResponseDuplicated;
|
|
30
|
+
|
|
31
|
+
var isAlternateDuplicated = function isAlternateDuplicated(alternate) {
|
|
32
|
+
var elementSet = new Set();
|
|
33
|
+
var stringAlternate = alternate.filter(function (alternate) {
|
|
34
|
+
return alternate.length > 0;
|
|
35
|
+
}).map(function (alternate) {
|
|
36
|
+
return JSON.stringify(alternate.sort());
|
|
37
|
+
});
|
|
38
|
+
|
|
39
|
+
for (var i = 0; i < stringAlternate.length; i++) {
|
|
40
|
+
if (elementSet.has(stringAlternate[i]) && stringAlternate[i]) {
|
|
41
|
+
return i;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
elementSet.add(stringAlternate[i]);
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
return -1;
|
|
48
|
+
};
|
|
49
|
+
|
|
50
|
+
exports.isAlternateDuplicated = isAlternateDuplicated;
|
|
14
51
|
//# sourceMappingURL=utils.js.map
|
|
@@ -1 +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"}
|
|
1
|
+
{"version":3,"sources":["../src/utils.js"],"names":["multiplePlacements","enabled","disabled","perChoice","isCorrectResponseDuplicated","choices","alternate","stringChoices","JSON","stringify","sort","stringAlternate","filter","length","map","foundIndexDuplicate","findIndex","isAlternateDuplicated","elementSet","Set","i","has","add"],"mappings":";;;;;;AAAA;AACO,IAAMA,kBAAkB,GAAG;AAAEC,EAAAA,OAAO,EAAE,KAAX;AAAkBC,EAAAA,QAAQ,EAAE,IAA5B;AAAkCC,EAAAA,SAAS,EAAE;AAA7C,CAA3B,C,CAEP;;;;AACO,IAAMC,2BAA2B,GAAG,SAA9BA,2BAA8B,CAACC,OAAD,EAASC,SAAT,EAAuB;AAC9D,MAAMC,aAAa,GAAIC,IAAI,CAACC,SAAL,CAAeJ,OAAO,CAACK,IAAR,EAAf,CAAvB;AACA,MAAMC,eAAe,GAAGL,SAAS,CAACM,MAAV,CAAiB,UAAAN,SAAS;AAAA,WAAIA,SAAS,CAACO,MAAV,GAAmB,CAAvB;AAAA,GAA1B,EAAoDC,GAApD,CAAwD,UAACR,SAAD;AAAA,WAAeE,IAAI,CAACC,SAAL,CAAeH,SAAS,CAACI,IAAV,EAAf,CAAf;AAAA,GAAxD,CAAxB;AACA,MAAMK,mBAAmB,GAAGJ,eAAe,CAACK,SAAhB,CAA0B,UAAAV,SAAS;AAAA,WAAIA,SAAS,CAACO,MAAV,IAAqBP,SAAS,KAAKC,aAAvC;AAAA,GAAnC,CAA5B;AACA,SAAOQ,mBAAP;AACH,CALM;;;;AAOA,IAAME,qBAAqB,GAAG,SAAxBA,qBAAwB,CAACX,SAAD,EAAe;AAChD,MAAMY,UAAU,GAAG,IAAIC,GAAJ,EAAnB;AACA,MAAMR,eAAe,GAAGL,SAAS,CAACM,MAAV,CAAiB,UAAAN,SAAS;AAAA,WAAEA,SAAS,CAACO,MAAV,GAAmB,CAArB;AAAA,GAA1B,EAAkDC,GAAlD,CAAsD,UAACR,SAAD;AAAA,WAAeE,IAAI,CAACC,SAAL,CAAeH,SAAS,CAACI,IAAV,EAAf,CAAf;AAAA,GAAtD,CAAxB;;AACA,OAAK,IAAIU,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGT,eAAe,CAACE,MAApC,EAA4CO,CAAC,EAA7C,EAAiD;AAC7C,QAAIF,UAAU,CAACG,GAAX,CAAeV,eAAe,CAACS,CAAD,CAA9B,KAAsCT,eAAe,CAACS,CAAD,CAAzD,EAA8D;AAC1D,aAAOA,CAAP;AACH;;AACDF,IAAAA,UAAU,CAACI,GAAX,CAAeX,eAAe,CAACS,CAAD,CAA9B;AACH;;AAED,SAAO,CAAC,CAAR;AACH,CAXM","sourcesContent":["// used in configure too, for consistency modify it there too\nexport const multiplePlacements = { enabled: 'Yes', disabled: 'No', perChoice: 'Set Per Choice' };\n\n// used to validate the config\nexport const isCorrectResponseDuplicated = (choices,alternate) => {\n const stringChoices = JSON.stringify(choices.sort());\n const stringAlternate = alternate.filter(alternate => alternate.length > 0).map((alternate) => JSON.stringify(alternate.sort()));\n const foundIndexDuplicate = stringAlternate.findIndex(alternate => alternate.length && alternate === stringChoices);\n return foundIndexDuplicate;\n};\n\nexport const isAlternateDuplicated = (alternate) => {\n const elementSet = new Set();\n const stringAlternate = alternate.filter(alternate=>alternate.length > 0).map((alternate) => JSON.stringify(alternate.sort()));\n for (let i = 0; i < stringAlternate.length; i++) {\n if (elementSet.has(stringAlternate[i]) && stringAlternate[i]) {\n return i;\n }\n elementSet.add(stringAlternate[i]);\n }\n\n return -1;\n};\n"],"file":"utils.js"}
|
package/package.json
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
"publishConfig": {
|
|
5
5
|
"access": "public"
|
|
6
6
|
},
|
|
7
|
-
"version": "7.3.1-next.
|
|
7
|
+
"version": "7.3.1-next.88+35317ee7f",
|
|
8
8
|
"description": "",
|
|
9
9
|
"author": "pie framework developers",
|
|
10
10
|
"license": "ISC",
|
|
@@ -24,7 +24,7 @@
|
|
|
24
24
|
"react-dnd": "^14.0.5",
|
|
25
25
|
"react-dom": "^16.8.1"
|
|
26
26
|
},
|
|
27
|
-
"gitHead": "
|
|
27
|
+
"gitHead": "35317ee7f7bd3990de5f98bdcc36702e3c38a39b",
|
|
28
28
|
"scripts": {
|
|
29
29
|
"postpublish": "../../scripts/postpublish"
|
|
30
30
|
},
|