@pie-element/match 5.3.2-next.98 → 5.4.1-next.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -3,6 +3,33 @@
3
3
  All notable changes to this project will be documented in this file.
4
4
  See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
5
5
 
6
+ # [5.4.0](https://github.com/pie-framework/pie-elements/compare/@pie-element/match@5.3.1...@pie-element/match@5.4.0) (2023-01-05)
7
+
8
+
9
+ ### Bug Fixes
10
+
11
+ * **match:** increase default value of maxLengthQuestionsHeading, maxLengthAnswers, maxLengthFirstColumnHeading ([f663d9d](https://github.com/pie-framework/pie-elements/commit/f663d9daba7998e26d5d8c1849c219d284e2d4bf))
12
+
13
+
14
+ ### Features
15
+
16
+ * added width property in match configuration ([6436fc6](https://github.com/pie-framework/pie-elements/commit/6436fc63b404dc4d25ac55aadcc5b84985421800))
17
+ * update pie-libs ([b174476](https://github.com/pie-framework/pie-elements/commit/b174476729119a0689f1f8adfc8c235246676cab))
18
+ * update pie-libs ([f72c3c8](https://github.com/pie-framework/pie-elements/commit/f72c3c8d8bc9bbf061bb81502317157a63c22972))
19
+ * update pie-libs ([8490729](https://github.com/pie-framework/pie-elements/commit/8490729a2389d36fd3968f0806119fde96577842))
20
+ * **match:** add validation PD-2417 ([157c19b](https://github.com/pie-framework/pie-elements/commit/157c19b4ceee5decfd47c50e23a7004d27136ca0))
21
+ * **match:** added configuration prop to hide the settings panel PD-1999 + refactoring ([b7087c6](https://github.com/pie-framework/pie-elements/commit/b7087c652df0172ee0f3a1d4041e4c1b144bafa0))
22
+ * **match:** clean up ([40809d9](https://github.com/pie-framework/pie-elements/commit/40809d9a29baeba7f50f4f5510a0e18537224930))
23
+ * **match:** update docs PD-2417 ([e3b4e8b](https://github.com/pie-framework/pie-elements/commit/e3b4e8bec388b8b181b55b5c181bdf4fd3c260ae))
24
+ * PD-2417 wip ([01dc129](https://github.com/pie-framework/pie-elements/commit/01dc129e1cda7e1a4bc27a3b874c56c20ff92618))
25
+ * **match:** added some configurable validation PD-2417. Started to update validation method ([dc459a1](https://github.com/pie-framework/pie-elements/commit/dc459a140a54772e6d9ec5dfaa1c620215cdf4c2))
26
+ * **match:** wip add validation PD-2417 ([f8a4b88](https://github.com/pie-framework/pie-elements/commit/f8a4b886ee42125ff2cef4abc0e29c8132010a98))
27
+ * **match:** wip PD-2417 ([6d392f7](https://github.com/pie-framework/pie-elements/commit/6d392f76efbbefa2ef71b439dd5123d6a8c31974))
28
+
29
+
30
+
31
+
32
+
6
33
  ## [5.3.1](https://github.com/pie-framework/pie-elements/compare/@pie-element/match@5.3.0...@pie-element/match@5.3.1) (2022-12-21)
7
34
 
8
35
 
@@ -3,6 +3,32 @@
3
3
  All notable changes to this project will be documented in this file.
4
4
  See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
5
5
 
6
+ # [5.4.0](https://github.com/pie-framework/pie-elements/compare/@pie-element/match-configure@5.3.1...@pie-element/match-configure@5.4.0) (2023-01-05)
7
+
8
+
9
+ ### Bug Fixes
10
+
11
+ * **match:** increase default value of maxLengthQuestionsHeading, maxLengthAnswers, maxLengthFirstColumnHeading ([f663d9d](https://github.com/pie-framework/pie-elements/commit/f663d9daba7998e26d5d8c1849c219d284e2d4bf))
12
+
13
+
14
+ ### Features
15
+
16
+ * added width property in match configuration ([6436fc6](https://github.com/pie-framework/pie-elements/commit/6436fc63b404dc4d25ac55aadcc5b84985421800))
17
+ * PD-2417 wip ([01dc129](https://github.com/pie-framework/pie-elements/commit/01dc129e1cda7e1a4bc27a3b874c56c20ff92618))
18
+ * update pie-libs ([b174476](https://github.com/pie-framework/pie-elements/commit/b174476729119a0689f1f8adfc8c235246676cab))
19
+ * update pie-libs ([f72c3c8](https://github.com/pie-framework/pie-elements/commit/f72c3c8d8bc9bbf061bb81502317157a63c22972))
20
+ * update pie-libs ([8490729](https://github.com/pie-framework/pie-elements/commit/8490729a2389d36fd3968f0806119fde96577842))
21
+ * **match:** add validation PD-2417 ([157c19b](https://github.com/pie-framework/pie-elements/commit/157c19b4ceee5decfd47c50e23a7004d27136ca0))
22
+ * **match:** added configuration prop to hide the settings panel PD-1999 + refactoring ([b7087c6](https://github.com/pie-framework/pie-elements/commit/b7087c652df0172ee0f3a1d4041e4c1b144bafa0))
23
+ * **match:** added some configurable validation PD-2417. Started to update validation method ([dc459a1](https://github.com/pie-framework/pie-elements/commit/dc459a140a54772e6d9ec5dfaa1c620215cdf4c2))
24
+ * **match:** clean up ([40809d9](https://github.com/pie-framework/pie-elements/commit/40809d9a29baeba7f50f4f5510a0e18537224930))
25
+ * **match:** wip add validation PD-2417 ([f8a4b88](https://github.com/pie-framework/pie-elements/commit/f8a4b886ee42125ff2cef4abc0e29c8132010a98))
26
+ * **match:** wip PD-2417 ([6d392f7](https://github.com/pie-framework/pie-elements/commit/6d392f76efbbefa2ef71b439dd5123d6a8c31974))
27
+
28
+
29
+
30
+
31
+
6
32
  ## [5.3.1](https://github.com/pie-framework/pie-elements/compare/@pie-element/match-configure@5.3.0...@pie-element/match-configure@5.3.1) (2022-12-21)
7
33
 
8
34
 
@@ -47,8 +47,6 @@ var _lodash = _interopRequireDefault(require("lodash"));
47
47
 
48
48
  var _editableHtml = _interopRequireWildcard(require("@pie-lib/editable-html"));
49
49
 
50
- var _configUi = require("@pie-lib/config-ui");
51
-
52
50
  function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
53
51
 
54
52
  function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { "default": obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
@@ -80,6 +78,7 @@ var styles = function styles(theme) {
80
78
  flex: 1,
81
79
  display: 'flex',
82
80
  justifyContent: 'center',
81
+ flexDirection: 'column',
83
82
  '&> div': {
84
83
  width: '150px',
85
84
  padding: theme.spacing.unit * 1.5,
@@ -120,7 +119,8 @@ var styles = function styles(theme) {
120
119
  errorText: {
121
120
  fontSize: theme.typography.fontSize - 2,
122
121
  color: 'red',
123
- marginBottom: theme.spacing.unit
122
+ padding: '0 !important',
123
+ width: 'fit-content !important'
124
124
  }
125
125
  };
126
126
  };
@@ -140,9 +140,6 @@ var AnswerConfigBlock = /*#__PURE__*/function (_React$Component) {
140
140
  }
141
141
 
142
142
  _this = _super.call.apply(_super, [this].concat(args));
143
- (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "state", {
144
- showWarning: false
145
- });
146
143
  (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "moveRow", function (from, to) {
147
144
  var _this$props = _this.props,
148
145
  model = _this$props.model,
@@ -206,23 +203,8 @@ var AnswerConfigBlock = /*#__PURE__*/function (_React$Component) {
206
203
  return;
207
204
  }
208
205
 
209
- var headers = newModel.headers || [];
210
- var currentHeader = headers[headerIndex];
211
- var sameValue = headers.filter(function (header) {
212
- var wasChanged = currentHeader !== value && "<div>".concat(currentHeader, "</div>") !== value;
213
- var sameValueEntered = header === value || "<div>".concat(header, "</div>") === value;
214
- return wasChanged && sameValueEntered;
215
- });
216
- var empty = value === '<div></div>';
217
-
218
- if (sameValue.length || empty) {
219
- _this.setState({
220
- showWarning: true
221
- });
222
- } else {
223
- newModel.headers[headerIndex] = value;
224
- onChange(newModel);
225
- }
206
+ newModel.headers[headerIndex] = value;
207
+ onChange(newModel);
226
208
  };
227
209
  });
228
210
  return _this;
@@ -251,14 +233,15 @@ var AnswerConfigBlock = /*#__PURE__*/function (_React$Component) {
251
233
  _ref2$maxImageHeight = _ref2.maxImageHeight,
252
234
  maxImageHeight = _ref2$maxImageHeight === void 0 ? {} : _ref2$maxImageHeight;
253
235
 
254
- var showWarning = this.state.showWarning;
255
-
256
236
  var _ref3 = model || {},
257
237
  errors = _ref3.errors;
258
238
 
259
239
  var _ref4 = errors || {},
260
240
  correctResponseError = _ref4.correctResponseError,
261
- rowsErrors = _ref4.rowsErrors;
241
+ rowsErrors = _ref4.rowsErrors,
242
+ columnsErrors = _ref4.columnsErrors,
243
+ noOfRowsError = _ref4.noOfRowsError,
244
+ columnsLengthError = _ref4.columnsLengthError;
262
245
 
263
246
  var filteredDefaultPlugins = (_editableHtml.DEFAULT_PLUGINS || []).filter(function (p) {
264
247
  return p !== 'table' && p !== 'bulleted-list' && p !== 'numbered-list';
@@ -278,7 +261,13 @@ var AnswerConfigBlock = /*#__PURE__*/function (_React$Component) {
278
261
  }, /*#__PURE__*/React.createElement(_Typography["default"], {
279
262
  type: "body1",
280
263
  component: "div"
281
- }, "Click on the labels to edit or remove. Set the correct answers by clicking each correct answer per row."), /*#__PURE__*/React.createElement("div", {
264
+ }, "Click on the labels to edit or remove. Set the correct answers by clicking each correct answer per row."), correctResponseError && /*#__PURE__*/React.createElement("div", {
265
+ className: classes.errorText
266
+ }, correctResponseError), noOfRowsError && /*#__PURE__*/React.createElement("div", {
267
+ className: classes.errorText
268
+ }, noOfRowsError), columnsLengthError && /*#__PURE__*/React.createElement("div", {
269
+ className: classes.errorText
270
+ }, columnsLengthError), /*#__PURE__*/React.createElement("div", {
282
271
  className: classes.rowTable,
283
272
  style: configuration.width ? {
284
273
  width: configuration.width,
@@ -304,8 +293,11 @@ var AnswerConfigBlock = /*#__PURE__*/function (_React$Component) {
304
293
  language: 'spanish'
305
294
  }, {
306
295
  language: 'special'
307
- }]
308
- }));
296
+ }],
297
+ error: columnsErrors && columnsErrors[idx]
298
+ }), columnsErrors && columnsErrors[idx] && /*#__PURE__*/React.createElement("div", {
299
+ className: classes.errorText
300
+ }, columnsErrors[idx]));
309
301
  }), /*#__PURE__*/React.createElement("div", {
310
302
  className: classes.deleteIcon
311
303
  }, /*#__PURE__*/React.createElement(_Button["default"], {
@@ -330,20 +322,9 @@ var AnswerConfigBlock = /*#__PURE__*/function (_React$Component) {
330
322
  maxImageHeight: maxImageHeight && maxImageHeight.rowTitles || defaultImageMaxHeight,
331
323
  uploadSoundSupport: uploadSoundSupport
332
324
  });
333
- }), correctResponseError && /*#__PURE__*/React.createElement("div", {
334
- className: classes.errorText
335
- }, correctResponseError), /*#__PURE__*/React.createElement(_addRow["default"], {
325
+ }), /*#__PURE__*/React.createElement(_addRow["default"], {
336
326
  onAddClick: onAddRow
337
- })), /*#__PURE__*/React.createElement(_configUi.AlertDialog, {
338
- open: showWarning,
339
- title: "Warning",
340
- text: "The column headings must be non-blank and unique.",
341
- onConfirm: function onConfirm() {
342
- return _this2.setState({
343
- showWarning: false
344
- });
345
- }
346
- }));
327
+ })));
347
328
  }
348
329
  }]);
349
330
  return AnswerConfigBlock;
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/answer-config-block.jsx"],"names":["log","styles","theme","container","marginTop","spacing","unit","display","flexDirection","rowContainer","alignItems","flex","rowItem","justifyContent","width","padding","textAlign","deleteIcon","minWidth","questionText","maxWidth","rowTable","separator","border","borderTop","headerInput","fontWeight","errorText","fontSize","typography","color","marginBottom","AnswerConfigBlock","showWarning","from","to","props","model","onChange","newModel","rows","reduce","acc","item","index","movedRow","remainingRows","push","update","slice","name","isBoolean","target","value","checked","lodash","set","headerIndex","headers","currentHeader","sameValue","filter","header","wasChanged","sameValueEntered","empty","length","setState","classes","onAddRow","imageSupport","configuration","toolbarOpts","spellCheck","uploadSoundSupport","maxImageWidth","maxImageHeight","state","errors","correctResponseError","rowsErrors","filteredDefaultPlugins","DEFAULT_PLUGINS","p","labelPlugins","audio","disabled","video","defaultImageMaxWidth","prompt","defaultImageMaxHeight","overflow","settings","map","idx","onHeaderChange","language","row","onDeleteRow","moveRow","enableImages","id","rowTitles","React","Component","PropTypes","object","isRequired","func","shape","add"],"mappings":"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","sourcesContent":["import * as React from 'react';\nimport cx from 'classnames';\nimport PropTypes from 'prop-types';\nimport Button from '@material-ui/core/Button';\nimport Typography from '@material-ui/core/Typography';\nimport { withStyles } from '@material-ui/core/styles';\nimport AddRow from './add-row';\nimport Row from './row';\nimport debug from 'debug';\nimport lodash from 'lodash';\nimport EditableHTML, { DEFAULT_PLUGINS } from '@pie-lib/editable-html';\nimport { AlertDialog } from '@pie-lib/config-ui';\n\nconst log = debug('pie-elements:match:configure');\n\nconst styles = (theme) => ({\n container: {\n marginTop: theme.spacing.unit * 2,\n display: 'flex',\n flexDirection: 'column',\n },\n rowContainer: {\n marginTop: theme.spacing.unit * 2,\n display: 'flex',\n alignItems: 'center',\n flex: 1,\n },\n rowItem: {\n flex: 1,\n display: 'flex',\n justifyContent: 'center',\n '&> div': {\n width: '150px',\n padding: theme.spacing.unit * 1.5,\n textAlign: 'center',\n },\n },\n deleteIcon: {\n flex: 0.5,\n minWidth: '88px',\n },\n questionText: {\n flex: 2,\n display: 'flex',\n justifyContent: 'flex-start',\n '&> div': {\n width: '100%',\n padding: 0,\n maxWidth: 'unset',\n textAlign: 'left',\n minWidth: '350px',\n },\n },\n rowTable: {\n display: 'flex',\n flexDirection: 'column',\n },\n separator: {\n marginTop: theme.spacing.unit * 2,\n border: 0,\n borderTop: '2px solid lightgray',\n width: '100%',\n },\n headerInput: {\n '&> div': {\n fontWeight: 'bold',\n },\n },\n errorText: {\n fontSize: theme.typography.fontSize - 2,\n color: 'red',\n marginBottom: theme.spacing.unit,\n },\n});\n\nclass AnswerConfigBlock extends React.Component {\n static propTypes = {\n classes: PropTypes.object.isRequired,\n model: PropTypes.object.isRequired,\n configuration: PropTypes.object.isRequired,\n onChange: PropTypes.func.isRequired,\n onDeleteRow: PropTypes.func.isRequired,\n onAddRow: PropTypes.func.isRequired,\n imageSupport: PropTypes.shape({\n add: PropTypes.func.isRequired,\n delete: PropTypes.func.isRequired,\n }),\n uploadSoundSupport: PropTypes.shape({\n add: PropTypes.func.isRequired,\n delete: PropTypes.func.isRequired,\n }),\n toolbarOpts: PropTypes.object,\n };\n\n state = { showWarning: false };\n\n moveRow = (from, to) => {\n const { model, onChange } = this.props;\n const newModel = { ...model };\n const rows = newModel.rows || [];\n\n log('[moveRow]: ', from, to);\n\n const { movedRow, remainingRows } = rows.reduce(\n (acc, item, index) => {\n if (index === from) {\n acc.movedRow = item;\n } else {\n acc.remainingRows.push(item);\n }\n\n return acc;\n },\n { movedRow: null, remainingRows: [] },\n );\n\n const update = [...remainingRows.slice(0, to), movedRow, ...remainingRows.slice(to)];\n\n log('update: ', update);\n\n newModel.rows = update;\n\n onChange(newModel);\n };\n\n onChange =\n (name, isBoolean) =>\n ({ target }) => {\n const { model, onChange } = this.props;\n let value;\n\n if (isBoolean) {\n value = target.checked;\n } else {\n value = target.value;\n }\n\n lodash.set(model, name, value);\n onChange(model, name);\n };\n\n onHeaderChange = (headerIndex) => (value) => {\n const { model, onChange } = this.props;\n const newModel = { ...model };\n\n if (headerIndex === 0) {\n newModel.headers[headerIndex] = value;\n onChange(newModel);\n\n return;\n }\n\n const headers = newModel.headers || [];\n\n const currentHeader = headers[headerIndex];\n\n const sameValue = headers.filter((header) => {\n const wasChanged = currentHeader !== value && `<div>${currentHeader}</div>` !== value;\n const sameValueEntered = header === value || `<div>${header}</div>` === value;\n\n return wasChanged && sameValueEntered;\n });\n\n const empty = value === '<div></div>';\n\n if (sameValue.length || empty) {\n this.setState({ showWarning: true });\n } else {\n newModel.headers[headerIndex] = value;\n\n onChange(newModel);\n }\n };\n\n render() {\n const { classes, model, onAddRow, imageSupport, configuration, toolbarOpts, spellCheck, uploadSoundSupport } =\n this.props;\n const { headers = {}, maxImageWidth = {}, maxImageHeight = {} } = configuration || {};\n const { showWarning } = this.state;\n const { errors } = model || {};\n const { correctResponseError, rowsErrors } = errors || {};\n\n const filteredDefaultPlugins = (DEFAULT_PLUGINS || []).filter(\n (p) => p !== 'table' && p !== 'bulleted-list' && p !== 'numbered-list',\n );\n const labelPlugins = {\n audio: { disabled: true },\n video: { disabled: true },\n };\n\n const defaultImageMaxWidth = maxImageWidth && maxImageWidth.prompt;\n const defaultImageMaxHeight = maxImageHeight && maxImageHeight.prompt;\n\n return (\n <div className={classes.container}>\n <Typography type=\"body1\" component=\"div\">\n Click on the labels to edit or remove. Set the correct answers by clicking each correct answer per row.\n </Typography>\n\n <div className={classes.rowTable} style={configuration.width ? { width: configuration.width, overflow: 'scroll' } : {}}>\n <div className={classes.rowContainer}>\n {headers.settings &&\n (model.headers || []).map((header, idx) => (\n <div\n key={idx}\n className={cx(classes.rowItem, {\n [classes.questionText]: idx === 0,\n })}\n >\n <EditableHTML\n onChange={this.onHeaderChange(idx)}\n markup={header}\n className={classes.headerInput}\n label={'column label'}\n activePlugins={filteredDefaultPlugins}\n pluginProps={labelPlugins}\n autoWidthToolbar\n spellCheck={spellCheck}\n uploadSoundSupport={uploadSoundSupport}\n languageCharactersProps={[{ language: 'spanish' }, { language: 'special' }]}\n />\n </div>\n ))}\n\n <div className={classes.deleteIcon}>\n <Button disabled>\n <div />\n </Button>\n </div>\n </div>\n <hr className={classes.separator} />\n\n {model.rows.map((row, idx) => (\n <Row\n key={idx}\n model={model}\n row={row}\n idx={idx}\n onDeleteRow={this.props.onDeleteRow}\n onChange={this.props.onChange}\n onMoveRow={this.moveRow}\n imageSupport={imageSupport}\n enableImages={model.enableImages}\n toolbarOpts={toolbarOpts}\n spellCheck={spellCheck}\n error={rowsErrors?.[row.id]}\n maxImageWidth={(maxImageWidth && maxImageWidth.rowTitles) || defaultImageMaxWidth}\n maxImageHeight={(maxImageHeight && maxImageHeight.rowTitles) || defaultImageMaxHeight}\n uploadSoundSupport={uploadSoundSupport}\n />\n ))}\n\n {correctResponseError && <div className={classes.errorText}>{correctResponseError}</div>}\n <AddRow onAddClick={onAddRow} />\n </div>\n\n <AlertDialog\n open={showWarning}\n title=\"Warning\"\n text=\"The column headings must be non-blank and unique.\"\n onConfirm={() => this.setState({ showWarning: false })}\n />\n </div>\n );\n }\n}\n\nexport default withStyles(styles)(AnswerConfigBlock);\n"],"file":"answer-config-block.js"}
1
+ {"version":3,"sources":["../src/answer-config-block.jsx"],"names":["log","styles","theme","container","marginTop","spacing","unit","display","flexDirection","rowContainer","alignItems","flex","rowItem","justifyContent","width","padding","textAlign","deleteIcon","minWidth","questionText","maxWidth","rowTable","separator","border","borderTop","headerInput","fontWeight","errorText","fontSize","typography","color","AnswerConfigBlock","from","to","props","model","onChange","newModel","rows","reduce","acc","item","index","movedRow","remainingRows","push","update","slice","name","isBoolean","target","value","checked","lodash","set","headerIndex","headers","classes","onAddRow","imageSupport","configuration","toolbarOpts","spellCheck","uploadSoundSupport","maxImageWidth","maxImageHeight","errors","correctResponseError","rowsErrors","columnsErrors","noOfRowsError","columnsLengthError","filteredDefaultPlugins","DEFAULT_PLUGINS","filter","p","labelPlugins","audio","disabled","video","defaultImageMaxWidth","prompt","defaultImageMaxHeight","overflow","settings","map","header","idx","onHeaderChange","language","row","onDeleteRow","moveRow","enableImages","id","rowTitles","React","Component","PropTypes","object","isRequired","func","shape","add"],"mappings":"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","sourcesContent":["import * as React from 'react';\nimport cx from 'classnames';\nimport PropTypes from 'prop-types';\nimport Button from '@material-ui/core/Button';\nimport Typography from '@material-ui/core/Typography';\nimport { withStyles } from '@material-ui/core/styles';\nimport AddRow from './add-row';\nimport Row from './row';\nimport debug from 'debug';\nimport lodash from 'lodash';\nimport EditableHTML, { DEFAULT_PLUGINS } from '@pie-lib/editable-html';\n\nconst log = debug('pie-elements:match:configure');\n\nconst styles = (theme) => ({\n container: {\n marginTop: theme.spacing.unit * 2,\n display: 'flex',\n flexDirection: 'column',\n },\n rowContainer: {\n marginTop: theme.spacing.unit * 2,\n display: 'flex',\n alignItems: 'center',\n flex: 1,\n },\n rowItem: {\n flex: 1,\n display: 'flex',\n justifyContent: 'center',\n flexDirection: 'column',\n '&> div': {\n width: '150px',\n padding: theme.spacing.unit * 1.5,\n textAlign: 'center',\n },\n },\n deleteIcon: {\n flex: 0.5,\n minWidth: '88px',\n },\n questionText: {\n flex: 2,\n display: 'flex',\n justifyContent: 'flex-start',\n '&> div': {\n width: '100%',\n padding: 0,\n maxWidth: 'unset',\n textAlign: 'left',\n minWidth: '350px',\n },\n },\n rowTable: {\n display: 'flex',\n flexDirection: 'column',\n },\n separator: {\n marginTop: theme.spacing.unit * 2,\n border: 0,\n borderTop: '2px solid lightgray',\n width: '100%',\n },\n headerInput: {\n '&> div': {\n fontWeight: 'bold',\n },\n },\n errorText: {\n fontSize: theme.typography.fontSize - 2,\n color: 'red',\n padding: '0 !important',\n width: 'fit-content !important'\n },\n});\n\nclass AnswerConfigBlock extends React.Component {\n static propTypes = {\n classes: PropTypes.object.isRequired,\n model: PropTypes.object.isRequired,\n configuration: PropTypes.object.isRequired,\n onChange: PropTypes.func.isRequired,\n onDeleteRow: PropTypes.func.isRequired,\n onAddRow: PropTypes.func.isRequired,\n imageSupport: PropTypes.shape({\n add: PropTypes.func.isRequired,\n delete: PropTypes.func.isRequired,\n }),\n uploadSoundSupport: PropTypes.shape({\n add: PropTypes.func.isRequired,\n delete: PropTypes.func.isRequired,\n }),\n toolbarOpts: PropTypes.object,\n };\n\n moveRow = (from, to) => {\n const { model, onChange } = this.props;\n const newModel = { ...model };\n const rows = newModel.rows || [];\n\n log('[moveRow]: ', from, to);\n\n const { movedRow, remainingRows } = rows.reduce(\n (acc, item, index) => {\n if (index === from) {\n acc.movedRow = item;\n } else {\n acc.remainingRows.push(item);\n }\n\n return acc;\n },\n { movedRow: null, remainingRows: [] },\n );\n\n const update = [...remainingRows.slice(0, to), movedRow, ...remainingRows.slice(to)];\n\n log('update: ', update);\n\n newModel.rows = update;\n\n onChange(newModel);\n };\n\n onChange =\n (name, isBoolean) =>\n ({ target }) => {\n const { model, onChange } = this.props;\n let value;\n\n if (isBoolean) {\n value = target.checked;\n } else {\n value = target.value;\n }\n\n lodash.set(model, name, value);\n onChange(model, name);\n };\n\n onHeaderChange = (headerIndex) => (value) => {\n const { model, onChange } = this.props;\n const newModel = { ...model };\n\n if (headerIndex === 0) {\n newModel.headers[headerIndex] = value;\n onChange(newModel);\n\n return;\n }\n\n newModel.headers[headerIndex] = value;\n onChange(newModel);\n };\n\n render() {\n const {\n classes,\n model,\n onAddRow,\n imageSupport,\n configuration,\n toolbarOpts,\n spellCheck,\n uploadSoundSupport,\n } =\n this.props;\n const { headers = {}, maxImageWidth = {}, maxImageHeight = {} } = configuration || {};\n const { errors } = model || {};\n const { correctResponseError, rowsErrors, columnsErrors, noOfRowsError, columnsLengthError } = errors || {};\n\n const filteredDefaultPlugins = (DEFAULT_PLUGINS || []).filter(\n (p) => p !== 'table' && p !== 'bulleted-list' && p !== 'numbered-list',\n );\n const labelPlugins = {\n audio: { disabled: true },\n video: { disabled: true },\n };\n\n const defaultImageMaxWidth = maxImageWidth && maxImageWidth.prompt;\n const defaultImageMaxHeight = maxImageHeight && maxImageHeight.prompt;\n\n return (\n <div className={classes.container}>\n <Typography type=\"body1\" component=\"div\">\n Click on the labels to edit or remove. Set the correct answers by clicking each correct answer per row.\n </Typography>\n {correctResponseError && <div className={classes.errorText}>{correctResponseError}</div>}\n {noOfRowsError && <div className={classes.errorText}>{noOfRowsError}</div>}\n {columnsLengthError && <div className={classes.errorText}>{columnsLengthError}</div>}\n\n <div className={classes.rowTable} style={configuration.width ? { width: configuration.width, overflow: 'scroll' } : {}}>\n <div className={classes.rowContainer}>\n {headers.settings &&\n (model.headers || []).map((header, idx) => (\n <div\n key={idx}\n className={cx(classes.rowItem, {\n [classes.questionText]: idx === 0,\n })}\n >\n <EditableHTML\n onChange={this.onHeaderChange(idx)}\n markup={header}\n className={classes.headerInput}\n label={'column label'}\n activePlugins={filteredDefaultPlugins}\n pluginProps={labelPlugins}\n autoWidthToolbar\n spellCheck={spellCheck}\n uploadSoundSupport={uploadSoundSupport}\n languageCharactersProps={[{ language: 'spanish' }, { language: 'special' }]}\n error={columnsErrors && columnsErrors[idx]}\n />\n {columnsErrors && columnsErrors[idx] && <div className={classes.errorText}>{columnsErrors[idx]}</div>}\n </div>\n ))}\n <div className={classes.deleteIcon}>\n <Button disabled>\n <div/>\n </Button>\n </div>\n </div>\n <hr className={classes.separator} />\n\n {model.rows.map((row, idx) => (\n <Row\n key={idx}\n model={model}\n row={row}\n idx={idx}\n onDeleteRow={this.props.onDeleteRow}\n onChange={this.props.onChange}\n onMoveRow={this.moveRow}\n imageSupport={imageSupport}\n enableImages={model.enableImages}\n toolbarOpts={toolbarOpts}\n spellCheck={spellCheck}\n error={rowsErrors?.[row.id]}\n maxImageWidth={(maxImageWidth && maxImageWidth.rowTitles) || defaultImageMaxWidth}\n maxImageHeight={(maxImageHeight && maxImageHeight.rowTitles) || defaultImageMaxHeight}\n uploadSoundSupport={uploadSoundSupport}\n />\n ))}\n <AddRow onAddClick={onAddRow}/>\n </div>\n </div>\n );\n }\n}\n\nexport default withStyles(styles)(AnswerConfigBlock);\n"],"file":"answer-config-block.js"}
@@ -101,8 +101,13 @@ var _default = {
101
101
  withRubric: {
102
102
  settings: false,
103
103
  label: 'Add Rubric'
104
- } // width: '900px'
105
-
104
+ },
105
+ minQuestions: 2,
106
+ maxQuestions: 5,
107
+ maxLengthQuestionsHeading: 100,
108
+ maxAnswers: 5,
109
+ maxLengthAnswers: 100,
110
+ maxLengthFirstColumnHeading: 100
106
111
  }
107
112
  };
108
113
  exports["default"] = _default;
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/defaults.js"],"names":["model","enableImages","headers","layout","lockChoiceOrder","partialScoring","choiceMode","prompt","toolbarEditorPosition","rows","id","title","values","scoringType","feedbackEnabled","promptEnabled","rationaleEnabled","teacherInstructionsEnabled","studentInstructionsEnabled","configuration","settings","label","feedback","enabled","rationale","settingsPanelDisabled","spellCheck","studentInstructions","teacherInstructions","maxImageWidth","rowTitles","maxImageHeight","withRubric"],"mappings":"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","sourcesContent":["/** NOTE: teacherInstructions, studentInstructions, rationale & scoringType\n * functionalities are not defined yet - the value for those can belong to\n * model or to configuration\n */\n\nexport default {\n model: {\n enableImages: true,\n headers: ['Column 1', 'Column 2', 'Column 3'],\n layout: 3,\n lockChoiceOrder: true,\n partialScoring: false,\n choiceMode: 'radio',\n prompt: 'Prompt goes here',\n toolbarEditorPosition: 'bottom',\n rows: [\n {\n id: 1,\n title: 'Question Text 1',\n values: [false, false],\n },\n ],\n scoringType: 'auto',\n feedbackEnabled: true,\n promptEnabled: true,\n rationaleEnabled: true,\n teacherInstructionsEnabled: true,\n studentInstructionsEnabled: true,\n },\n configuration: {\n enableImages: {\n settings: true,\n label: 'Enable Images',\n },\n feedback: {\n settings: true,\n label: 'Feedback',\n enabled: true,\n },\n headers: {\n settings: true,\n },\n layout: {\n settings: true,\n label: 'Layout',\n },\n lockChoiceOrder: {\n settings: false,\n label: 'Lock Choice Order',\n },\n partialScoring: {\n settings: false,\n label: 'Allow Partial Scoring',\n },\n choiceMode: {\n settings: true,\n label: 'Response Type',\n },\n prompt: {\n settings: true,\n label: 'Prompt',\n },\n rationale: {\n settings: true,\n label: 'Rationale',\n },\n settingsPanelDisabled: false,\n spellCheck: {\n label: 'Spellcheck',\n settings: false,\n enabled: true,\n },\n scoringType: {\n settings: false,\n label: 'Scoring Type',\n },\n studentInstructions: {\n settings: false,\n label: 'Student Instructions',\n },\n teacherInstructions: {\n settings: true,\n label: 'Teacher Instructions',\n },\n maxImageWidth: {\n teacherInstructions: 300,\n prompt: 300,\n rationale: 300,\n rowTitles: 300,\n },\n maxImageHeight: {\n teacherInstructions: 300,\n prompt: 300,\n rationale: 300,\n rowTitles: 150,\n },\n withRubric: {\n settings: false,\n label: 'Add Rubric',\n },\n // width: '900px'\n },\n};\n"],"file":"defaults.js"}
1
+ {"version":3,"sources":["../src/defaults.js"],"names":["model","enableImages","headers","layout","lockChoiceOrder","partialScoring","choiceMode","prompt","toolbarEditorPosition","rows","id","title","values","scoringType","feedbackEnabled","promptEnabled","rationaleEnabled","teacherInstructionsEnabled","studentInstructionsEnabled","configuration","settings","label","feedback","enabled","rationale","settingsPanelDisabled","spellCheck","studentInstructions","teacherInstructions","maxImageWidth","rowTitles","maxImageHeight","withRubric","minQuestions","maxQuestions","maxLengthQuestionsHeading","maxAnswers","maxLengthAnswers","maxLengthFirstColumnHeading"],"mappings":"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","sourcesContent":["/** NOTE: teacherInstructions, studentInstructions, rationale & scoringType\n * functionalities are not defined yet - the value for those can belong to\n * model or to configuration\n */\n\nexport default {\n model: {\n enableImages: true,\n headers: ['Column 1', 'Column 2', 'Column 3'],\n layout: 3,\n lockChoiceOrder: true,\n partialScoring: false,\n choiceMode: 'radio',\n prompt: 'Prompt goes here',\n toolbarEditorPosition: 'bottom',\n rows: [\n {\n id: 1,\n title: 'Question Text 1',\n values: [false, false],\n },\n ],\n scoringType: 'auto',\n feedbackEnabled: true,\n promptEnabled: true,\n rationaleEnabled: true,\n teacherInstructionsEnabled: true,\n studentInstructionsEnabled: true,\n },\n configuration: {\n enableImages: {\n settings: true,\n label: 'Enable Images',\n },\n feedback: {\n settings: true,\n label: 'Feedback',\n enabled: true,\n },\n headers: {\n settings: true,\n },\n layout: {\n settings: true,\n label: 'Layout',\n },\n lockChoiceOrder: {\n settings: false,\n label: 'Lock Choice Order',\n },\n partialScoring: {\n settings: false,\n label: 'Allow Partial Scoring',\n },\n choiceMode: {\n settings: true,\n label: 'Response Type',\n },\n prompt: {\n settings: true,\n label: 'Prompt',\n },\n rationale: {\n settings: true,\n label: 'Rationale',\n },\n settingsPanelDisabled: false,\n spellCheck: {\n label: 'Spellcheck',\n settings: false,\n enabled: true,\n },\n scoringType: {\n settings: false,\n label: 'Scoring Type',\n },\n studentInstructions: {\n settings: false,\n label: 'Student Instructions',\n },\n teacherInstructions: {\n settings: true,\n label: 'Teacher Instructions',\n },\n maxImageWidth: {\n teacherInstructions: 300,\n prompt: 300,\n rationale: 300,\n rowTitles: 300,\n },\n maxImageHeight: {\n teacherInstructions: 300,\n prompt: 300,\n rationale: 300,\n rowTitles: 150,\n },\n withRubric: {\n settings: false,\n label: 'Add Rubric',\n },\n minQuestions: 2,\n maxQuestions: 5,\n maxLengthQuestionsHeading: 100,\n maxAnswers: 5,\n maxLengthAnswers: 100,\n maxLengthFirstColumnHeading: 100\n },\n};\n"],"file":"defaults.js"}
@@ -92,26 +92,8 @@ var Row = /*#__PURE__*/function (_React$Component) {
92
92
 
93
93
  var newModel = _objectSpread({}, model);
94
94
 
95
- var rows = newModel.rows || [];
96
- var currentRow = rows[rowIndex] && rows[rowIndex].title;
97
- var sameValue = rows.filter(function (row) {
98
- var wasChanged = currentRow !== value && "<div>".concat(currentRow, "</div>") !== value;
99
- var sameValueEntered = row.title === value || "<div>".concat(row.title, "</div>") === value;
100
- return wasChanged && sameValueEntered;
101
- });
102
- var empty = value === '<div></div>';
103
-
104
- if (sameValue.length || empty) {
105
- _this.setState({
106
- dialog: {
107
- open: true,
108
- text: 'The question row headings must be non-blank and unique.'
109
- }
110
- });
111
- } else {
112
- newModel.rows[rowIndex].title = value;
113
- onChange(newModel);
114
- }
95
+ newModel.rows[rowIndex].title = value;
96
+ onChange(newModel);
115
97
  };
116
98
  });
117
99
  (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "onRowValueChange", function (rowIndex, rowValueIndex) {
@@ -236,7 +218,8 @@ var Row = /*#__PURE__*/function (_React$Component) {
236
218
  language: 'spanish'
237
219
  }, {
238
220
  language: 'special'
239
- }]
221
+ }],
222
+ error: error && error !== 'No correct response defined.'
240
223
  })), row.values.map(function (rowValue, rowIdx) {
241
224
  return /*#__PURE__*/_react["default"].createElement("div", {
242
225
  key: rowIdx,
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/row.jsx"],"names":["log","canDrag","Row","dialog","open","text","rowIndex","value","props","model","onChange","newModel","rows","currentRow","title","sameValue","filter","row","wasChanged","sameValueEntered","empty","length","setState","rowValueIndex","event","choiceMode","i","values","target","checked","idx","onDeleteRow","document","addEventListener","onMouseUpOnHandle","classes","imageSupport","connectDragSource","connectDropTarget","isDragging","enableImages","toolbarOpts","spellCheck","error","maxImageWidth","maxImageHeight","uploadSoundSupport","state","opacity","rowPlugins","image","disabled","audio","video","filteredDefaultPlugins","DEFAULT_PLUGINS","p","content","width","dragHandle","onMouseDownOnHandle","rowContainer","rowItem","questionText","onRowTitleChange","editor","language","map","rowValue","rowIdx","onRowValueChange","deleteIcon","errorText","separator","React","Component","PropTypes","object","isRequired","number","bool","func","onMoveRow","shape","add","string","styles","theme","actions","padding","justifyContent","choice","spacing","unit","overflow","cursor","dragDisabled","container","marginTop","display","flexDirection","alignItems","flex","minWidth","maxWidth","textAlign","border","borderTop","fontSize","typography","color","paddingTop","StyledRow","NAME","choiceSource","beginDrag","id","index","StyledSource","connect","monitor","dragSource","choiceTarget","hover","drop","item","getItem","didDrop","StyledSourceAndTarget","dropTarget"],"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 { AlertDialog, Checkbox } from '@pie-lib/config-ui';\nimport DragHandle from '@material-ui/icons/DragHandle';\nimport Radio from '@material-ui/core/Radio';\nimport Button from '@material-ui/core/Button';\nimport Delete from '@material-ui/icons/Delete';\nimport { DragSource, DropTarget } from 'react-dnd';\nimport debug from 'debug';\nimport EditableHtml, { DEFAULT_PLUGINS } from '@pie-lib/editable-html';\n\nconst log = debug('@pie-element:categorize:configure:choice');\n\nexport let canDrag = false;\n\nexport class Row extends React.Component {\n static propTypes = {\n classes: PropTypes.object.isRequired,\n model: PropTypes.object.isRequired,\n row: PropTypes.object.isRequired,\n idx: PropTypes.number.isRequired,\n isDragging: PropTypes.bool.isRequired,\n onDeleteRow: PropTypes.func.isRequired,\n onChange: PropTypes.func.isRequired,\n connectDragSource: PropTypes.func.isRequired,\n connectDropTarget: PropTypes.func.isRequired,\n onMoveRow: PropTypes.func.isRequired,\n imageSupport: PropTypes.shape({\n add: PropTypes.func.isRequired,\n delete: PropTypes.func.isRequired,\n }),\n uploadSoundSupport: PropTypes.shape({\n add: PropTypes.func.isRequired,\n delete: PropTypes.func.isRequired,\n }),\n enableImages: PropTypes.bool,\n toolbarOpts: PropTypes.object,\n error: PropTypes.string,\n };\n\n static defaultProps = {};\n\n state = {\n dialog: {\n open: false,\n text: '',\n },\n };\n\n componentDidMount() {\n document.addEventListener('mouseup', this.onMouseUpOnHandle);\n }\n\n onRowTitleChange = (rowIndex) => (value) => {\n const { model, onChange } = this.props;\n const newModel = { ...model };\n\n const rows = newModel.rows || [];\n const currentRow = rows[rowIndex] && rows[rowIndex].title;\n\n const sameValue = rows.filter((row) => {\n const wasChanged = currentRow !== value && `<div>${currentRow}</div>` !== value;\n const sameValueEntered = row.title === value || `<div>${row.title}</div>` === value;\n\n return wasChanged && sameValueEntered;\n });\n\n const empty = value === '<div></div>';\n\n if (sameValue.length || empty) {\n this.setState({\n dialog: {\n open: true,\n text: 'The question row headings must be non-blank and unique.',\n },\n });\n } else {\n newModel.rows[rowIndex].title = value;\n\n onChange(newModel);\n }\n };\n\n onRowValueChange = (rowIndex, rowValueIndex) => (event) => {\n const { model, onChange } = this.props;\n const newModel = { ...model };\n\n if (model.choiceMode === 'radio') {\n for (let i = 0; i < newModel.rows[rowIndex].values.length; i++) {\n newModel.rows[rowIndex].values[i] = false;\n }\n }\n\n newModel.rows[rowIndex].values[rowValueIndex] = event.target.checked;\n\n onChange(newModel);\n };\n\n onDeleteRow = (idx) => () => {\n const { model, onDeleteRow } = this.props;\n\n if (model.rows && model.rows.length === 1) {\n this.setState({\n dialog: {\n open: true,\n text: 'There has to be at least one question row.',\n },\n });\n } else {\n onDeleteRow(idx);\n }\n };\n\n onMouseDownOnHandle = () => {\n canDrag = true;\n };\n\n onMouseUpOnHandle = () => {\n canDrag = false;\n };\n\n render() {\n const {\n classes,\n imageSupport,\n connectDragSource,\n connectDropTarget,\n isDragging,\n model,\n row,\n idx,\n enableImages,\n toolbarOpts,\n spellCheck,\n error,\n maxImageWidth,\n maxImageHeight,\n uploadSoundSupport,\n } = this.props;\n const { dialog } = this.state;\n const opacity = isDragging ? 0 : 1;\n\n const rowPlugins = {\n image: {\n disabled: !enableImages,\n },\n audio: { disabled: true },\n video: { disabled: true },\n };\n const filteredDefaultPlugins = (DEFAULT_PLUGINS || []).filter(\n (p) => p !== 'bulleted-list' && p !== 'numbered-list',\n );\n\n const content = (\n <div style={{ opacity: opacity, width: 'fit-content' }}>\n <span itemID={'handle'} className={classes.dragHandle} onMouseDown={this.onMouseDownOnHandle}>\n <DragHandle color={'primary'}/>\n </span>\n\n <div className={classes.rowContainer}>\n <div className={classNames(classes.rowItem, classes.questionText)}>\n <EditableHtml\n imageSupport={imageSupport}\n autoWidthToolbar\n disableUnderline\n label={'label'}\n markup={row.title}\n onChange={this.onRowTitleChange(idx)}\n className={classes.editor}\n pluginProps={rowPlugins}\n toolbarOpts={toolbarOpts}\n activePlugins={filteredDefaultPlugins}\n spellCheck={spellCheck}\n maxImageWidth={maxImageWidth}\n maxImageHeight={maxImageHeight}\n uploadSoundSupport={uploadSoundSupport}\n languageCharactersProps={[{ language: 'spanish' }, { language: 'special' }]}\n />\n </div>\n\n {row.values.map((rowValue, rowIdx) => (\n <div key={rowIdx} className={classes.rowItem}>\n {model.choiceMode === 'radio' ? (\n <Radio onChange={this.onRowValueChange(idx, rowIdx)} checked={rowValue === true}/>\n ) : (\n <Checkbox onChange={this.onRowValueChange(idx, rowIdx)} checked={rowValue === true} label={''}/>\n )}\n </div>\n ))}\n\n <div className={classes.deleteIcon}>\n <Button onClick={this.onDeleteRow(idx)}>\n <Delete className={classes.deleteIcon}/>\n </Button>\n </div>\n </div>\n\n {error && <div className={classes.errorText}>{error}</div>}\n <hr className={classes.separator}/>\n\n <AlertDialog\n open={dialog.open}\n title=\"Warning\"\n text={dialog.text}\n onConfirm={() => this.setState({ dialog: { open: false } })}\n />\n </div>\n );\n\n return connectDragSource(connectDropTarget(content));\n }\n}\n\nconst styles = (theme) => ({\n actions: {\n padding: 0,\n justifyContent: 'space-between',\n },\n choice: {\n padding: theme.spacing.unit,\n overflow: 'visible',\n },\n dragHandle: {\n cursor: 'move',\n },\n dragDisabled: {\n cursor: 'inherit',\n },\n\n container: {\n marginTop: theme.spacing.unit * 2,\n display: 'flex',\n flexDirection: 'column',\n },\n rowContainer: {\n marginTop: theme.spacing.unit * 2,\n display: 'flex',\n alignItems: 'center',\n flex: 1,\n },\n rowItem: {\n flex: 1,\n display: 'flex',\n justifyContent: 'center',\n minWidth: '150px',\n padding: theme.spacing.unit * 1.5,\n },\n deleteIcon: {\n flex: 0.5,\n minWidth: '88px',\n },\n questionText: {\n flex: 2,\n display: 'flex',\n justifyContent: 'flex-start',\n padding: 0,\n maxWidth: 'unset',\n textAlign: 'left',\n minWidth: '350px',\n '&> div': {\n width: '100%',\n }\n },\n separator: {\n marginTop: theme.spacing.unit * 2,\n border: 0,\n borderTop: '2px solid lightgray',\n width: '100%',\n },\n errorText: {\n fontSize: theme.typography.fontSize - 2,\n color: 'red',\n paddingTop: theme.spacing.unit,\n },\n});\n\nconst StyledRow = withStyles(styles)(Row);\n\nconst NAME = 'row-config';\n\nexport const choiceSource = {\n canDrag() {\n return canDrag;\n },\n beginDrag(props) {\n return {\n id: props.row.id,\n index: props.idx,\n };\n },\n};\n\nconst StyledSource = DragSource(NAME, choiceSource, (connect, monitor) => ({\n connectDragSource: connect.dragSource(),\n isDragging: monitor.isDragging(),\n}))(StyledRow);\n\nexport const choiceTarget = {\n hover() {\n log('[hover]');\n },\n drop(props, monitor) {\n const item = monitor.getItem();\n\n log('[drop] item: ', item, 'didDrop?', monitor.didDrop());\n\n props.onMoveRow(item.index, props.idx);\n },\n};\n\nconst StyledSourceAndTarget = DropTarget(NAME, choiceTarget, (connect) => ({\n connectDropTarget: connect.dropTarget(),\n}))(StyledSource);\n\nexport default StyledSourceAndTarget;\n"],"file":"row.js"}
1
+ {"version":3,"sources":["../src/row.jsx"],"names":["log","canDrag","Row","dialog","open","text","rowIndex","value","props","model","onChange","newModel","rows","title","rowValueIndex","event","choiceMode","i","values","length","target","checked","idx","onDeleteRow","setState","document","addEventListener","onMouseUpOnHandle","classes","imageSupport","connectDragSource","connectDropTarget","isDragging","row","enableImages","toolbarOpts","spellCheck","error","maxImageWidth","maxImageHeight","uploadSoundSupport","state","opacity","rowPlugins","image","disabled","audio","video","filteredDefaultPlugins","DEFAULT_PLUGINS","filter","p","content","width","dragHandle","onMouseDownOnHandle","rowContainer","rowItem","questionText","onRowTitleChange","editor","language","map","rowValue","rowIdx","onRowValueChange","deleteIcon","errorText","separator","React","Component","PropTypes","object","isRequired","number","bool","func","onMoveRow","shape","add","string","styles","theme","actions","padding","justifyContent","choice","spacing","unit","overflow","cursor","dragDisabled","container","marginTop","display","flexDirection","alignItems","flex","minWidth","maxWidth","textAlign","border","borderTop","fontSize","typography","color","paddingTop","StyledRow","NAME","choiceSource","beginDrag","id","index","StyledSource","connect","monitor","dragSource","choiceTarget","hover","drop","item","getItem","didDrop","StyledSourceAndTarget","dropTarget"],"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 { AlertDialog, Checkbox } from '@pie-lib/config-ui';\nimport DragHandle from '@material-ui/icons/DragHandle';\nimport Radio from '@material-ui/core/Radio';\nimport Button from '@material-ui/core/Button';\nimport Delete from '@material-ui/icons/Delete';\nimport { DragSource, DropTarget } from 'react-dnd';\nimport debug from 'debug';\nimport EditableHtml, { DEFAULT_PLUGINS } from '@pie-lib/editable-html';\n\nconst log = debug('@pie-element:categorize:configure:choice');\n\nexport let canDrag = false;\n\nexport class Row extends React.Component {\n static propTypes = {\n classes: PropTypes.object.isRequired,\n model: PropTypes.object.isRequired,\n row: PropTypes.object.isRequired,\n idx: PropTypes.number.isRequired,\n isDragging: PropTypes.bool.isRequired,\n onDeleteRow: PropTypes.func.isRequired,\n onChange: PropTypes.func.isRequired,\n connectDragSource: PropTypes.func.isRequired,\n connectDropTarget: PropTypes.func.isRequired,\n onMoveRow: PropTypes.func.isRequired,\n imageSupport: PropTypes.shape({\n add: PropTypes.func.isRequired,\n delete: PropTypes.func.isRequired,\n }),\n uploadSoundSupport: PropTypes.shape({\n add: PropTypes.func.isRequired,\n delete: PropTypes.func.isRequired,\n }),\n enableImages: PropTypes.bool,\n toolbarOpts: PropTypes.object,\n error: PropTypes.string,\n };\n\n static defaultProps = {};\n\n state = {\n dialog: {\n open: false,\n text: '',\n },\n };\n\n componentDidMount() {\n document.addEventListener('mouseup', this.onMouseUpOnHandle);\n }\n\n onRowTitleChange = (rowIndex) => (value) => {\n const { model, onChange } = this.props;\n const newModel = { ...model };\n\n newModel.rows[rowIndex].title = value;\n onChange(newModel);\n };\n\n onRowValueChange = (rowIndex, rowValueIndex) => (event) => {\n const { model, onChange } = this.props;\n const newModel = { ...model };\n\n if (model.choiceMode === 'radio') {\n for (let i = 0; i < newModel.rows[rowIndex].values.length; i++) {\n newModel.rows[rowIndex].values[i] = false;\n }\n }\n\n newModel.rows[rowIndex].values[rowValueIndex] = event.target.checked;\n\n onChange(newModel);\n };\n\n onDeleteRow = (idx) => () => {\n const { model, onDeleteRow } = this.props;\n\n if (model.rows && model.rows.length === 1) {\n this.setState({\n dialog: {\n open: true,\n text: 'There has to be at least one question row.',\n },\n });\n } else {\n onDeleteRow(idx);\n }\n };\n\n onMouseDownOnHandle = () => {\n canDrag = true;\n };\n\n onMouseUpOnHandle = () => {\n canDrag = false;\n };\n\n render() {\n const {\n classes,\n imageSupport,\n connectDragSource,\n connectDropTarget,\n isDragging,\n model,\n row,\n idx,\n enableImages,\n toolbarOpts,\n spellCheck,\n error,\n maxImageWidth,\n maxImageHeight,\n uploadSoundSupport,\n } = this.props;\n const { dialog } = this.state;\n const opacity = isDragging ? 0 : 1;\n\n const rowPlugins = {\n image: {\n disabled: !enableImages,\n },\n audio: { disabled: true },\n video: { disabled: true },\n };\n const filteredDefaultPlugins = (DEFAULT_PLUGINS || []).filter(\n (p) => p !== 'bulleted-list' && p !== 'numbered-list',\n );\n\n const content = (\n <div style={{ opacity: opacity, width: 'fit-content' }}>\n <span itemID={'handle'} className={classes.dragHandle} onMouseDown={this.onMouseDownOnHandle}>\n <DragHandle color={'primary'}/>\n </span>\n\n <div className={classes.rowContainer}>\n <div className={classNames(classes.rowItem, classes.questionText)}>\n <EditableHtml\n imageSupport={imageSupport}\n autoWidthToolbar\n disableUnderline\n label={'label'}\n markup={row.title}\n onChange={this.onRowTitleChange(idx)}\n className={classes.editor}\n pluginProps={rowPlugins}\n toolbarOpts={toolbarOpts}\n activePlugins={filteredDefaultPlugins}\n spellCheck={spellCheck}\n maxImageWidth={maxImageWidth}\n maxImageHeight={maxImageHeight}\n uploadSoundSupport={uploadSoundSupport}\n languageCharactersProps={[{ language: 'spanish' }, { language: 'special' }]}\n error={error && error !== 'No correct response defined.'}\n />\n </div>\n\n {row.values.map((rowValue, rowIdx) => (\n <div key={rowIdx} className={classes.rowItem}>\n {model.choiceMode === 'radio' ? (\n <Radio onChange={this.onRowValueChange(idx, rowIdx)} checked={rowValue === true}/>\n ) : (\n <Checkbox onChange={this.onRowValueChange(idx, rowIdx)} checked={rowValue === true} label={''}/>\n )}\n </div>\n ))}\n\n <div className={classes.deleteIcon}>\n <Button onClick={this.onDeleteRow(idx)}>\n <Delete className={classes.deleteIcon}/>\n </Button>\n </div>\n </div>\n\n {error && <div className={classes.errorText}>{error}</div>}\n <hr className={classes.separator}/>\n\n <AlertDialog\n open={dialog.open}\n title=\"Warning\"\n text={dialog.text}\n onConfirm={() => this.setState({ dialog: { open: false } })}\n />\n </div>\n );\n\n return connectDragSource(connectDropTarget(content));\n }\n}\n\nconst styles = (theme) => ({\n actions: {\n padding: 0,\n justifyContent: 'space-between',\n },\n choice: {\n padding: theme.spacing.unit,\n overflow: 'visible',\n },\n dragHandle: {\n cursor: 'move',\n },\n dragDisabled: {\n cursor: 'inherit',\n },\n\n container: {\n marginTop: theme.spacing.unit * 2,\n display: 'flex',\n flexDirection: 'column',\n },\n rowContainer: {\n marginTop: theme.spacing.unit * 2,\n display: 'flex',\n alignItems: 'center',\n flex: 1,\n },\n rowItem: {\n flex: 1,\n display: 'flex',\n justifyContent: 'center',\n minWidth: '150px',\n padding: theme.spacing.unit * 1.5,\n },\n deleteIcon: {\n flex: 0.5,\n minWidth: '88px',\n },\n questionText: {\n flex: 2,\n display: 'flex',\n justifyContent: 'flex-start',\n padding: 0,\n maxWidth: 'unset',\n textAlign: 'left',\n minWidth: '350px',\n '&> div': {\n width: '100%',\n }\n },\n separator: {\n marginTop: theme.spacing.unit * 2,\n border: 0,\n borderTop: '2px solid lightgray',\n width: '100%',\n },\n errorText: {\n fontSize: theme.typography.fontSize - 2,\n color: 'red',\n paddingTop: theme.spacing.unit,\n },\n});\n\nconst StyledRow = withStyles(styles)(Row);\n\nconst NAME = 'row-config';\n\nexport const choiceSource = {\n canDrag() {\n return canDrag;\n },\n beginDrag(props) {\n return {\n id: props.row.id,\n index: props.idx,\n };\n },\n};\n\nconst StyledSource = DragSource(NAME, choiceSource, (connect, monitor) => ({\n connectDragSource: connect.dragSource(),\n isDragging: monitor.isDragging(),\n}))(StyledRow);\n\nexport const choiceTarget = {\n hover() {\n log('[hover]');\n },\n drop(props, monitor) {\n const item = monitor.getItem();\n\n log('[drop] item: ', item, 'didDrop?', monitor.didDrop());\n\n props.onMoveRow(item.index, props.idx);\n },\n};\n\nconst StyledSourceAndTarget = DropTarget(NAME, choiceTarget, (connect) => ({\n connectDropTarget: connect.dropTarget(),\n}))(StyledSource);\n\nexport default StyledSourceAndTarget;\n"],"file":"row.js"}
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@pie-element/match-configure",
3
3
  "private": true,
4
- "version": "5.3.1",
4
+ "version": "5.4.0",
5
5
  "description": "",
6
6
  "main": "lib/index.js",
7
7
  "module": "src/index.js",
@@ -10,10 +10,10 @@
10
10
  "@material-ui/core": "^3.9.2",
11
11
  "@material-ui/icons": "^3.0.1",
12
12
  "@pie-framework/pie-configure-events": "^1.3.0",
13
- "@pie-lib/config-ui": "^11.1.4",
14
- "@pie-lib/drag": "^2.0.4",
15
- "@pie-lib/editable-html": "^9.3.0",
16
- "@pie-lib/scoring-config": "^3.5.195",
13
+ "@pie-lib/config-ui": "^11.2.2",
14
+ "@pie-lib/drag": "^2.0.6",
15
+ "@pie-lib/editable-html": "^9.4.1",
16
+ "@pie-lib/scoring-config": "^3.5.198",
17
17
  "classnames": "^2.2.5",
18
18
  "debug": "^3.1.0",
19
19
  "prop-types": "^15.6.2",
@@ -3,6 +3,19 @@
3
3
  All notable changes to this project will be documented in this file.
4
4
  See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
5
5
 
6
+ # [4.6.0](https://github.com/pie-framework/pie-elements/compare/@pie-element/match-controller@4.5.1...@pie-element/match-controller@4.6.0) (2023-01-05)
7
+
8
+
9
+ ### Features
10
+
11
+ * **match:** add validation PD-2417 ([157c19b](https://github.com/pie-framework/pie-elements/commit/157c19b4ceee5decfd47c50e23a7004d27136ca0))
12
+ * **match:** added some configurable validation PD-2417. Started to update validation method ([dc459a1](https://github.com/pie-framework/pie-elements/commit/dc459a140a54772e6d9ec5dfaa1c620215cdf4c2))
13
+ * **match:** clean up ([40809d9](https://github.com/pie-framework/pie-elements/commit/40809d9a29baeba7f50f4f5510a0e18537224930))
14
+
15
+
16
+
17
+
18
+
6
19
  ## [4.5.1](https://github.com/pie-framework/pie-elements/compare/@pie-element/match-controller@4.5.0...@pie-element/match-controller@4.5.1) (2022-12-07)
7
20
 
8
21
 
@@ -328,18 +328,57 @@ var createCorrectResponseSession = function createCorrectResponseSession(questio
328
328
  };
329
329
 
330
330
  exports.createCorrectResponseSession = createCorrectResponseSession;
331
+ var dp = new DOMParser();
332
+
333
+ var markupToText = function markupToText(s) {
334
+ var root = dp.parseFromString(s, 'text/html');
335
+ return root.body.textContent;
336
+ };
331
337
 
332
338
  var validate = function validate() {
333
339
  var model = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
334
340
  var config = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
335
341
  var rows = model.rows,
336
- choiceMode = model.choiceMode;
342
+ choiceMode = model.choiceMode,
343
+ headers = model.headers;
344
+ var minQuestions = config.minQuestions,
345
+ maxQuestions = config.maxQuestions,
346
+ maxLengthQuestionsHeading = config.maxLengthQuestionsHeading,
347
+ maxAnswers = config.maxAnswers,
348
+ maxLengthAnswers = config.maxLengthAnswers,
349
+ maxLengthFirstColumnHeading = config.maxLengthFirstColumnHeading;
337
350
  var rowsErrors = {};
338
- (rows || []).forEach(function (row) {
351
+ var columnsErrors = {};
352
+ var errors = {};
353
+
354
+ if (rows.length < minQuestions) {
355
+ errors.noOfRowsError = "There should be at least ".concat(minQuestions, " question rows.");
356
+ } else if (rows.length > maxQuestions) {
357
+ errors.noOfRowsError = "No more than ".concat(maxQuestions, " question rows should be defined.");
358
+ }
359
+
360
+ (rows || []).forEach(function (row, index) {
339
361
  var id = row.id,
340
362
  _row$values = row.values,
341
- values = _row$values === void 0 ? [] : _row$values;
363
+ values = _row$values === void 0 ? [] : _row$values,
364
+ title = row.title;
342
365
  var hasCorrectResponse = false;
366
+ rowsErrors[id] = '';
367
+
368
+ if (maxLengthQuestionsHeading && markupToText(title).length > maxLengthQuestionsHeading) {
369
+ rowsErrors[id] += "Questions rows content length should not be more than ".concat(maxLengthQuestionsHeading, " characters. ");
370
+ } else if (title === '' || title === '<div></div>') {
371
+ rowsErrors[id] += 'Content should not be empty. ';
372
+ } else {
373
+ var identicalAnswer = rows.slice(index + 1).some(function (r) {
374
+ return r.title === title;
375
+ });
376
+
377
+ if (identicalAnswer) {
378
+ rowsErrors[id] = 'Content should be unique. ';
379
+ }
380
+ }
381
+
343
382
  values.forEach(function (value) {
344
383
  if (value) {
345
384
  hasCorrectResponse = true;
@@ -347,16 +386,43 @@ var validate = function validate() {
347
386
  });
348
387
 
349
388
  if (!hasCorrectResponse) {
350
- rowsErrors[id] = 'No correct response defined.';
389
+ rowsErrors[id] += 'No correct response defined.';
390
+ }
391
+ });
392
+
393
+ if (maxAnswers && headers.length - 1 > maxAnswers) {
394
+ errors.columnsLengthError = "There should be maximum ".concat(maxAnswers, " answers.");
395
+ }
396
+
397
+ if (maxLengthFirstColumnHeading && headers[0].length > maxLengthFirstColumnHeading) {
398
+ columnsErrors[0] = "The first column heading should have the maximum length of ".concat(maxLengthFirstColumnHeading, " characters.");
399
+ }
400
+
401
+ (headers || []).slice(1).forEach(function (heading, index) {
402
+ if (heading === '' || heading === '<div></div>') {
403
+ columnsErrors[index + 1] = 'Content should not be empty.';
404
+ } else if (maxLengthAnswers && heading.length > maxLengthAnswers) {
405
+ columnsErrors[index + 1] = "Content length should be maximum ".concat(maxLengthAnswers, " characters.");
406
+ } else {
407
+ var identicalAnswer = headers.slice(index + 2).some(function (h) {
408
+ return h === heading;
409
+ });
410
+
411
+ if (identicalAnswer) {
412
+ columnsErrors[index + 2] = 'Content should be unique.';
413
+ }
351
414
  }
352
415
  });
353
- var errors = {};
354
416
 
355
417
  if (!(0, _isEmpty["default"])(rowsErrors)) {
356
418
  errors.rowsErrors = rowsErrors;
357
419
  errors.correctResponseError = choiceMode === 'radio' ? 'There should be a correct response defined for every row.' : 'There should be at least one correct response defined for every row.';
358
420
  }
359
421
 
422
+ if (!(0, _isEmpty["default"])(columnsErrors)) {
423
+ errors.columnsErrors = columnsErrors;
424
+ }
425
+
360
426
  return errors;
361
427
  };
362
428
 
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.js"],"names":["log","getResponseCorrectness","model","answers","env","isPartialScoring","partialScoring","enabled","rows","checkboxMode","choiceMode","Object","keys","length","totalCorrectAnswers","getTotalCorrectAnswers","getTotalCorrect","correctAnswers","incorrectAnswers","checkboxes","getCheckboxes","getCorrectRadios","getCorrectness","question","mode","forEach","row","answer","id","values","v","i","matchingTable","layout","noOfTotalCorrectAnswers","value","getPartialScore","totalCorrect","total","extraAnswers","score","parseFloat","toFixed","getOutComeScore","correctness","outcome","session","Promise","resolve","undefined","completed","empty","out","createDefaultModel","defaults","normalize","feedbackEnabled","promptEnabled","rationaleEnabled","teacherInstructionsEnabled","studentInstructionsEnabled","updateSession","normalizedQuestion","correctResponse","correctInfo","lockChoiceOrder","fb","feedback","then","allowFeedback","prompt","config","shuffled","disabled","view","role","teacherInstructions","rationale","assign","createCorrectResponseSession","r","validate","rowsErrors","hasCorrectResponse","errors","correctResponseError"],"mappings":"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","sourcesContent":["import isEqual from 'lodash/isEqual';\nimport isEmpty from 'lodash/isEmpty';\nimport cloneDeep from 'lodash/cloneDeep';\nimport { getFeedbackForCorrectness } from '@pie-lib/feedback';\nimport { lockChoices, getShuffledChoices, partialScoring } from '@pie-lib/controller-utils';\nimport debug from 'debug';\n\nconst log = debug('@pie-element:match:controller');\n\nimport defaults from './defaults';\n\nconst getResponseCorrectness = (model, answers, env = {}) => {\n const isPartialScoring = partialScoring.enabled(model, env);\n const rows = model.rows;\n const checkboxMode = model.choiceMode === 'checkbox';\n\n if (!answers || Object.keys(answers).length === 0) {\n return 'unanswered';\n }\n\n const totalCorrectAnswers = checkboxMode ? getTotalCorrectAnswers(model) : getTotalCorrect(model);\n let correctAnswers;\n let incorrectAnswers = 0;\n\n if (checkboxMode) {\n const checkboxes = getCheckboxes(rows, answers);\n\n correctAnswers = checkboxes.correctAnswers;\n incorrectAnswers = checkboxes.incorrectAnswers;\n } else {\n correctAnswers = getCorrectRadios(rows, answers);\n }\n\n if (totalCorrectAnswers === correctAnswers && !incorrectAnswers) {\n return 'correct';\n } else if (correctAnswers === 0) {\n return 'incorrect';\n } else if (isPartialScoring) {\n return 'partial';\n }\n\n return 'incorrect';\n};\n\nconst getCorrectness = (question, env, answers = {}) => {\n if (env.mode === 'evaluate') {\n return getResponseCorrectness(question, answers, env);\n }\n};\n\nconst getCheckboxes = (rows, answers) => {\n let correctAnswers = 0;\n let incorrectAnswers = 0;\n\n rows.forEach((row) => {\n const answer = answers[row.id];\n\n if (answer) {\n row.values.forEach((v, i) => {\n if (answer[i] && answer[i] === v) {\n correctAnswers += 1;\n } else if (answer[i] && answer[i] !== v) {\n incorrectAnswers += 1;\n }\n });\n }\n });\n\n return { correctAnswers, incorrectAnswers };\n};\n\nconst getCorrectRadios = (rows, answers) => {\n let correctAnswers = 0;\n\n rows.forEach((row) => {\n if (isEqual(row.values, answers[row.id])) {\n correctAnswers += 1;\n }\n });\n\n return correctAnswers;\n};\n\nconst getTotalCorrect = (question) => {\n const checkboxMode = question.choiceMode === 'checkbox';\n const matchingTable = checkboxMode ? question.layout - 1 : 1;\n return (question.rows.length || 0) * matchingTable;\n};\n\nconst getTotalCorrectAnswers = (question) => {\n let noOfTotalCorrectAnswers = 0;\n\n question.rows.forEach((row) => {\n row.values.forEach((value) => {\n if (value) {\n noOfTotalCorrectAnswers += 1;\n }\n });\n });\n\n return noOfTotalCorrectAnswers;\n};\n\nconst getPartialScore = (question, answers) => {\n const checkboxMode = question.choiceMode === 'checkbox';\n\n if (checkboxMode) {\n const { correctAnswers, incorrectAnswers } = getCheckboxes(question.rows, answers);\n const totalCorrect = getTotalCorrectAnswers(question);\n\n const total = totalCorrect === 0 ? 1 : totalCorrect;\n\n if (correctAnswers + incorrectAnswers > totalCorrect) {\n const extraAnswers = correctAnswers + incorrectAnswers - totalCorrect;\n const score = parseFloat(((correctAnswers - extraAnswers) / total).toFixed(2));\n\n return score < 0 ? 0 : score;\n } else {\n return parseFloat((correctAnswers / total).toFixed(2));\n }\n } else {\n const correctAnswers = getCorrectRadios(question.rows, answers);\n const totalCorrect = getTotalCorrect(question) === 0 ? 1 : getTotalCorrect(question);\n\n return parseFloat((correctAnswers / totalCorrect).toFixed(2));\n }\n};\n\nconst getOutComeScore = (question, env, answers = {}) => {\n const correctness = getCorrectness(question, env, answers);\n const isPartialScoring = partialScoring.enabled(question, env);\n\n return correctness === 'correct'\n ? 1\n : correctness === 'partial' && isPartialScoring\n ? getPartialScore(question, answers)\n : 0;\n};\n\nexport const outcome = (question, session, env) => {\n return new Promise((resolve) => {\n if (env.mode !== 'evaluate') {\n resolve({ score: undefined, completed: undefined });\n } else {\n if (!session || isEmpty(session)) {\n resolve({ score: 0, empty: true });\n }\n\n const out = {\n score: getOutComeScore(question, env, session.answers),\n };\n\n resolve(out);\n }\n });\n};\n\nexport function createDefaultModel(model = {}) {\n return new Promise((resolve) => {\n resolve({\n ...defaults,\n ...model,\n });\n });\n}\n\nexport const normalize = (question) => ({\n feedbackEnabled: true,\n promptEnabled: true,\n rationaleEnabled: true,\n teacherInstructionsEnabled: true,\n studentInstructionsEnabled: true,\n ...question,\n});\n\n/**\n *\n * @param {*} question\n * @param {*} session\n * @param {*} env\n * @param {*} updateSession - optional - a function that will set the properties passed into it on the session.\n */\nexport function model(question, session, env, updateSession) {\n return new Promise(async (resolve) => {\n const normalizedQuestion = cloneDeep(normalize(question));\n let correctness, score;\n\n if ((!session || isEmpty(session)) && env.mode === 'evaluate') {\n correctness = 'unanswered';\n score = '0%';\n } else {\n correctness = getCorrectness(normalizedQuestion, env, session && session.answers);\n score = `${getOutComeScore(normalizedQuestion, env, session && session.answers) * 100}%`;\n }\n\n const correctResponse = {};\n const correctInfo = {\n score,\n correctness,\n };\n\n const lockChoiceOrder = lockChoices(normalizedQuestion, session, env);\n\n if (!lockChoiceOrder) {\n normalizedQuestion.rows = await getShuffledChoices(normalizedQuestion.rows, session, updateSession, 'id');\n }\n\n normalizedQuestion.rows.forEach((row) => {\n correctResponse[row.id] = row.values;\n\n if (env.mode !== 'evaluate') {\n delete row.values;\n }\n });\n\n const fb =\n env.mode === 'evaluate' && normalizedQuestion.feedbackEnabled\n ? getFeedbackForCorrectness(correctInfo.correctness, normalizedQuestion.feedback)\n : Promise.resolve(undefined);\n\n fb.then((feedback) => {\n const out = {\n allowFeedback: normalizedQuestion.feedbackEnabled,\n prompt: normalizedQuestion.promptEnabled ? normalizedQuestion.prompt : null,\n config: {\n ...normalizedQuestion,\n shuffled: !normalizedQuestion.lockChoiceOrder,\n },\n feedback,\n disabled: env.mode !== 'gather',\n view: env.mode === 'view',\n };\n\n if (env.role === 'instructor' && (env.mode === 'view' || env.mode === 'evaluate')) {\n out.teacherInstructions = normalizedQuestion.teacherInstructionsEnabled\n ? normalizedQuestion.teacherInstructions\n : null;\n out.rationale = normalizedQuestion.rationaleEnabled ? normalizedQuestion.rationale : null;\n } else {\n out.rationale = null;\n out.teacherInstructions = null;\n out.config.rationale = null;\n out.config.teacherInstructions = null;\n }\n\n if (env.mode === 'evaluate') {\n Object.assign(out, {\n correctResponse,\n correctness: correctInfo,\n });\n }\n\n log('out: ', out);\n resolve(out);\n });\n });\n}\n\nexport const createCorrectResponseSession = (question, env) => {\n return new Promise((resolve) => {\n if (env.mode !== 'evaluate' && env.role === 'instructor') {\n const { rows } = question;\n const answers = {};\n\n rows.forEach((r) => {\n answers[r.id] = r.values;\n });\n\n resolve({\n answers,\n id: '1',\n });\n } else {\n resolve(null);\n }\n });\n};\n\nexport const validate = (model = {}, config = {}) => {\n const { rows, choiceMode } = model;\n const rowsErrors = {};\n\n (rows || []).forEach((row) => {\n const { id, values = [] } = row;\n let hasCorrectResponse = false;\n\n values.forEach((value) => {\n if (value) {\n hasCorrectResponse = true;\n }\n });\n\n if (!hasCorrectResponse) {\n rowsErrors[id] = 'No correct response defined.';\n }\n });\n\n const errors = {};\n\n if (!isEmpty(rowsErrors)) {\n errors.rowsErrors = rowsErrors;\n errors.correctResponseError =\n choiceMode === 'radio'\n ? 'There should be a correct response defined for every row.'\n : 'There should be at least one correct response defined for every row.';\n }\n\n return errors;\n};\n"],"file":"index.js"}
1
+ {"version":3,"sources":["../src/index.js"],"names":["log","getResponseCorrectness","model","answers","env","isPartialScoring","partialScoring","enabled","rows","checkboxMode","choiceMode","Object","keys","length","totalCorrectAnswers","getTotalCorrectAnswers","getTotalCorrect","correctAnswers","incorrectAnswers","checkboxes","getCheckboxes","getCorrectRadios","getCorrectness","question","mode","forEach","row","answer","id","values","v","i","matchingTable","layout","noOfTotalCorrectAnswers","value","getPartialScore","totalCorrect","total","extraAnswers","score","parseFloat","toFixed","getOutComeScore","correctness","outcome","session","Promise","resolve","undefined","completed","empty","out","createDefaultModel","defaults","normalize","feedbackEnabled","promptEnabled","rationaleEnabled","teacherInstructionsEnabled","studentInstructionsEnabled","updateSession","normalizedQuestion","correctResponse","correctInfo","lockChoiceOrder","fb","feedback","then","allowFeedback","prompt","config","shuffled","disabled","view","role","teacherInstructions","rationale","assign","createCorrectResponseSession","r","dp","DOMParser","markupToText","s","root","parseFromString","body","textContent","validate","headers","minQuestions","maxQuestions","maxLengthQuestionsHeading","maxAnswers","maxLengthAnswers","maxLengthFirstColumnHeading","rowsErrors","columnsErrors","errors","noOfRowsError","index","title","hasCorrectResponse","identicalAnswer","slice","some","columnsLengthError","heading","h","correctResponseError"],"mappings":"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","sourcesContent":["import isEqual from 'lodash/isEqual';\nimport isEmpty from 'lodash/isEmpty';\nimport cloneDeep from 'lodash/cloneDeep';\nimport { getFeedbackForCorrectness } from '@pie-lib/feedback';\nimport { lockChoices, getShuffledChoices, partialScoring } from '@pie-lib/controller-utils';\nimport debug from 'debug';\n\nconst log = debug('@pie-element:match:controller');\n\nimport defaults from './defaults';\n\nconst getResponseCorrectness = (model, answers, env = {}) => {\n const isPartialScoring = partialScoring.enabled(model, env);\n const rows = model.rows;\n const checkboxMode = model.choiceMode === 'checkbox';\n\n if (!answers || Object.keys(answers).length === 0) {\n return 'unanswered';\n }\n\n const totalCorrectAnswers = checkboxMode ? getTotalCorrectAnswers(model) : getTotalCorrect(model);\n let correctAnswers;\n let incorrectAnswers = 0;\n\n if (checkboxMode) {\n const checkboxes = getCheckboxes(rows, answers);\n\n correctAnswers = checkboxes.correctAnswers;\n incorrectAnswers = checkboxes.incorrectAnswers;\n } else {\n correctAnswers = getCorrectRadios(rows, answers);\n }\n\n if (totalCorrectAnswers === correctAnswers && !incorrectAnswers) {\n return 'correct';\n } else if (correctAnswers === 0) {\n return 'incorrect';\n } else if (isPartialScoring) {\n return 'partial';\n }\n\n return 'incorrect';\n};\n\nconst getCorrectness = (question, env, answers = {}) => {\n if (env.mode === 'evaluate') {\n return getResponseCorrectness(question, answers, env);\n }\n};\n\nconst getCheckboxes = (rows, answers) => {\n let correctAnswers = 0;\n let incorrectAnswers = 0;\n\n rows.forEach((row) => {\n const answer = answers[row.id];\n\n if (answer) {\n row.values.forEach((v, i) => {\n if (answer[i] && answer[i] === v) {\n correctAnswers += 1;\n } else if (answer[i] && answer[i] !== v) {\n incorrectAnswers += 1;\n }\n });\n }\n });\n\n return { correctAnswers, incorrectAnswers };\n};\n\nconst getCorrectRadios = (rows, answers) => {\n let correctAnswers = 0;\n\n rows.forEach((row) => {\n if (isEqual(row.values, answers[row.id])) {\n correctAnswers += 1;\n }\n });\n\n return correctAnswers;\n};\n\nconst getTotalCorrect = (question) => {\n const checkboxMode = question.choiceMode === 'checkbox';\n const matchingTable = checkboxMode ? question.layout - 1 : 1;\n return (question.rows.length || 0) * matchingTable;\n};\n\nconst getTotalCorrectAnswers = (question) => {\n let noOfTotalCorrectAnswers = 0;\n\n question.rows.forEach((row) => {\n row.values.forEach((value) => {\n if (value) {\n noOfTotalCorrectAnswers += 1;\n }\n });\n });\n\n return noOfTotalCorrectAnswers;\n};\n\nconst getPartialScore = (question, answers) => {\n const checkboxMode = question.choiceMode === 'checkbox';\n\n if (checkboxMode) {\n const { correctAnswers, incorrectAnswers } = getCheckboxes(question.rows, answers);\n const totalCorrect = getTotalCorrectAnswers(question);\n\n const total = totalCorrect === 0 ? 1 : totalCorrect;\n\n if (correctAnswers + incorrectAnswers > totalCorrect) {\n const extraAnswers = correctAnswers + incorrectAnswers - totalCorrect;\n const score = parseFloat(((correctAnswers - extraAnswers) / total).toFixed(2));\n\n return score < 0 ? 0 : score;\n } else {\n return parseFloat((correctAnswers / total).toFixed(2));\n }\n } else {\n const correctAnswers = getCorrectRadios(question.rows, answers);\n const totalCorrect = getTotalCorrect(question) === 0 ? 1 : getTotalCorrect(question);\n\n return parseFloat((correctAnswers / totalCorrect).toFixed(2));\n }\n};\n\nconst getOutComeScore = (question, env, answers = {}) => {\n const correctness = getCorrectness(question, env, answers);\n const isPartialScoring = partialScoring.enabled(question, env);\n\n return correctness === 'correct'\n ? 1\n : correctness === 'partial' && isPartialScoring\n ? getPartialScore(question, answers)\n : 0;\n};\n\nexport const outcome = (question, session, env) => {\n return new Promise((resolve) => {\n if (env.mode !== 'evaluate') {\n resolve({ score: undefined, completed: undefined });\n } else {\n if (!session || isEmpty(session)) {\n resolve({ score: 0, empty: true });\n }\n\n const out = {\n score: getOutComeScore(question, env, session.answers),\n };\n\n resolve(out);\n }\n });\n};\n\nexport function createDefaultModel(model = {}) {\n return new Promise((resolve) => {\n resolve({\n ...defaults,\n ...model,\n });\n });\n}\n\nexport const normalize = (question) => ({\n feedbackEnabled: true,\n promptEnabled: true,\n rationaleEnabled: true,\n teacherInstructionsEnabled: true,\n studentInstructionsEnabled: true,\n ...question,\n});\n\n/**\n *\n * @param {*} question\n * @param {*} session\n * @param {*} env\n * @param {*} updateSession - optional - a function that will set the properties passed into it on the session.\n */\nexport function model(question, session, env, updateSession) {\n return new Promise(async (resolve) => {\n const normalizedQuestion = cloneDeep(normalize(question));\n let correctness, score;\n\n if ((!session || isEmpty(session)) && env.mode === 'evaluate') {\n correctness = 'unanswered';\n score = '0%';\n } else {\n correctness = getCorrectness(normalizedQuestion, env, session && session.answers);\n score = `${getOutComeScore(normalizedQuestion, env, session && session.answers) * 100}%`;\n }\n\n const correctResponse = {};\n const correctInfo = {\n score,\n correctness,\n };\n\n const lockChoiceOrder = lockChoices(normalizedQuestion, session, env);\n\n if (!lockChoiceOrder) {\n normalizedQuestion.rows = await getShuffledChoices(normalizedQuestion.rows, session, updateSession, 'id');\n }\n\n normalizedQuestion.rows.forEach((row) => {\n correctResponse[row.id] = row.values;\n\n if (env.mode !== 'evaluate') {\n delete row.values;\n }\n });\n\n const fb =\n env.mode === 'evaluate' && normalizedQuestion.feedbackEnabled\n ? getFeedbackForCorrectness(correctInfo.correctness, normalizedQuestion.feedback)\n : Promise.resolve(undefined);\n\n fb.then((feedback) => {\n const out = {\n allowFeedback: normalizedQuestion.feedbackEnabled,\n prompt: normalizedQuestion.promptEnabled ? normalizedQuestion.prompt : null,\n config: {\n ...normalizedQuestion,\n shuffled: !normalizedQuestion.lockChoiceOrder,\n },\n feedback,\n disabled: env.mode !== 'gather',\n view: env.mode === 'view',\n };\n\n if (env.role === 'instructor' && (env.mode === 'view' || env.mode === 'evaluate')) {\n out.teacherInstructions = normalizedQuestion.teacherInstructionsEnabled\n ? normalizedQuestion.teacherInstructions\n : null;\n out.rationale = normalizedQuestion.rationaleEnabled ? normalizedQuestion.rationale : null;\n } else {\n out.rationale = null;\n out.teacherInstructions = null;\n out.config.rationale = null;\n out.config.teacherInstructions = null;\n }\n\n if (env.mode === 'evaluate') {\n Object.assign(out, {\n correctResponse,\n correctness: correctInfo,\n });\n }\n\n log('out: ', out);\n resolve(out);\n });\n });\n}\n\nexport const createCorrectResponseSession = (question, env) => {\n return new Promise((resolve) => {\n if (env.mode !== 'evaluate' && env.role === 'instructor') {\n const { rows } = question;\n const answers = {};\n\n rows.forEach((r) => {\n answers[r.id] = r.values;\n });\n\n resolve({\n answers,\n id: '1',\n });\n } else {\n resolve(null);\n }\n });\n};\n\nconst dp = new DOMParser();\nconst markupToText = (s) => {\n const root = dp.parseFromString(s, 'text/html');\n return root.body.textContent;\n};\n\nexport const validate = (model = {}, config = {}) => {\n const { rows, choiceMode, headers } = model;\n const {\n minQuestions,\n maxQuestions,\n maxLengthQuestionsHeading,\n maxAnswers,\n maxLengthAnswers,\n maxLengthFirstColumnHeading\n } = config;\n const rowsErrors = {};\n const columnsErrors = {};\n const errors = {};\n\n if (rows.length < minQuestions) {\n errors.noOfRowsError = `There should be at least ${minQuestions} question rows.`;\n } else if (rows.length > maxQuestions) {\n errors.noOfRowsError = `No more than ${maxQuestions} question rows should be defined.`;\n }\n\n (rows || []).forEach((row, index) => {\n const { id, values = [], title } = row;\n let hasCorrectResponse = false;\n\n rowsErrors[id] = '';\n\n if (maxLengthQuestionsHeading && markupToText(title).length > maxLengthQuestionsHeading) {\n rowsErrors[id] += `Questions rows content length should not be more than ${maxLengthQuestionsHeading} characters. `;\n } else if (title === '' || title === '<div></div>') {\n rowsErrors[id] += 'Content should not be empty. ';\n } else {\n const identicalAnswer = rows.slice(index + 1).some((r) => {\n return r.title === title;\n });\n\n if (identicalAnswer) {\n rowsErrors[id] = 'Content should be unique. ';\n }\n }\n\n values.forEach((value) => {\n if (value) {\n hasCorrectResponse = true;\n }\n });\n\n if (!hasCorrectResponse) {\n rowsErrors[id] += 'No correct response defined.';\n }\n });\n\n if (maxAnswers && headers.length - 1 > maxAnswers) {\n errors.columnsLengthError = `There should be maximum ${maxAnswers} answers.`;\n }\n\n if (maxLengthFirstColumnHeading && headers[0].length > maxLengthFirstColumnHeading) {\n columnsErrors[0] = `The first column heading should have the maximum length of ${maxLengthFirstColumnHeading} characters.`;\n }\n\n (headers || []).slice(1).forEach((heading, index) => {\n if (heading === '' || heading === '<div></div>') {\n columnsErrors[index + 1] = 'Content should not be empty.';\n } else if (maxLengthAnswers && heading.length > maxLengthAnswers) {\n columnsErrors[index + 1] = `Content length should be maximum ${maxLengthAnswers} characters.`;\n } else {\n const identicalAnswer = headers.slice(index + 2).some((h) => {\n return h === heading;\n });\n\n if (identicalAnswer) {\n columnsErrors[index + 2] = 'Content should be unique.';\n }\n }\n });\n\n\n if (!isEmpty(rowsErrors)) {\n errors.rowsErrors = rowsErrors;\n errors.correctResponseError =\n choiceMode === 'radio'\n ? 'There should be a correct response defined for every row.'\n : 'There should be at least one correct response defined for every row.';\n }\n\n if (!isEmpty(columnsErrors)) {\n errors.columnsErrors = columnsErrors;\n }\n\n return errors;\n};\n"],"file":"index.js"}
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@pie-element/match-controller",
3
3
  "private": true,
4
- "version": "4.5.1",
4
+ "version": "4.6.0",
5
5
  "description": "",
6
6
  "main": "lib/index.js",
7
7
  "module": "src/index.js",
@@ -284,6 +284,35 @@
284
284
  }
285
285
  }
286
286
  },
287
+ "minQuestions": {
288
+ "description": "Indicates the minimum number of question rows",
289
+ "type": "number",
290
+ "title": "minQuestions"
291
+ },
292
+ "maxQuestions": {
293
+ "description": "Indicates the maximum number of question rows",
294
+ "type": "number",
295
+ "title": "maxQuestions"
296
+ },
297
+ "maxLengthQuestionsHeading": {
298
+ "description": "Indicates the maximum length of question rows headings",
299
+ "type": "number",
300
+ "title": "maxLengthQuestionsHeading"
301
+ },
302
+ "maxAnswers": {
303
+ "description": "Indicates the maximum number of answer columns",
304
+ "type": "number",
305
+ "title": "maxAnswers"
306
+ },
307
+ "maxLengthAnswers": {
308
+ "description": "Indicates the maximum length of answer columns headings",
309
+ "type": "number",
310
+ "title": "maxLengthAnswers"
311
+ },
312
+ "maxLengthFirstColumnHeading": {
313
+ "description": "Indicates the maximum length of first column headings",
314
+ "type": "number",
315
+ "title": "maxLengthFirstColumnHeading"
287
316
  "width": {
288
317
  "description": "How large (in px) should match be",
289
318
  "type": "string",
@@ -214,6 +214,29 @@ Indicates if the item has to be displayed in the Settings Panel
214
214
 
215
215
  Indicates the label for the item that has to be displayed in the Settings Panel
216
216
 
217
+ # `minQuestions` (number)
218
+
219
+ Indicates the minimum number of question rows
220
+
221
+ # `maxQuestions` (number)
222
+
223
+ Indicates the maximum number of question rows
224
+
225
+ # `maxLengthQuestionsHeading` (number)
226
+
227
+ Indicates the maximum length of question rows headings
228
+
229
+ # `maxAnswers` (number)
230
+
231
+ Indicates the maximum number of answer columns
232
+
233
+ # `maxLengthAnswers` (number)
234
+
235
+ Indicates the maximum length of answer columns headings
236
+
237
+ # `maxLengthFirstColumnHeading` (number)
238
+
239
+ Indicates the maximum length of first column headings
217
240
  # `width` (string, required)
218
241
 
219
242
  How large (in px) should match be
package/package.json CHANGED
@@ -4,7 +4,7 @@
4
4
  "access": "public"
5
5
  },
6
6
  "repository": "pie-framework/pie-elements",
7
- "version": "5.3.2-next.98+e6f0de2e0",
7
+ "version": "5.4.1-next.2+412a40f6b",
8
8
  "main": "lib/index.js",
9
9
  "description": "",
10
10
  "scripts": {
@@ -26,6 +26,6 @@
26
26
  },
27
27
  "author": "",
28
28
  "license": "ISC",
29
- "gitHead": "e6f0de2e0a0e614c6fa7ff0daed87d5bea48f44f",
29
+ "gitHead": "412a40f6b326887a30a774615303e6a6c03ce9dc",
30
30
  "module": "src/index.js"
31
31
  }