@pie-element/match 4.10.9 → 4.10.10
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 +8 -0
- package/configure/CHANGELOG.md +8 -0
- package/configure/lib/answer-config-block.js +18 -2
- package/configure/lib/answer-config-block.js.map +1 -1
- package/configure/lib/general-config-block.js +43 -2
- package/configure/lib/general-config-block.js.map +1 -1
- package/configure/lib/row.js +13 -3
- package/configure/lib/row.js.map +1 -1
- package/configure/package.json +4 -4
- package/configure/utils.js +11 -0
- package/controller/CHANGELOG.md +8 -0
- package/controller/lib/index.js +34 -1
- package/controller/lib/index.js.map +1 -1
- package/controller/package.json +1 -1
- package/package.json +2 -2
package/CHANGELOG.md
CHANGED
|
@@ -3,6 +3,14 @@
|
|
|
3
3
|
All notable changes to this project will be documented in this file.
|
|
4
4
|
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
|
5
5
|
|
|
6
|
+
## [4.10.10](https://github.com/pie-framework/pie-elements/compare/@pie-element/match@4.10.9...@pie-element/match@4.10.10) (2022-05-16)
|
|
7
|
+
|
|
8
|
+
**Note:** Version bump only for package @pie-element/match
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
|
|
6
14
|
## [4.10.9](https://github.com/pie-framework/pie-elements/compare/@pie-element/match@4.10.8...@pie-element/match@4.10.9) (2022-05-09)
|
|
7
15
|
|
|
8
16
|
**Note:** Version bump only for package @pie-element/match
|
package/configure/CHANGELOG.md
CHANGED
|
@@ -3,6 +3,14 @@
|
|
|
3
3
|
All notable changes to this project will be documented in this file.
|
|
4
4
|
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
|
5
5
|
|
|
6
|
+
## [4.5.10](https://github.com/pie-framework/pie-elements/compare/@pie-element/match-configure@4.5.9...@pie-element/match-configure@4.5.10) (2022-05-16)
|
|
7
|
+
|
|
8
|
+
**Note:** Version bump only for package @pie-element/match-configure
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
|
|
6
14
|
## [4.5.9](https://github.com/pie-framework/pie-elements/compare/@pie-element/match-configure@4.5.8...@pie-element/match-configure@4.5.9) (2022-05-09)
|
|
7
15
|
|
|
8
16
|
**Note:** Version bump only for package @pie-element/match-configure
|
|
@@ -116,6 +116,11 @@ var styles = function styles(theme) {
|
|
|
116
116
|
'&> div': {
|
|
117
117
|
fontWeight: 'bold'
|
|
118
118
|
}
|
|
119
|
+
},
|
|
120
|
+
errorText: {
|
|
121
|
+
fontSize: '12px',
|
|
122
|
+
color: 'red',
|
|
123
|
+
paddingTop: '5px'
|
|
119
124
|
}
|
|
120
125
|
};
|
|
121
126
|
};
|
|
@@ -253,6 +258,14 @@ var AnswerConfigBlock = /*#__PURE__*/function (_React$Component) {
|
|
|
253
258
|
headers = _ref2$headers === void 0 ? {} : _ref2$headers;
|
|
254
259
|
|
|
255
260
|
var dialog = this.state.dialog;
|
|
261
|
+
|
|
262
|
+
var _ref3 = model || {},
|
|
263
|
+
errors = _ref3.errors;
|
|
264
|
+
|
|
265
|
+
var _ref4 = errors || {},
|
|
266
|
+
correctResponseError = _ref4.correctResponseError,
|
|
267
|
+
rowsErrors = _ref4.rowsErrors;
|
|
268
|
+
|
|
256
269
|
var filteredDefaultPlugins = (_editableHtml.DEFAULT_PLUGINS || []).filter(function (p) {
|
|
257
270
|
return p !== 'table' && p !== 'bulleted-list' && p !== 'numbered-list';
|
|
258
271
|
});
|
|
@@ -269,7 +282,9 @@ var AnswerConfigBlock = /*#__PURE__*/function (_React$Component) {
|
|
|
269
282
|
}, /*#__PURE__*/React.createElement(_Typography["default"], {
|
|
270
283
|
type: "body1",
|
|
271
284
|
component: "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", {
|
|
285
|
+
}, "Click on the labels to edit or remove. Set the correct answers by clicking each correct answer per row."), correctResponseError && /*#__PURE__*/React.createElement("div", {
|
|
286
|
+
className: classes.errorText
|
|
287
|
+
}, correctResponseError), /*#__PURE__*/React.createElement("div", {
|
|
273
288
|
className: classes.rowTable
|
|
274
289
|
}, /*#__PURE__*/React.createElement("div", {
|
|
275
290
|
className: classes.rowContainer
|
|
@@ -306,7 +321,8 @@ var AnswerConfigBlock = /*#__PURE__*/function (_React$Component) {
|
|
|
306
321
|
imageSupport: imageSupport,
|
|
307
322
|
enableImages: model.enableImages,
|
|
308
323
|
toolbarOpts: toolbarOpts,
|
|
309
|
-
spellCheck: spellCheck
|
|
324
|
+
spellCheck: spellCheck,
|
|
325
|
+
error: rowsErrors && rowsErrors[row.id]
|
|
310
326
|
});
|
|
311
327
|
}), /*#__PURE__*/React.createElement(_addRow["default"], {
|
|
312
328
|
onAddClick: onAddRow
|
|
@@ -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","AnswerConfigBlock","dialog","open","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","onOk","classes","onAddRow","imageSupport","configuration","toolbarOpts","spellCheck","state","filteredDefaultPlugins","DEFAULT_PLUGINS","p","labelPlugins","audio","disabled","video","settings","map","idx","onHeaderChange","row","onDeleteRow","moveRow","enableImages","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 { InfoDialog } from './common';\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: '12px',\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});\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 toolbarOpts: PropTypes.object\n };\n\n state = {\n dialog: {\n open: false\n }\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 = [\n ...remainingRows.slice(0, to),\n movedRow,\n ...remainingRows.slice(to)\n ];\n\n log('update: ', update);\n\n newModel.rows = update;\n\n onChange(newModel);\n };\n\n onChange = (name, isBoolean) => ({ 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({\n dialog: {\n open: true,\n onOk: () => {\n this.setState(\n {\n dialog: {\n open: false\n }\n }\n );\n }\n }\n });\n } else {\n newModel.headers[headerIndex] = value;\n\n onChange(newModel);\n }\n };\n\n render() {\n const {\n classes,\n model,\n onAddRow,\n imageSupport,\n configuration,\n toolbarOpts,\n spellCheck\n } = this.props;\n const { headers = {} } = configuration || {};\n const { dialog } = this.state;\n\n const filteredDefaultPlugins = (DEFAULT_PLUGINS || [])\n .filter(p => p !== 'table' && p !== 'bulleted-list' && p !== 'numbered-list');\n const labelPlugins = {\n audio: { disabled: true },\n video: { disabled: true }\n };\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\n clicking each correct answer per row.\n </Typography>\n <div className={classes.rowTable}>\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 allowValidation\n spellCheck={spellCheck}\n />\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 {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 />\n ))}\n <AddRow onAddClick={onAddRow} />\n </div>\n <InfoDialog\n title={'The column headings must be non-blank and unique.'}\n open={dialog.open}\n onOk={dialog.onOk}\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","color","paddingTop","AnswerConfigBlock","dialog","open","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","onOk","classes","onAddRow","imageSupport","configuration","toolbarOpts","spellCheck","state","errors","correctResponseError","rowsErrors","filteredDefaultPlugins","DEFAULT_PLUGINS","p","labelPlugins","audio","disabled","video","settings","map","idx","onHeaderChange","row","onDeleteRow","moveRow","enableImages","id","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 { InfoDialog } from './common';\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: '12px',\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: '12px',\n color: 'red',\n paddingTop: '5px'\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 toolbarOpts: PropTypes.object\n };\n\n state = {\n dialog: {\n open: false\n }\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 = [\n ...remainingRows.slice(0, to),\n movedRow,\n ...remainingRows.slice(to)\n ];\n\n log('update: ', update);\n\n newModel.rows = update;\n\n onChange(newModel);\n };\n\n onChange = (name, isBoolean) => ({ 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({\n dialog: {\n open: true,\n onOk: () => {\n this.setState(\n {\n dialog: {\n open: false\n }\n }\n );\n }\n }\n });\n } else {\n newModel.headers[headerIndex] = value;\n\n onChange(newModel);\n }\n };\n\n render() {\n const {\n classes,\n model,\n onAddRow,\n imageSupport,\n configuration,\n toolbarOpts,\n spellCheck\n } = this.props;\n const { headers = {} } = configuration || {};\n const { dialog } = this.state;\n const { errors } = model || {};\n const { correctResponseError, rowsErrors } = errors || {};\n\n const filteredDefaultPlugins = (DEFAULT_PLUGINS || [])\n .filter(p => p !== 'table' && p !== 'bulleted-list' && p !== 'numbered-list');\n const labelPlugins = {\n audio: { disabled: true },\n video: { disabled: true }\n };\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\n clicking each correct answer per row.\n </Typography>\n {correctResponseError && <div className={classes.errorText}>{correctResponseError}</div>}\n <div className={classes.rowTable}>\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 allowValidation\n spellCheck={spellCheck}\n />\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 {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 && rowsErrors[row.id]}\n />\n ))}\n <AddRow onAddClick={onAddRow} />\n </div>\n <InfoDialog\n title={'The column headings must be non-blank and unique.'}\n open={dialog.open}\n onOk={dialog.onOk}\n />\n </div>\n );\n }\n}\n\nexport default withStyles(styles)(AnswerConfigBlock);\n"],"file":"answer-config-block.js"}
|
|
@@ -35,6 +35,14 @@ var _MenuItem = _interopRequireDefault(require("@material-ui/core/MenuItem"));
|
|
|
35
35
|
|
|
36
36
|
var _styles = require("@material-ui/core/styles");
|
|
37
37
|
|
|
38
|
+
var _Typography = _interopRequireDefault(require("@material-ui/core/Typography"));
|
|
39
|
+
|
|
40
|
+
var _Info = _interopRequireDefault(require("@material-ui/icons/Info"));
|
|
41
|
+
|
|
42
|
+
var _Tooltip = _interopRequireDefault(require("@material-ui/core/Tooltip"));
|
|
43
|
+
|
|
44
|
+
var _utils = require("../utils");
|
|
45
|
+
|
|
38
46
|
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); }
|
|
39
47
|
|
|
40
48
|
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; }
|
|
@@ -58,6 +66,23 @@ var styles = function styles(theme) {
|
|
|
58
66
|
},
|
|
59
67
|
inputContainer: {
|
|
60
68
|
width: '90%'
|
|
69
|
+
},
|
|
70
|
+
flexContainer: {
|
|
71
|
+
display: 'flex',
|
|
72
|
+
alignItems: 'center',
|
|
73
|
+
marginTop: '10px'
|
|
74
|
+
},
|
|
75
|
+
titleText: {
|
|
76
|
+
fontFamily: 'Cerebri Sans',
|
|
77
|
+
fontSize: '18px',
|
|
78
|
+
lineHeight: '19px',
|
|
79
|
+
color: '#495B8F',
|
|
80
|
+
marginRight: '5px'
|
|
81
|
+
},
|
|
82
|
+
tooltip: {
|
|
83
|
+
fontSize: '12px',
|
|
84
|
+
whiteSpace: 'pre',
|
|
85
|
+
maxWidth: '500px'
|
|
61
86
|
}
|
|
62
87
|
};
|
|
63
88
|
};
|
|
@@ -118,7 +143,23 @@ var GeneralConfigBlock = /*#__PURE__*/function (_React$Component) {
|
|
|
118
143
|
_ref$choiceMode = _ref.choiceMode,
|
|
119
144
|
choiceMode = _ref$choiceMode === void 0 ? {} : _ref$choiceMode;
|
|
120
145
|
|
|
121
|
-
|
|
146
|
+
var validationMessage = (0, _utils.generateValidationMessage)(model);
|
|
147
|
+
return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("div", {
|
|
148
|
+
className: classes.flexContainer
|
|
149
|
+
}, /*#__PURE__*/React.createElement(_Typography["default"], {
|
|
150
|
+
className: classes.titleText
|
|
151
|
+
}, "Define questions"), /*#__PURE__*/React.createElement(_Tooltip["default"], {
|
|
152
|
+
classes: {
|
|
153
|
+
tooltip: classes.tooltip
|
|
154
|
+
},
|
|
155
|
+
disableFocusListener: true,
|
|
156
|
+
disableTouchListener: true,
|
|
157
|
+
placement: 'right',
|
|
158
|
+
title: validationMessage
|
|
159
|
+
}, /*#__PURE__*/React.createElement(_Info["default"], {
|
|
160
|
+
fontSize: 'small',
|
|
161
|
+
color: 'primary'
|
|
162
|
+
}))), /*#__PURE__*/React.createElement("div", {
|
|
122
163
|
className: classes.container
|
|
123
164
|
}, /*#__PURE__*/React.createElement("div", {
|
|
124
165
|
className: classes.input
|
|
@@ -147,7 +188,7 @@ var GeneralConfigBlock = /*#__PURE__*/function (_React$Component) {
|
|
|
147
188
|
value: "radio"
|
|
148
189
|
}, "Radio - One Answer"), /*#__PURE__*/React.createElement(_MenuItem["default"], {
|
|
149
190
|
value: "checkbox"
|
|
150
|
-
}, "Checkbox - Multiple Answers")))));
|
|
191
|
+
}, "Checkbox - Multiple Answers"))))));
|
|
151
192
|
}
|
|
152
193
|
}]);
|
|
153
194
|
return GeneralConfigBlock;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/general-config-block.jsx"],"names":["styles","theme","container","marginTop","spacing","unit","display","input","flex","inputContainer","width","GeneralConfigBlock","name","event","props","model","onResponseTypeChange","newModel","target","value","onLayoutChange","classes","configuration","layout","choiceMode","settings","label","e","v","onChangeColumns","select","onChangeResponseType","React","Component","PropTypes","object","isRequired","func"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AAAA;;AACA;;AACA;;AACA;;AACA;;AACA;;;;;;;;;;;;;;AAEA,IAAMA,MAAM,GAAG,SAATA,MAAS,CAAAC,KAAK;AAAA,SAAK;AACvBC,IAAAA,SAAS,EAAE;AACTC,MAAAA,SAAS,EAAEF,KAAK,CAACG,OAAN,CAAcC,IAAd,GAAqB,CADvB;AAETC,MAAAA,OAAO,EAAE;AAFA,KADY;AAKvBC,IAAAA,KAAK,EAAE;AACLC,MAAAA,IAAI,EAAE;AADD,KALgB;AAQvBC,IAAAA,cAAc,EAAE;AACdC,MAAAA,KAAK,EAAE;AADO;
|
|
1
|
+
{"version":3,"sources":["../src/general-config-block.jsx"],"names":["styles","theme","container","marginTop","spacing","unit","display","input","flex","inputContainer","width","flexContainer","alignItems","titleText","fontFamily","fontSize","lineHeight","color","marginRight","tooltip","whiteSpace","maxWidth","GeneralConfigBlock","name","event","props","model","onResponseTypeChange","newModel","target","value","onLayoutChange","classes","configuration","layout","choiceMode","validationMessage","settings","label","e","v","onChangeColumns","select","onChangeResponseType","React","Component","PropTypes","object","isRequired","func"],"mappings":"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","sourcesContent":["import * as React from 'react';\nimport { InputContainer, NumberTextField } from '@pie-lib/config-ui';\nimport PropTypes from 'prop-types';\nimport Select from '@material-ui/core/Select';\nimport MenuItem from '@material-ui/core/MenuItem';\nimport { withStyles } from '@material-ui/core/styles';\nimport Typography from '@material-ui/core/Typography';\nimport Info from '@material-ui/icons/Info';\nimport Tooltip from '@material-ui/core/Tooltip';\n\nimport { generateValidationMessage } from '../utils';\n\nconst styles = theme => ({\n container: {\n marginTop: theme.spacing.unit * 2,\n display: 'flex',\n },\n input: {\n flex: 1\n },\n inputContainer: {\n width: '90%'\n },\n flexContainer: {\n display: 'flex',\n alignItems: 'center',\n marginTop: '10px'\n },\n titleText: {\n fontFamily: 'Cerebri Sans',\n fontSize: '18px',\n lineHeight: '19px',\n color: '#495B8F',\n marginRight: '5px',\n },\n tooltip: {\n fontSize: '12px',\n whiteSpace: 'pre',\n maxWidth: '500px'\n }\n});\n\nclass GeneralConfigBlock extends React.Component {\n static propTypes = {\n classes: PropTypes.object.isRequired,\n model: PropTypes.object.isRequired,\n configuration: PropTypes.object.isRequired,\n onResponseTypeChange: PropTypes.func.isRequired,\n onLayoutChange: PropTypes.func.isRequired\n };\n\n onChangeResponseType = (name) => event => {\n const { model, onResponseTypeChange } = this.props;\n const newModel = { ...model };\n\n newModel[name] = event.target.value;\n\n onResponseTypeChange(newModel[name]);\n };\n\n onChangeColumns = (name, value) => {\n const { model, onLayoutChange } = this.props;\n const newModel = { ...model };\n\n newModel[name] = value;\n\n onLayoutChange(newModel[name]);\n };\n\n render() {\n const { classes, model, configuration } = this.props;\n const {\n layout = {},\n choiceMode = {}\n } = configuration || {};\n\n const validationMessage = generateValidationMessage(model);\n\n return (\n <>\n <div className={classes.flexContainer}>\n <Typography className={classes.titleText}>Define questions</Typography>\n <Tooltip\n classes={{tooltip: classes.tooltip}}\n disableFocusListener\n disableTouchListener\n placement={'right'}\n title={validationMessage}\n >\n <Info fontSize={'small'} color={'primary'}/>\n </Tooltip>\n </div>\n <div className={classes.container}>\n <div className={classes.input}>\n {layout.settings &&\n <InputContainer\n label={layout.label}\n className={classes.inputContainer}\n >\n <NumberTextField\n type=\"number\"\n min={3}\n max={10}\n value={model.layout}\n onChange={(e, v) => this.onChangeColumns('layout', v)}\n suffix={'Columns'}\n />\n </InputContainer>\n }\n </div>\n <div className={classes.input}>\n {\n choiceMode.settings &&\n <InputContainer label={choiceMode.label} className={classes.inputContainer}>\n <Select\n className={classes.select}\n onChange={this.onChangeResponseType('choiceMode')}\n value={model.choiceMode}\n >\n <MenuItem value=\"radio\">Radio - One Answer</MenuItem>\n <MenuItem value=\"checkbox\">Checkbox - Multiple Answers</MenuItem>\n </Select>\n </InputContainer>\n }\n </div>\n </div>\n </>\n );\n }\n}\n\nexport default withStyles(styles)(GeneralConfigBlock);\n"],"file":"general-config-block.js"}
|
package/configure/lib/row.js
CHANGED
|
@@ -196,7 +196,8 @@ var Row = /*#__PURE__*/function (_React$Component) {
|
|
|
196
196
|
idx = _this$props4.idx,
|
|
197
197
|
enableImages = _this$props4.enableImages,
|
|
198
198
|
toolbarOpts = _this$props4.toolbarOpts,
|
|
199
|
-
spellCheck = _this$props4.spellCheck
|
|
199
|
+
spellCheck = _this$props4.spellCheck,
|
|
200
|
+
error = _this$props4.error;
|
|
200
201
|
var dialog = this.state.dialog;
|
|
201
202
|
var opacity = isDragging ? 0 : 1;
|
|
202
203
|
var rowPlugins = {
|
|
@@ -259,7 +260,9 @@ var Row = /*#__PURE__*/function (_React$Component) {
|
|
|
259
260
|
onClick: this.onDeleteRow(idx)
|
|
260
261
|
}, /*#__PURE__*/_react["default"].createElement(_Delete["default"], {
|
|
261
262
|
className: classes.deleteIcon
|
|
262
|
-
})))), /*#__PURE__*/_react["default"].createElement("
|
|
263
|
+
})))), error && /*#__PURE__*/_react["default"].createElement("div", {
|
|
264
|
+
className: classes.errorText
|
|
265
|
+
}, error), /*#__PURE__*/_react["default"].createElement("hr", {
|
|
263
266
|
className: classes.separator
|
|
264
267
|
}), /*#__PURE__*/_react["default"].createElement(_common.InfoDialog, {
|
|
265
268
|
title: dialog.message,
|
|
@@ -290,7 +293,8 @@ exports.Row = Row;
|
|
|
290
293
|
"delete": _propTypes["default"].func.isRequired
|
|
291
294
|
}),
|
|
292
295
|
enableImages: _propTypes["default"].bool,
|
|
293
|
-
toolbarOpts: _propTypes["default"].object
|
|
296
|
+
toolbarOpts: _propTypes["default"].object,
|
|
297
|
+
error: _propTypes["default"].string
|
|
294
298
|
});
|
|
295
299
|
(0, _defineProperty2["default"])(Row, "defaultProps", {});
|
|
296
300
|
|
|
@@ -343,6 +347,12 @@ var styles = function styles(theme) {
|
|
|
343
347
|
border: 0,
|
|
344
348
|
borderTop: '2px solid lightgray',
|
|
345
349
|
width: '100%'
|
|
350
|
+
},
|
|
351
|
+
errorText: {
|
|
352
|
+
fontSize: '12px',
|
|
353
|
+
color: 'red',
|
|
354
|
+
paddingTop: '10px',
|
|
355
|
+
textAlign: 'center'
|
|
346
356
|
}
|
|
347
357
|
};
|
|
348
358
|
};
|
package/configure/lib/row.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/row.jsx"],"names":["log","canDrag","Row","dialog","open","message","rowIndex","value","props","model","onChange","newModel","rows","currentRow","title","sameValue","filter","row","wasChanged","sameValueEntered","empty","length","setState","onOk","rowValueIndex","event","choiceMode","i","values","target","checked","idx","onDeleteRow","document","addEventListener","onMouseUpOnHandle","classes","imageSupport","connectDragSource","connectDropTarget","isDragging","enableImages","toolbarOpts","spellCheck","state","opacity","rowPlugins","image","disabled","audio","video","filteredDefaultPlugins","DEFAULT_PLUGINS","p","content","dragHandle","onMouseDownOnHandle","rowContainer","rowItem","questionText","onRowTitleChange","editor","map","rowValue","rowIdx","onRowValueChange","deleteIcon","separator","React","Component","PropTypes","object","isRequired","number","bool","func","onMoveRow","shape","add","styles","theme","actions","padding","justifyContent","choice","spacing","unit","overflow","cursor","dragDisabled","container","marginTop","display","flexDirection","alignItems","flex","width","minWidth","border","borderTop","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 { 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';\nimport { InfoDialog } from './common';\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 enableImages: PropTypes.bool,\n toolbarOpts: PropTypes.object\n };\n\n static defaultProps = {};\n\n state = {\n dialog: {\n open: false,\n message: ''\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 message: 'The question row headings must be non-blank and unique.',\n onOk: () => {\n this.setState(\n {\n dialog: {\n open: false,\n }\n }\n );\n }\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 message: 'There has to be at least one question row.',\n onOk: () => {\n this.setState(\n {\n dialog: {\n open: false,\n }\n }\n );\n }\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 } = 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 || [])\n .filter(p => p !== 'bulleted-list' && p !== 'numbered-list');\n\n const content = (\n <div style={{\n opacity: opacity\n }}>\n <span\n itemID={'handle'}\n className={classes.dragHandle}\n onMouseDown={this.onMouseDownOnHandle}\n >\n <DragHandle color={'primary'} />\n </span>\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 allowValidation\n activePlugins={filteredDefaultPlugins}\n spellCheck={spellCheck}\n />\n </div>\n {row.values.map((rowValue, rowIdx) => (\n <div key={rowIdx} className={classes.rowItem}>\n {model.choiceMode === 'radio' ? (\n <Radio\n onChange={this.onRowValueChange(idx, rowIdx)}\n checked={rowValue === true}\n />\n ) : (\n <Checkbox\n onChange={this.onRowValueChange(idx, rowIdx)}\n checked={rowValue === true}\n label={''}\n />\n )}\n </div>\n ))}\n <div className={classes.deleteIcon}>\n <Button onClick={this.onDeleteRow(idx)}>\n <Delete className={classes.deleteIcon} />\n </Button>\n </div>\n </div>\n <hr className={classes.separator} />\n <InfoDialog\n title={dialog.message}\n open={dialog.open}\n onOk={dialog.onOk}\n />\n </div>\n );\n\n return connectDragSource(connectDropTarget(content));\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 '&> div': {\n width: '100%'\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 },\n separator: {\n marginTop: theme.spacing.unit * 2,\n border: 0,\n borderTop: '2px solid lightgray',\n width: '100%'\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 log('[drop] item: ', item, 'didDrop?', monitor.didDrop());\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","message","rowIndex","value","props","model","onChange","newModel","rows","currentRow","title","sameValue","filter","row","wasChanged","sameValueEntered","empty","length","setState","onOk","rowValueIndex","event","choiceMode","i","values","target","checked","idx","onDeleteRow","document","addEventListener","onMouseUpOnHandle","classes","imageSupport","connectDragSource","connectDropTarget","isDragging","enableImages","toolbarOpts","spellCheck","error","state","opacity","rowPlugins","image","disabled","audio","video","filteredDefaultPlugins","DEFAULT_PLUGINS","p","content","dragHandle","onMouseDownOnHandle","rowContainer","rowItem","questionText","onRowTitleChange","editor","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","width","minWidth","border","borderTop","fontSize","color","paddingTop","textAlign","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 { 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';\nimport { InfoDialog } from './common';\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 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 message: ''\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 message: 'The question row headings must be non-blank and unique.',\n onOk: () => {\n this.setState(\n {\n dialog: {\n open: false,\n }\n }\n );\n }\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 message: 'There has to be at least one question row.',\n onOk: () => {\n this.setState(\n {\n dialog: {\n open: false,\n }\n }\n );\n }\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 } = 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 || [])\n .filter(p => p !== 'bulleted-list' && p !== 'numbered-list');\n\n const content = (\n <div style={{\n opacity: opacity\n }}>\n <span\n itemID={'handle'}\n className={classes.dragHandle}\n onMouseDown={this.onMouseDownOnHandle}\n >\n <DragHandle color={'primary'} />\n </span>\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 allowValidation\n activePlugins={filteredDefaultPlugins}\n spellCheck={spellCheck}\n />\n </div>\n {row.values.map((rowValue, rowIdx) => (\n <div key={rowIdx} className={classes.rowItem}>\n {model.choiceMode === 'radio' ? (\n <Radio\n onChange={this.onRowValueChange(idx, rowIdx)}\n checked={rowValue === true}\n />\n ) : (\n <Checkbox\n onChange={this.onRowValueChange(idx, rowIdx)}\n checked={rowValue === true}\n label={''}\n />\n )}\n </div>\n ))}\n <div className={classes.deleteIcon}>\n <Button onClick={this.onDeleteRow(idx)}>\n <Delete className={classes.deleteIcon} />\n </Button>\n </div>\n </div>\n {error && <div className={classes.errorText}>{error}</div>}\n <hr className={classes.separator} />\n <InfoDialog\n title={dialog.message}\n open={dialog.open}\n onOk={dialog.onOk}\n />\n </div>\n );\n\n return connectDragSource(connectDropTarget(content));\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 '&> div': {\n width: '100%'\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 },\n separator: {\n marginTop: theme.spacing.unit * 2,\n border: 0,\n borderTop: '2px solid lightgray',\n width: '100%'\n },\n errorText: {\n fontSize: '12px',\n color: 'red',\n paddingTop: '10px',\n textAlign: 'center'\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 log('[drop] item: ', item, 'didDrop?', monitor.didDrop());\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"}
|
package/configure/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@pie-element/match-configure",
|
|
3
3
|
"private": true,
|
|
4
|
-
"version": "4.5.
|
|
4
|
+
"version": "4.5.10",
|
|
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.2.0",
|
|
13
|
-
"@pie-lib/config-ui": "^10.
|
|
13
|
+
"@pie-lib/config-ui": "^10.13.0",
|
|
14
14
|
"@pie-lib/drag": "^1.1.52",
|
|
15
|
-
"@pie-lib/editable-html": "^7.22.
|
|
16
|
-
"@pie-lib/scoring-config": "^3.5.
|
|
15
|
+
"@pie-lib/editable-html": "^7.22.3",
|
|
16
|
+
"@pie-lib/scoring-config": "^3.5.160",
|
|
17
17
|
"classnames": "^2.2.5",
|
|
18
18
|
"debug": "^3.1.0",
|
|
19
19
|
"prop-types": "^15.6.2",
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export const generateValidationMessage = model => {
|
|
2
|
+
const { choiceMode } = model;
|
|
3
|
+
|
|
4
|
+
const baselineValidationMessage = '\nThere should be at least 1 question row.' +
|
|
5
|
+
'\nRow and column headings should be non-blank and unique.';
|
|
6
|
+
const correctResponseMessage = choiceMode === 'radio'
|
|
7
|
+
? '\nThere should be a correct response defined for every row.'
|
|
8
|
+
: '\nThere should be at least one correct response defined for every row.';
|
|
9
|
+
|
|
10
|
+
return 'Validation requirements:' + baselineValidationMessage + correctResponseMessage;
|
|
11
|
+
};
|
package/controller/CHANGELOG.md
CHANGED
|
@@ -3,6 +3,14 @@
|
|
|
3
3
|
All notable changes to this project will be documented in this file.
|
|
4
4
|
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
|
5
5
|
|
|
6
|
+
## [4.4.8](https://github.com/pie-framework/pie-elements/compare/@pie-element/match-controller@4.4.7...@pie-element/match-controller@4.4.8) (2022-05-16)
|
|
7
|
+
|
|
8
|
+
**Note:** Version bump only for package @pie-element/match-controller
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
|
|
6
14
|
## [4.4.4](https://github.com/pie-framework/pie-elements/compare/@pie-element/match-controller@4.4.2...@pie-element/match-controller@4.4.4) (2021-11-11)
|
|
7
15
|
|
|
8
16
|
**Note:** Version bump only for package @pie-element/match-controller
|
package/controller/lib/index.js
CHANGED
|
@@ -8,7 +8,7 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
8
8
|
exports.createCorrectResponseSession = void 0;
|
|
9
9
|
exports.createDefaultModel = createDefaultModel;
|
|
10
10
|
exports.model = model;
|
|
11
|
-
exports.outcome = exports.normalize = void 0;
|
|
11
|
+
exports.validate = exports.outcome = exports.normalize = void 0;
|
|
12
12
|
|
|
13
13
|
var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
|
|
14
14
|
|
|
@@ -319,4 +319,37 @@ var createCorrectResponseSession = function createCorrectResponseSession(questio
|
|
|
319
319
|
};
|
|
320
320
|
|
|
321
321
|
exports.createCorrectResponseSession = createCorrectResponseSession;
|
|
322
|
+
|
|
323
|
+
var validate = function validate() {
|
|
324
|
+
var model = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
|
|
325
|
+
var config = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
|
|
326
|
+
var rows = model.rows,
|
|
327
|
+
choiceMode = model.choiceMode;
|
|
328
|
+
var rowsErrors = {};
|
|
329
|
+
(rows || []).forEach(function (row) {
|
|
330
|
+
var id = row.id,
|
|
331
|
+
_row$values = row.values,
|
|
332
|
+
values = _row$values === void 0 ? [] : _row$values;
|
|
333
|
+
var hasCorrectResponse = false;
|
|
334
|
+
values.forEach(function (value) {
|
|
335
|
+
if (value) {
|
|
336
|
+
hasCorrectResponse = true;
|
|
337
|
+
}
|
|
338
|
+
});
|
|
339
|
+
|
|
340
|
+
if (!hasCorrectResponse) {
|
|
341
|
+
rowsErrors[id] = 'No correct response defined.';
|
|
342
|
+
}
|
|
343
|
+
});
|
|
344
|
+
var errors = {};
|
|
345
|
+
|
|
346
|
+
if (!(0, _isEmpty["default"])(rowsErrors)) {
|
|
347
|
+
errors.rowsErrors = rowsErrors;
|
|
348
|
+
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.';
|
|
349
|
+
}
|
|
350
|
+
|
|
351
|
+
return errors;
|
|
352
|
+
};
|
|
353
|
+
|
|
354
|
+
exports.validate = validate;
|
|
322
355
|
//# sourceMappingURL=index.js.map
|
|
@@ -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","getCheckboxes","getCorrectRadios","getCorrectness","question","mode","incorrectAnswers","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"],"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 const correctAnswers = checkboxMode\n ? getCheckboxes(rows, answers).correctAnswers\n : getCorrectRadios(rows, answers);\n\n if (totalCorrectAnswers === correctAnswers) {\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) *\n 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(\n normalizedQuestion.rows,\n session,\n updateSession,\n 'id'\n );\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 (\n env.role === 'instructor' &&\n (env.mode === 'view' || env.mode === 'evaluate')\n ) {\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"],"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","getCheckboxes","getCorrectRadios","getCorrectness","question","mode","incorrectAnswers","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 const correctAnswers = checkboxMode\n ? getCheckboxes(rows, answers).correctAnswers\n : getCorrectRadios(rows, answers);\n\n if (totalCorrectAnswers === correctAnswers) {\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) *\n 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(\n normalizedQuestion.rows,\n session,\n updateSession,\n 'id'\n );\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 (\n env.role === 'instructor' &&\n (env.mode === 'view' || env.mode === 'evaluate')\n ) {\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 = 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"}
|
package/controller/package.json
CHANGED
package/package.json
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
"access": "public"
|
|
5
5
|
},
|
|
6
6
|
"repository": "pie-framework/pie-elements",
|
|
7
|
-
"version": "4.10.
|
|
7
|
+
"version": "4.10.10",
|
|
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": "
|
|
29
|
+
"gitHead": "8ea971e13e74d785cd35a04fd9fe1abe1fa2dabf",
|
|
30
30
|
"module": "src/index.js"
|
|
31
31
|
}
|