@pie-element/match 7.4.1-next.0 → 7.4.2-next.5

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,17 @@
3
3
  All notable changes to this project will be documented in this file.
4
4
  See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
5
5
 
6
+ ## [7.4.1](https://github.com/pie-framework/pie-elements/compare/@pie-element/match@7.4.0...@pie-element/match@7.4.1) (2024-03-21)
7
+
8
+
9
+ ### Bug Fixes
10
+
11
+ * **match:** exclude column errors if no error occurred PD-3570 ([c0c16fa](https://github.com/pie-framework/pie-elements/commit/c0c16facf76906c4d3510eb9793f631790d35af7))
12
+
13
+
14
+
15
+
16
+
6
17
  # [7.4.0](https://github.com/pie-framework/pie-elements/compare/@pie-element/match@7.3.0...@pie-element/match@7.4.0) (2024-03-20)
7
18
 
8
19
 
@@ -3,6 +3,17 @@
3
3
  All notable changes to this project will be documented in this file.
4
4
  See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
5
5
 
6
+ ## [6.8.1](https://github.com/pie-framework/pie-elements/compare/@pie-element/match-configure@6.8.0...@pie-element/match-configure@6.8.1) (2024-03-21)
7
+
8
+
9
+ ### Bug Fixes
10
+
11
+ * **match:** exclude column errors if no error occurred PD-3570 ([c0c16fa](https://github.com/pie-framework/pie-elements/commit/c0c16facf76906c4d3510eb9793f631790d35af7))
12
+
13
+
14
+
15
+
16
+
6
17
  # [6.8.0](https://github.com/pie-framework/pie-elements/compare/@pie-element/match-configure@6.7.0...@pie-element/match-configure@6.8.0) (2024-03-20)
7
18
 
8
19
 
@@ -120,11 +120,16 @@ var styles = function styles(theme) {
120
120
  marginBottom: {
121
121
  marginBottom: theme.typography.fontSize - 2 + theme.spacing.unit
122
122
  },
123
- errorText: {
123
+ columnErrorText: {
124
124
  fontSize: theme.typography.fontSize - 2,
125
125
  color: theme.palette.error.main,
126
126
  paddingTop: "".concat(theme.spacing.unit, "px !important"),
127
127
  width: 'fit-content !important'
128
+ },
129
+ errorText: {
130
+ fontSize: theme.typography.fontSize - 2,
131
+ color: theme.palette.error.main,
132
+ paddingBottom: theme.spacing.unit
128
133
  }
129
134
  };
130
135
  };
@@ -264,13 +269,7 @@ var AnswerConfigBlock = /*#__PURE__*/function (_React$Component) {
264
269
  }, /*#__PURE__*/React.createElement(_Typography["default"], {
265
270
  type: "body1",
266
271
  component: "div"
267
- }, "Click on the labels to edit or remove. Set the correct answers by clicking each correct answer per row."), correctResponseError && /*#__PURE__*/React.createElement("div", {
268
- className: classes.errorText
269
- }, correctResponseError), noOfRowsError && /*#__PURE__*/React.createElement("div", {
270
- className: classes.errorText
271
- }, noOfRowsError), columnsLengthError && /*#__PURE__*/React.createElement("div", {
272
- className: classes.errorText
273
- }, columnsLengthError), /*#__PURE__*/React.createElement("div", {
272
+ }, "Click on the labels to edit or remove. Set the correct answers by clicking each correct answer per row."), /*#__PURE__*/React.createElement("div", {
274
273
  className: classes.rowTable,
275
274
  style: configuration.width ? {
276
275
  width: configuration.width,
@@ -299,7 +298,7 @@ var AnswerConfigBlock = /*#__PURE__*/function (_React$Component) {
299
298
  }],
300
299
  error: columnsErrors && columnsErrors[idx]
301
300
  }), columnsErrors && columnsErrors[idx] && /*#__PURE__*/React.createElement("div", {
302
- className: classes.errorText
301
+ className: classes.columnErrorText
303
302
  }, columnsErrors[idx]));
304
303
  }), /*#__PURE__*/React.createElement("div", {
305
304
  className: classes.deleteIcon
@@ -324,7 +323,13 @@ var AnswerConfigBlock = /*#__PURE__*/function (_React$Component) {
324
323
  minQuestions: minQuestions,
325
324
  inputConfiguration: (0, _utils.getPluginProps)(rows === null || rows === void 0 ? void 0 : rows.inputConfiguration, baseInputConfiguration)
326
325
  });
327
- }), /*#__PURE__*/React.createElement(_addRow["default"], {
326
+ }), correctResponseError && /*#__PURE__*/React.createElement("div", {
327
+ className: classes.errorText
328
+ }, correctResponseError), noOfRowsError && /*#__PURE__*/React.createElement("div", {
329
+ className: classes.errorText
330
+ }, noOfRowsError), columnsLengthError && /*#__PURE__*/React.createElement("div", {
331
+ className: classes.errorText
332
+ }, columnsLengthError), /*#__PURE__*/React.createElement(_addRow["default"], {
328
333
  onAddClick: onAddRow
329
334
  })));
330
335
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/answer-config-block.jsx"],"names":["log","styles","theme","container","marginBottom","spacing","unit","display","flexDirection","rowContainer","alignItems","flex","width","borderBottom","palette","grey","paddingBottom","marginTop","rowItem","justifyContent","padding","textAlign","deleteIcon","minWidth","questionText","marginRight","maxWidth","rowTable","headerInput","fontWeight","typography","fontSize","errorText","color","error","main","paddingTop","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","baseInputConfiguration","maxImageWidth","maxImageHeight","mathMlOptions","minQuestions","errors","correctResponseError","rowsErrors","columnsErrors","noOfRowsError","columnsLengthError","filteredDefaultPlugins","DEFAULT_PLUGINS","filter","p","defaultImageMaxWidth","prompt","defaultImageMaxHeight","overflow","settings","map","header","idx","onHeaderChange","inputConfiguration","language","row","onDeleteRow","moveRow","enableImages","id","rowTitles","React","Component","PropTypes","object","isRequired","func","shape","add","bool"],"mappings":"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","sourcesContent":["import { getPluginProps } from './utils';\nimport * as React from 'react';\nimport cx from 'classnames';\nimport PropTypes from 'prop-types';\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/pie-toolbox/editable-html';\n\nconst log = debug('pie-elements:match:configure');\n\nconst styles = (theme) => ({\n container: {\n marginBottom: theme.spacing.unit * 2.5,\n display: 'flex',\n flexDirection: 'column',\n },\n rowContainer: {\n display: 'flex',\n alignItems: 'center',\n flex: 1,\n width: '100%',\n borderBottom: `2px solid ${theme.palette.grey['A100']}`,\n paddingBottom: theme.spacing.unit * 2,\n marginTop: theme.spacing.unit * 2,\n marginBottom: theme.spacing.unit,\n },\n rowItem: {\n flex: 1,\n display: 'flex',\n justifyContent: 'center',\n alignItems: 'center',\n flexDirection: 'column',\n '&> div': {\n width: '150px',\n padding: `0 ${theme.spacing.unit}px`,\n textAlign: 'center',\n },\n },\n deleteIcon: {\n flex: 0.5,\n minWidth: '48px',\n padding: `0 ${theme.spacing.unit}px`,\n },\n questionText: {\n flex: 2,\n display: 'flex',\n justifyContent: 'flex-start',\n marginRight: theme.spacing.unit,\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 headerInput: {\n '&> div': {\n fontWeight: 'bold',\n },\n },\n marginBottom: {\n marginBottom: theme.typography.fontSize - 2 + theme.spacing.unit,\n },\n errorText: {\n fontSize: theme.typography.fontSize - 2,\n color: theme.palette.error.main,\n paddingTop: `${theme.spacing.unit}px !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 spellCheck: PropTypes.bool,\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 { classes, model, onAddRow, imageSupport, configuration, toolbarOpts, spellCheck, uploadSoundSupport } =\n this.props;\n const {\n baseInputConfiguration = {},\n headers = {},\n rows = {},\n maxImageWidth = {},\n maxImageHeight = {},\n mathMlOptions = {},\n minQuestions,\n } = 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\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\n className={classes.rowTable}\n style={configuration.width ? { width: configuration.width, overflow: 'scroll' } : {}}\n >\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={columnsErrors && !columnsErrors[idx] ? classes.marginBottom : classes.headerInput}\n label={'column label'}\n activePlugins={filteredDefaultPlugins}\n pluginProps={getPluginProps(headers?.inputConfiguration, baseInputConfiguration)}\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 </div>\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 mathMlOptions={mathMlOptions}\n minQuestions={minQuestions}\n inputConfiguration={getPluginProps(rows?.inputConfiguration, baseInputConfiguration)}\n />\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"}
1
+ {"version":3,"sources":["../src/answer-config-block.jsx"],"names":["log","styles","theme","container","marginBottom","spacing","unit","display","flexDirection","rowContainer","alignItems","flex","width","borderBottom","palette","grey","paddingBottom","marginTop","rowItem","justifyContent","padding","textAlign","deleteIcon","minWidth","questionText","marginRight","maxWidth","rowTable","headerInput","fontWeight","typography","fontSize","columnErrorText","color","error","main","paddingTop","errorText","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","baseInputConfiguration","maxImageWidth","maxImageHeight","mathMlOptions","minQuestions","errors","correctResponseError","rowsErrors","columnsErrors","noOfRowsError","columnsLengthError","filteredDefaultPlugins","DEFAULT_PLUGINS","filter","p","defaultImageMaxWidth","prompt","defaultImageMaxHeight","overflow","settings","map","header","idx","onHeaderChange","inputConfiguration","language","row","onDeleteRow","moveRow","enableImages","id","rowTitles","React","Component","PropTypes","object","isRequired","func","shape","add","bool"],"mappings":"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","sourcesContent":["import { getPluginProps } from './utils';\nimport * as React from 'react';\nimport cx from 'classnames';\nimport PropTypes from 'prop-types';\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/pie-toolbox/editable-html';\n\nconst log = debug('pie-elements:match:configure');\n\nconst styles = (theme) => ({\n container: {\n marginBottom: theme.spacing.unit * 2.5,\n display: 'flex',\n flexDirection: 'column',\n },\n rowContainer: {\n display: 'flex',\n alignItems: 'center',\n flex: 1,\n width: '100%',\n borderBottom: `2px solid ${theme.palette.grey['A100']}`,\n paddingBottom: theme.spacing.unit * 2,\n marginTop: theme.spacing.unit * 2,\n marginBottom: theme.spacing.unit,\n },\n rowItem: {\n flex: 1,\n display: 'flex',\n justifyContent: 'center',\n alignItems: 'center',\n flexDirection: 'column',\n '&> div': {\n width: '150px',\n padding: `0 ${theme.spacing.unit}px`,\n textAlign: 'center',\n },\n },\n deleteIcon: {\n flex: 0.5,\n minWidth: '48px',\n padding: `0 ${theme.spacing.unit}px`,\n },\n questionText: {\n flex: 2,\n display: 'flex',\n justifyContent: 'flex-start',\n marginRight: theme.spacing.unit,\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 headerInput: {\n '&> div': {\n fontWeight: 'bold',\n },\n },\n marginBottom: {\n marginBottom: theme.typography.fontSize - 2 + theme.spacing.unit,\n },\n columnErrorText: {\n fontSize: theme.typography.fontSize - 2,\n color: theme.palette.error.main,\n paddingTop: `${theme.spacing.unit}px !important`,\n width: 'fit-content !important',\n },\n errorText: {\n fontSize: theme.typography.fontSize - 2,\n color: theme.palette.error.main,\n paddingBottom: 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 spellCheck: PropTypes.bool,\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 { classes, model, onAddRow, imageSupport, configuration, toolbarOpts, spellCheck, uploadSoundSupport } =\n this.props;\n const {\n baseInputConfiguration = {},\n headers = {},\n rows = {},\n maxImageWidth = {},\n maxImageHeight = {},\n mathMlOptions = {},\n minQuestions,\n } = 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\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\n className={classes.rowTable}\n style={configuration.width ? { width: configuration.width, overflow: 'scroll' } : {}}\n >\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={columnsErrors && !columnsErrors[idx] ? classes.marginBottom : classes.headerInput}\n label={'column label'}\n activePlugins={filteredDefaultPlugins}\n pluginProps={getPluginProps(headers?.inputConfiguration, baseInputConfiguration)}\n autoWidthToolbar\n spellCheck={spellCheck}\n uploadSoundSupport={uploadSoundSupport}\n languageCharactersProps={[{ language: 'spanish' }, { language: 'special' }]}\n error={columnsErrors && columnsErrors[idx]}\n />\n {columnsErrors && columnsErrors[idx] && (\n <div className={classes.columnErrorText}>{columnsErrors[idx]}</div>\n )}\n </div>\n ))}\n <div className={classes.deleteIcon} />\n </div>\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 mathMlOptions={mathMlOptions}\n minQuestions={minQuestions}\n inputConfiguration={getPluginProps(rows?.inputConfiguration, baseInputConfiguration)}\n />\n ))}\n\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 <AddRow onAddClick={onAddRow} />\n </div>\n </div>\n );\n }\n}\n\nexport default withStyles(styles)(AnswerConfigBlock);\n"],"file":"answer-config-block.js"}
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@pie-element/match-configure",
3
3
  "private": true,
4
- "version": "6.8.0",
4
+ "version": "6.8.1",
5
5
  "description": "",
6
6
  "main": "lib/index.js",
7
7
  "module": "src/index.js",
@@ -3,6 +3,17 @@
3
3
  All notable changes to this project will be documented in this file.
4
4
  See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
5
5
 
6
+ ## [6.3.1](https://github.com/pie-framework/pie-elements/compare/@pie-element/match-controller@6.3.0...@pie-element/match-controller@6.3.1) (2024-03-21)
7
+
8
+
9
+ ### Bug Fixes
10
+
11
+ * **match:** exclude column errors if no error occurred PD-3570 ([c0c16fa](https://github.com/pie-framework/pie-elements/commit/c0c16facf76906c4d3510eb9793f631790d35af7))
12
+
13
+
14
+
15
+
16
+
6
17
  # [6.3.0](https://github.com/pie-framework/pie-elements/compare/@pie-element/match-controller@6.2.0...@pie-element/match-controller@6.3.0) (2024-03-20)
7
18
 
8
19
 
@@ -417,9 +417,9 @@ var validate = function validate() {
417
417
 
418
418
  var headersContent = (headers || []).map(function (heading) {
419
419
  return getContent(heading);
420
- }); // remove first column since it does not require validation
420
+ });
421
+ headersContent.shift(); // remove first column since it does not require validation
421
422
 
422
- headersContent.shift();
423
423
  headersContent.forEach(function (heading, index) {
424
424
  var headerIndex = index + 1; // we need to add 1 because we removed first header from validation
425
425
 
@@ -457,7 +457,11 @@ var validate = function validate() {
457
457
  }
458
458
  }
459
459
 
460
- if (!(0, _isEmpty["default"])(columnsErrors)) {
460
+ var hasColumnErrors = Object.values(columnsErrors).some(function (error) {
461
+ return (error || '').length;
462
+ });
463
+
464
+ if (hasColumnErrors) {
461
465
  errors.columnsErrors = columnsErrors;
462
466
  }
463
467
 
@@ -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","prompt","essentials","allowFeedback","shuffled","disabled","view","role","teacherInstructions","rationale","assign","createCorrectResponseSession","r","getInnerText","html","replaceAll","getContent","replace","validate","config","headers","minQuestions","maxQuestions","maxLengthQuestionsHeading","maxAnswers","maxLengthAnswers","maxLengthFirstColumnHeading","rowsErrors","columnsErrors","errors","field","required","noOfRowsError","index","title","identicalAnswer","slice","some","hasCorrectResponse","columnsLengthError","headersContent","map","heading","shift","headerIndex","head","hasRowErrors","error","noCorrectAnswer","includes","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/pie-toolbox/feedback';\nimport { lockChoices, getShuffledChoices, partialScoring } from '@pie-lib/pie-toolbox/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: false,\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 { feedbackEnabled, promptEnabled, prompt, lockChoiceOrder, ...essentials } = normalizedQuestion;\n const out = {\n ...essentials,\n allowFeedback: feedbackEnabled,\n prompt: promptEnabled ? prompt : null,\n shuffled: !lockChoiceOrder,\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 }\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\n// remove all html tags\nconst getInnerText = (html) => (html || '').replaceAll(/<[^>]*>/g, '');\n\n// remove all html tags except img and iframe\nconst getContent = (html) => (html || '').replace(/(<(?!img|iframe)([^>]+)>)/gi, '');\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 ['teacherInstructions', 'prompt', 'rationale'].forEach((field) => {\n if (config[field]?.required && !getContent(model[field])) {\n errors[field] = 'This field is required.';\n }\n });\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 rowsErrors[id] = '';\n\n if (maxLengthQuestionsHeading && getInnerText(title).length > maxLengthQuestionsHeading) {\n rowsErrors[id] += `Content length should be maximum ${maxLengthQuestionsHeading} characters. `;\n }\n\n if (!getContent(title)) {\n rowsErrors[id] += 'Content should not be empty. ';\n } else {\n // check for identical content with the previous answers\n const identicalAnswer = rows.slice(0, index).some((r) => getContent(r.title) === getContent(title));\n\n if (identicalAnswer) {\n rowsErrors[id] += 'Content should be unique. ';\n }\n }\n\n const hasCorrectResponse = values.some((value) => !!value);\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] = `Content length should be maximum ${maxLengthFirstColumnHeading} characters.`;\n }\n\n const headersContent = (headers || []).map((heading) => getContent(heading));\n // remove first column since it does not require validation\n headersContent.shift();\n\n headersContent.forEach((heading, index) => {\n const headerIndex = index + 1; // we need to add 1 because we removed first header from validation\n columnsErrors[headerIndex] = '';\n\n if (maxLengthAnswers && getInnerText(heading).length > maxLengthAnswers) {\n columnsErrors[headerIndex] += `Content length should be maximum ${maxLengthQuestionsHeading} characters. `;\n }\n\n if (!heading) {\n columnsErrors[headerIndex] += 'Content should not be empty.';\n } else {\n // check for identical content with the previous headers\n const identicalAnswer = headersContent.slice(0, index).some((head) => head === heading);\n\n if (identicalAnswer) {\n columnsErrors[index + 1] += 'Content should be unique.';\n }\n }\n });\n\n const hasRowErrors = Object.values(rowsErrors).some((error) => (error || '').length);\n\n if (hasRowErrors) {\n errors.rowsErrors = rowsErrors;\n\n const noCorrectAnswer = Object.values(rowsErrors).some((error) =>\n (error || '').includes('No correct response defined.'),\n );\n\n if (noCorrectAnswer) {\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\n if (!isEmpty(columnsErrors)) {\n errors.columnsErrors = columnsErrors;\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","prompt","essentials","allowFeedback","shuffled","disabled","view","role","teacherInstructions","rationale","assign","createCorrectResponseSession","r","getInnerText","html","replaceAll","getContent","replace","validate","config","headers","minQuestions","maxQuestions","maxLengthQuestionsHeading","maxAnswers","maxLengthAnswers","maxLengthFirstColumnHeading","rowsErrors","columnsErrors","errors","field","required","noOfRowsError","index","title","identicalAnswer","slice","some","hasCorrectResponse","columnsLengthError","headersContent","map","heading","shift","headerIndex","head","hasRowErrors","error","noCorrectAnswer","includes","correctResponseError","hasColumnErrors"],"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/pie-toolbox/feedback';\nimport { lockChoices, getShuffledChoices, partialScoring } from '@pie-lib/pie-toolbox/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: false,\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 { feedbackEnabled, promptEnabled, prompt, lockChoiceOrder, ...essentials } = normalizedQuestion;\n const out = {\n ...essentials,\n allowFeedback: feedbackEnabled,\n prompt: promptEnabled ? prompt : null,\n shuffled: !lockChoiceOrder,\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 }\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\n// remove all html tags\nconst getInnerText = (html) => (html || '').replaceAll(/<[^>]*>/g, '');\n\n// remove all html tags except img and iframe\nconst getContent = (html) => (html || '').replace(/(<(?!img|iframe)([^>]+)>)/gi, '');\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 ['teacherInstructions', 'prompt', 'rationale'].forEach((field) => {\n if (config[field]?.required && !getContent(model[field])) {\n errors[field] = 'This field is required.';\n }\n });\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 rowsErrors[id] = '';\n\n if (maxLengthQuestionsHeading && getInnerText(title).length > maxLengthQuestionsHeading) {\n rowsErrors[id] += `Content length should be maximum ${maxLengthQuestionsHeading} characters. `;\n }\n\n if (!getContent(title)) {\n rowsErrors[id] += 'Content should not be empty. ';\n } else {\n // check for identical content with the previous answers\n const identicalAnswer = rows.slice(0, index).some((r) => getContent(r.title) === getContent(title));\n\n if (identicalAnswer) {\n rowsErrors[id] += 'Content should be unique. ';\n }\n }\n\n const hasCorrectResponse = values.some((value) => !!value);\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] = `Content length should be maximum ${maxLengthFirstColumnHeading} characters.`;\n }\n\n const headersContent = (headers || []).map((heading) => getContent(heading));\n headersContent.shift(); // remove first column since it does not require validation\n\n headersContent.forEach((heading, index) => {\n const headerIndex = index + 1; // we need to add 1 because we removed first header from validation\n columnsErrors[headerIndex] = '';\n\n if (maxLengthAnswers && getInnerText(heading).length > maxLengthAnswers) {\n columnsErrors[headerIndex] += `Content length should be maximum ${maxLengthQuestionsHeading} characters. `;\n }\n\n if (!heading) {\n columnsErrors[headerIndex] += 'Content should not be empty.';\n } else {\n // check for identical content with the previous headers\n const identicalAnswer = headersContent.slice(0, index).some((head) => head === heading);\n\n if (identicalAnswer) {\n columnsErrors[index + 1] += 'Content should be unique.';\n }\n }\n });\n\n const hasRowErrors = Object.values(rowsErrors).some((error) => (error || '').length);\n\n if (hasRowErrors) {\n errors.rowsErrors = rowsErrors;\n\n const noCorrectAnswer = Object.values(rowsErrors).some((error) =>\n (error || '').includes('No correct response defined.'),\n );\n\n if (noCorrectAnswer) {\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\n const hasColumnErrors = Object.values(columnsErrors).some((error) => (error || '').length);\n\n if (hasColumnErrors) {\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": "6.3.0",
4
+ "version": "6.3.1",
5
5
  "description": "",
6
6
  "main": "lib/index.js",
7
7
  "module": "src/index.js",
package/package.json CHANGED
@@ -4,7 +4,7 @@
4
4
  "access": "public"
5
5
  },
6
6
  "repository": "pie-framework/pie-elements",
7
- "version": "7.4.1-next.0+0260e08e8",
7
+ "version": "7.4.2-next.5+96cce1e36",
8
8
  "main": "lib/index.js",
9
9
  "description": "",
10
10
  "scripts": {
@@ -23,6 +23,6 @@
23
23
  },
24
24
  "author": "",
25
25
  "license": "ISC",
26
- "gitHead": "0260e08e86e6b0683fd07acecbca0703c6dc54df",
26
+ "gitHead": "96cce1e3652d26891d49386372ddbff4e88f3409",
27
27
  "module": "src/index.js"
28
28
  }