@pie-element/categorize 6.5.19-next.85 → 6.6.1-beta.587
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 +549 -0
- package/configure/CHANGELOG.md +485 -0
- package/configure/lib/defaults.js +56 -5
- package/configure/lib/defaults.js.map +1 -1
- package/configure/lib/design/builder.js +8 -5
- package/configure/lib/design/builder.js.map +1 -1
- package/configure/lib/design/buttons.js +6 -4
- package/configure/lib/design/buttons.js.map +1 -1
- package/configure/lib/design/categories/RowLabel.js +68 -0
- package/configure/lib/design/categories/RowLabel.js.map +1 -0
- package/configure/lib/design/categories/alternateResponses.js +122 -18
- package/configure/lib/design/categories/alternateResponses.js.map +1 -1
- package/configure/lib/design/categories/category.js +53 -6
- package/configure/lib/design/categories/category.js.map +1 -1
- package/configure/lib/design/categories/choice-preview.js +19 -6
- package/configure/lib/design/categories/choice-preview.js.map +1 -1
- package/configure/lib/design/categories/droppable-placeholder.js +25 -5
- package/configure/lib/design/categories/droppable-placeholder.js.map +1 -1
- package/configure/lib/design/categories/index.js +172 -82
- package/configure/lib/design/categories/index.js.map +1 -1
- package/configure/lib/design/choices/choice.js +83 -13
- package/configure/lib/design/choices/choice.js.map +1 -1
- package/configure/lib/design/choices/config.js +10 -136
- package/configure/lib/design/choices/config.js.map +1 -1
- package/configure/lib/design/choices/index.js +89 -13
- package/configure/lib/design/choices/index.js.map +1 -1
- package/configure/lib/design/header.js +18 -6
- package/configure/lib/design/header.js.map +1 -1
- package/configure/lib/design/index.js +165 -50
- package/configure/lib/design/index.js.map +1 -1
- package/configure/lib/design/input-header.js +69 -11
- package/configure/lib/design/input-header.js.map +1 -1
- package/configure/lib/index.js +18 -4
- package/configure/lib/index.js.map +1 -1
- package/configure/lib/main.js +4 -2
- package/configure/lib/main.js.map +1 -1
- package/configure/lib/utils.js +27 -0
- package/configure/lib/utils.js.map +1 -0
- package/configure/package.json +9 -9
- package/controller/CHANGELOG.md +128 -0
- package/controller/lib/defaults.js +20 -1
- package/controller/lib/defaults.js.map +1 -1
- package/controller/lib/index.js +173 -30
- package/controller/lib/index.js.map +1 -1
- package/controller/lib/utils.js +60 -0
- package/controller/lib/utils.js.map +1 -0
- package/controller/package.json +4 -4
- package/docs/config-schema.json +181 -0
- package/docs/config-schema.json.md +141 -1
- package/docs/demo/config.js +2 -2
- package/docs/demo/generate.js +5 -8
- package/docs/demo/index.html +1 -1
- package/docs/pie-schema.json +63 -11
- package/docs/pie-schema.json.md +51 -11
- package/lib/categorize/categories.js +30 -24
- package/lib/categorize/categories.js.map +1 -1
- package/lib/categorize/category.js +15 -12
- package/lib/categorize/category.js.map +1 -1
- package/lib/categorize/choice.js +19 -12
- package/lib/categorize/choice.js.map +1 -1
- package/lib/categorize/choices.js +35 -16
- package/lib/categorize/choices.js.map +1 -1
- package/lib/categorize/droppable-placeholder.js +6 -4
- package/lib/categorize/droppable-placeholder.js.map +1 -1
- package/lib/categorize/grid-content.js +3 -3
- package/lib/categorize/grid-content.js.map +1 -1
- package/lib/categorize/index.js +71 -37
- package/lib/categorize/index.js.map +1 -1
- package/lib/index.js +4 -1
- package/lib/index.js.map +1 -1
- package/package.json +9 -8
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/design/categories/index.jsx"],"names":["styles","theme","categories","marginBottom","spacing","unit","categoriesHolder","display","gridRowGap","gridColumnGap","row","gridTemplateColumns","alignItems","width","marginTop","rowLabel","gridColumn","rowLabelHolder","RowLabel","categoriesPerRow","classes","markup","imageSupport","onChange","text","Categories","event","numberValue","parseInt","target","value","props","onModelChanged","model","id","utils","firstAvailableIndex","map","a","data","label","addRowLabel","length","rowLabels","push","concat","category","index","findIndex","splice","correctResponse","c","choice","categoryId","undefined","choiceIndex","val","newRowLabels","className","holderStyle","lastRowLabelIndex","add","min","max","changeCategoryColumns","hasRowLabel","rowIndex","changeRowLabel","change","addChoiceToCategory","deleteChoiceFromCategory","React","Component","PropTypes","shape","func","isRequired","object","string","array"],"mappings":"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","sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\nimport { withStyles } from '@material-ui/core/styles';\nimport TextField from '@material-ui/core/TextField';\nimport Typography from '@material-ui/core/Typography';\nimport { choiceUtils as utils } from '@pie-lib/config-ui';\nimport EditableHtml from '@pie-lib/editable-html';\nimport classNames from 'classnames';\nimport Category from './category';\nimport Header from '../header';\nimport { moveChoiceToCategory, removeCategory, removeChoiceFromCategory } from '@pie-lib/categorize';\n\nconst styles = theme => ({\n categories: {\n marginBottom: theme.spacing.unit\n },\n categoriesHolder: {\n display: 'grid',\n gridRowGap: `${theme.spacing.unit}px`,\n gridColumnGap: `${theme.spacing.unit}px`\n },\n row: {\n display: 'grid',\n gridTemplateColumns: 'repeat(2, 1fr)',\n gridColumnGap: `${theme.spacing.unit}px`,\n alignItems: 'baseline',\n width: '100%',\n marginTop: theme.spacing.unit,\n marginBottom: 2 * theme.spacing.unit\n },\n rowLabel: {\n gridColumn: '1/3'\n },\n rowLabelHolder: {\n width: '100%'\n }\n});\n\nconst RowLabel = withStyles(styles)(({ categoriesPerRow, classes, markup, imageSupport, onChange }) => {\n return (\n <div\n style={{\n gridColumn: `1/${categoriesPerRow + 1}`,\n width: '100%'\n }}\n >\n <Typography className={classes.text}>\n Row Label\n </Typography>\n <EditableHtml\n className={classes.rowLabelHolder}\n markup={markup}\n onChange={onChange}\n imageSupport={imageSupport}\n nonEmpty={false}\n />\n </div>\n );\n});\n\nexport class Categories extends React.Component {\n static propTypes = {\n imageSupport: PropTypes.shape({\n add: PropTypes.func.isRequired,\n delete: PropTypes.func.isRequired\n }),\n classes: PropTypes.object.isRequired,\n className: PropTypes.string,\n categories: PropTypes.array,\n onModelChanged: PropTypes.func,\n model: PropTypes.object.isRequired\n };\n\n changeCategoryColumns = event => {\n const numberValue = parseInt(event.target.value, 10);\n\n if (numberValue && numberValue >= 1 && numberValue <= 4) {\n this.props.onModelChanged({ categoriesPerRow: numberValue });\n }\n };\n\n add = () => {\n const { model } = this.props;\n const { categoriesPerRow } = model;\n const id = utils.firstAvailableIndex(model.categories.map(a => a.id), 0);\n const data = { id, label: 'Category ' + id };\n const addRowLabel = (model.categories.length) % categoriesPerRow === 0;\n const rowLabels = [...model.rowLabels];\n\n if (addRowLabel) {\n rowLabels.push('');\n }\n\n this.props.onModelChanged({\n rowLabels,\n categories: model.categories.concat([data])\n });\n };\n\n delete = category => {\n const { model, onModelChanged } = this.props;\n const index = model.categories.findIndex(a => a.id === category.id);\n\n if (index !== -1) {\n model.categories.splice(index, 1);\n model.correctResponse = removeCategory(\n category.id,\n model.correctResponse\n );\n onModelChanged(model);\n }\n };\n\n change = c => {\n const { categories } = this.props;\n const index = categories.findIndex(a => a.id === c.id);\n\n if (index !== -1) {\n categories.splice(index, 1, c);\n this.props.onModelChanged({ categories });\n }\n };\n\n addChoiceToCategory = (choice, categoryId) => {\n const { model, onModelChanged } = this.props;\n const correctResponse = moveChoiceToCategory(\n choice.id,\n undefined,\n categoryId,\n 0,\n model.correctResponse\n );\n\n onModelChanged({ correctResponse });\n };\n\n deleteChoiceFromCategory = (category, choice, choiceIndex) => {\n const { model, onModelChanged } = this.props;\n const correctResponse = removeChoiceFromCategory(\n choice.id,\n category.id,\n choiceIndex,\n model.correctResponse\n );\n\n onModelChanged({ correctResponse });\n };\n\n changeRowLabel = (val, index) => {\n const { model } = this.props;\n const { rowLabels } = model;\n const newRowLabels = [...rowLabels];\n\n if (newRowLabels.length < index) {\n newRowLabels.push(val);\n } else {\n newRowLabels[index] = val;\n }\n\n this.props.onModelChanged({\n rowLabels: newRowLabels\n });\n };\n\n render() {\n const {\n model,\n classes,\n className,\n categories,\n imageSupport\n } = this.props;\n const { categoriesPerRow, rowLabels } = model;\n\n const holderStyle = {\n gridTemplateColumns: `repeat(${categoriesPerRow}, 1fr)`\n };\n const lastRowLabelIndex = parseInt((categories.length - 1) / categoriesPerRow);\n\n return (\n <div className={classNames(classes.categories, className)}>\n <Header label=\"Categories\" buttonLabel=\"ADD A CATEGORY\" onAdd={this.add} />\n <div className={classes.row}>\n <TextField\n label=\"Categories per row\"\n type=\"number\"\n inputProps={{\n min: 1,\n max: 4\n }}\n value={categoriesPerRow}\n onChange={this.changeCategoryColumns}\n />\n </div>\n <div className={classes.categoriesHolder} style={holderStyle}>\n {categories.map((category, index) => {\n const hasRowLabel = index > 1 && index % categoriesPerRow === 0;\n const rowIndex = parseInt(index / (categoriesPerRow + 1));\n\n return (\n <React.Fragment\n key={index}\n >\n {\n hasRowLabel && (\n <RowLabel\n categoriesPerRow={categoriesPerRow}\n rowIndex={rowIndex}\n markup={rowLabels[rowIndex] || ''}\n onChange={(val) => this.changeRowLabel(val, rowIndex)}\n imageSupport={imageSupport}\n />\n )\n }\n <Category\n imageSupport={imageSupport}\n category={category}\n onChange={this.change}\n onDelete={() => this.delete(category)}\n onAddChoice={this.addChoiceToCategory}\n onDeleteChoice={(choice, choiceIndex) =>\n this.deleteChoiceFromCategory(category, choice, choiceIndex)\n }\n />\n </React.Fragment>\n );\n })}\n <RowLabel\n categoriesPerRow={categoriesPerRow}\n rowIndex={lastRowLabelIndex}\n markup={rowLabels[lastRowLabelIndex] || ''}\n onChange={(val) => this.changeRowLabel(val, lastRowLabelIndex)}\n imageSupport={imageSupport}\n />\n </div>\n </div>\n );\n }\n}\n\nexport default withStyles(styles)(Categories);\n"],"file":"index.js"}
|
|
1
|
+
{"version":3,"sources":["../../../src/design/categories/index.jsx"],"names":["styles","theme","categories","marginBottom","spacing","unit","categoriesHolder","display","gridRowGap","gridColumnGap","row","gridTemplateColumns","alignItems","width","marginTop","rowLabel","gridColumn","rowLabelHolder","tooltip","fontSize","whiteSpace","maxWidth","errorText","color","padding","Categories","focusedEl","props","model","oldCategories","categoriesPerRow","id","utils","firstAvailableIndex","map","a","data","label","addRowLabel","length","rowLabels","push","setState","onModelChanged","concat","category","index","findIndex","splice","correctResponse","c","addedChoice","categoryId","choices","choice","find","undefined","categoryCount","choiceIndex","choiceId","from","to","val","newRowLabels","classes","className","imageSupport","uploadSoundSupport","toolbarOpts","spellCheck","configuration","defaultImageMaxHeight","defaultImageMaxWidth","errors","associationError","categoriesError","categoriesErrors","maxCategories","maxImageWidth","maxImageHeight","holderStyle","validationMessage","add","marginLeft","hasRowLabel","rowIndex","changeRowLabel","state","deleteFocusedEl","change","addChoiceToCategory","moveChoice","deleteChoiceFromCategory","categoryLabel","React","Component","PropTypes","shape","func","isRequired","object","string","array"],"mappings":"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","sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\nimport { withStyles } from '@material-ui/core/styles';\nimport TextField from '@material-ui/core/TextField';\nimport Typography from '@material-ui/core/Typography';\nimport { choiceUtils as utils } from '@pie-lib/config-ui';\nimport EditableHtml from '@pie-lib/editable-html';\nimport classNames from 'classnames';\nimport Info from '@material-ui/icons/Info';\nimport Tooltip from '@material-ui/core/Tooltip';\nimport {\n moveChoiceToAlternate,\n moveChoiceToCategory,\n removeCategory,\n removeChoiceFromCategory,\n verifyAllowMultiplePlacements,\n} from '@pie-lib/categorize';\n\nimport Category from './category';\nimport Header from '../header';\nimport { generateValidationMessage } from '../../utils';\nimport { RowLabel } from './RowLabel';\n\nconst styles = (theme) => ({\n categories: {\n marginBottom: theme.spacing.unit,\n },\n categoriesHolder: {\n display: 'grid',\n gridRowGap: `${theme.spacing.unit}px`,\n gridColumnGap: `${theme.spacing.unit}px`,\n },\n row: {\n display: 'grid',\n gridTemplateColumns: 'repeat(2, 1fr)',\n gridColumnGap: `${theme.spacing.unit}px`,\n alignItems: 'baseline',\n width: '100%',\n marginTop: theme.spacing.unit,\n marginBottom: 2 * theme.spacing.unit,\n },\n rowLabel: {\n gridColumn: '1/3',\n },\n rowLabelHolder: {\n width: '100%',\n },\n tooltip: {\n fontSize: '12px',\n whiteSpace: 'pre',\n maxWidth: '500px',\n },\n errorText: {\n fontSize: '12px',\n color: 'red',\n padding: '5px 0',\n },\n});\n\nexport class Categories extends React.Component {\n static propTypes = {\n imageSupport: PropTypes.shape({\n add: PropTypes.func.isRequired,\n delete: PropTypes.func.isRequired,\n }),\n uploadSoundSupport: PropTypes.shape({\n add: PropTypes.func.isRequired,\n delete: PropTypes.func.isRequired,\n }),\n classes: PropTypes.object.isRequired,\n className: PropTypes.string,\n categories: PropTypes.array,\n onModelChanged: PropTypes.func,\n model: PropTypes.object.isRequired,\n configuration: PropTypes.object.isRequired,\n toolbarOpts: PropTypes.object,\n };\n\n state = {\n focusedEl: null,\n };\n\n add = () => {\n const { model, categories: oldCategories } = this.props;\n const { categoriesPerRow } = model;\n const id = utils.firstAvailableIndex(\n model.categories.map((a) => a.id),\n 0,\n );\n const data = { id, label: 'Category ' + id };\n const addRowLabel = model.categories.length % categoriesPerRow === 0;\n const rowLabels = [...model.rowLabels];\n\n if (addRowLabel) {\n rowLabels.push('');\n }\n\n this.setState(\n {\n focusedEl: oldCategories.length,\n },\n () => {\n this.props.onModelChanged({\n rowLabels,\n categories: model.categories.concat([data]),\n });\n },\n );\n };\n\n deleteFocusedEl = () => {\n this.setState({\n focusedEl: null,\n });\n };\n\n delete = (category) => {\n const { model, onModelChanged } = this.props;\n const index = model.categories.findIndex((a) => a.id === category.id);\n\n if (index !== -1) {\n model.categories.splice(index, 1);\n model.correctResponse = removeCategory(category.id, model.correctResponse);\n onModelChanged(model);\n }\n };\n\n change = (c) => {\n const { categories } = this.props;\n const index = categories.findIndex((a) => a.id === c.id);\n\n if (index !== -1) {\n categories.splice(index, 1, c);\n this.props.onModelChanged({ categories });\n }\n };\n\n addChoiceToCategory = (addedChoice, categoryId) => {\n const { model, onModelChanged } = this.props;\n let { choices = [], correctResponse = [] } = model || {};\n const choice = (choices || []).find((choice) => choice.id === addedChoice.id);\n correctResponse = moveChoiceToCategory(addedChoice.id, undefined, categoryId, 0, model.correctResponse);\n // if multiplePlacements not allowed, ensure the consistency in the other categories\n if (choice.categoryCount !== 0) {\n correctResponse = verifyAllowMultiplePlacements(addedChoice, categoryId, correctResponse);\n }\n onModelChanged({ correctResponse });\n };\n\n deleteChoiceFromCategory = (category, choice, choiceIndex) => {\n const { model, onModelChanged } = this.props;\n const correctResponse = removeChoiceFromCategory(choice.id, category.id, choiceIndex, model.correctResponse);\n\n onModelChanged({ correctResponse });\n };\n\n moveChoice = (choiceId, from, to, choiceIndex) => {\n const { model, onModelChanged } = this.props;\n let { choices, correctResponse = [] } = model || {};\n const choice = (choices || []).find((choice) => choice.id === choiceId);\n if (to === from || !choice) {\n return;\n }\n if (choice.categoryCount !== 0) {\n correctResponse = moveChoiceToCategory(choice.id, from, to, choiceIndex, correctResponse);\n correctResponse = verifyAllowMultiplePlacements(choice, to, correctResponse);\n } else if (choice.categoryCount === 0) {\n correctResponse = moveChoiceToCategory(choice.id, undefined, to, 0, correctResponse);\n }\n onModelChanged({ correctResponse });\n };\n\n changeRowLabel = (val, index) => {\n const { model } = this.props;\n const { rowLabels } = model;\n const newRowLabels = [...rowLabels];\n\n if (newRowLabels.length < index) {\n newRowLabels.push(val);\n } else {\n newRowLabels[index] = val;\n }\n\n this.props.onModelChanged({\n rowLabels: newRowLabels,\n });\n };\n\n render() {\n const {\n model,\n classes,\n className,\n categories,\n imageSupport,\n uploadSoundSupport,\n toolbarOpts,\n spellCheck,\n configuration,\n defaultImageMaxHeight,\n defaultImageMaxWidth,\n } = this.props;\n\n const { categoriesPerRow, rowLabels, errors } = model;\n const { associationError, categoriesError, categoriesErrors } = errors || {};\n const { maxCategories, maxImageWidth = {}, maxImageHeight = {} } = configuration || {};\n const holderStyle = {\n gridTemplateColumns: `repeat(${categoriesPerRow}, 1fr)`,\n };\n\n const validationMessage = generateValidationMessage(configuration);\n\n return (\n <div className={classNames(classes.categories, className)}>\n <Header\n label=\"Categories\"\n buttonLabel=\"ADD A CATEGORY\"\n onAdd={this.add}\n info={\n <Tooltip\n classes={{ tooltip: classes.tooltip }}\n disableFocusListener\n disableTouchListener\n placement={'right'}\n title={validationMessage}\n >\n <Info fontSize={'small'} color={'primary'} style={{ marginLeft: '5px' }} />\n </Tooltip>\n }\n buttonDisabled={maxCategories && categories && maxCategories === categories.length}\n />\n {associationError && <div className={classes.errorText}>{associationError}</div>}\n {categoriesError && <div className={classes.errorText}>{categoriesError}</div>}\n <div className={classes.categoriesHolder} style={holderStyle}>\n {categories.map((category, index) => {\n const hasRowLabel = index % categoriesPerRow === 0;\n const rowIndex = index / categoriesPerRow;\n\n return (\n <React.Fragment key={index}>\n {hasRowLabel && (\n <RowLabel\n categoriesPerRow={categoriesPerRow}\n disabled={false}\n rowIndex={rowIndex}\n markup={rowLabels[rowIndex] || ''}\n onChange={(val) => this.changeRowLabel(val, rowIndex)}\n imageSupport={imageSupport}\n toolbarOpts={toolbarOpts}\n spellCheck={spellCheck}\n maxImageWidth={(maxImageWidth && maxImageWidth.rowLabel) || defaultImageMaxWidth}\n maxImageHeight={(maxImageHeight && maxImageHeight.rowLabel) || defaultImageMaxHeight}\n uploadSoundSupport={uploadSoundSupport}\n />\n )}\n <Category\n imageSupport={imageSupport}\n focusedEl={this.state.focusedEl}\n deleteFocusedEl={this.deleteFocusedEl}\n index={index}\n category={category}\n error={categoriesErrors && categoriesErrors[category.id]}\n onChange={this.change}\n onDelete={() => this.delete(category)}\n onAddChoice={this.addChoiceToCategory}\n onMoveChoice={(choiceId, from, to, choiceIndex) => this.moveChoice(choiceId, from, to, choiceIndex)}\n toolbarOpts={toolbarOpts}\n spellCheck={spellCheck}\n onDeleteChoice={(choice, choiceIndex) => this.deleteChoiceFromCategory(category, choice, choiceIndex)}\n maxImageWidth={(maxImageWidth && maxImageWidth.categoryLabel) || defaultImageMaxWidth}\n maxImageHeight={(maxImageHeight && maxImageHeight.categoryLabel) || defaultImageMaxHeight}\n uploadSoundSupport={uploadSoundSupport}\n />\n </React.Fragment>\n );\n })}\n </div>\n </div>\n );\n }\n}\n\nexport default withStyles(styles)(Categories);\n"],"file":"index.js"}
|
|
@@ -5,7 +5,7 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
|
|
|
5
5
|
Object.defineProperty(exports, "__esModule", {
|
|
6
6
|
value: true
|
|
7
7
|
});
|
|
8
|
-
exports
|
|
8
|
+
exports.specTarget = exports.spec = exports["default"] = exports.Choice = void 0;
|
|
9
9
|
|
|
10
10
|
var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
|
|
11
11
|
|
|
@@ -47,13 +47,21 @@ var _debug = _interopRequireDefault(require("debug"));
|
|
|
47
47
|
|
|
48
48
|
var _drag = require("@pie-lib/drag");
|
|
49
49
|
|
|
50
|
+
var _utils = require("../../utils");
|
|
51
|
+
|
|
52
|
+
var _flow = _interopRequireDefault(require("lodash/flow"));
|
|
53
|
+
|
|
50
54
|
function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = (0, _getPrototypeOf2["default"])(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = (0, _getPrototypeOf2["default"])(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return (0, _possibleConstructorReturn2["default"])(this, result); }; }
|
|
51
55
|
|
|
52
|
-
function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try {
|
|
56
|
+
function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
|
|
53
57
|
|
|
54
58
|
var log = (0, _debug["default"])('@pie-element:categorize:configure:choice');
|
|
55
59
|
|
|
56
60
|
var canDrag = function canDrag(props) {
|
|
61
|
+
if (props.lockChoiceOrder) {
|
|
62
|
+
return true;
|
|
63
|
+
}
|
|
64
|
+
|
|
57
65
|
var count = props.choice.categoryCount || 0;
|
|
58
66
|
|
|
59
67
|
if (count === 0) {
|
|
@@ -98,6 +106,9 @@ var Choice = /*#__PURE__*/function (_React$Component) {
|
|
|
98
106
|
|
|
99
107
|
onChange(choice);
|
|
100
108
|
});
|
|
109
|
+
(0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "isCheckboxShown", function (allowMultiplePlacements) {
|
|
110
|
+
return allowMultiplePlacements === _utils.multiplePlacements.perChoice;
|
|
111
|
+
});
|
|
101
112
|
return _this;
|
|
102
113
|
}
|
|
103
114
|
|
|
@@ -105,33 +116,56 @@ var Choice = /*#__PURE__*/function (_React$Component) {
|
|
|
105
116
|
key: "render",
|
|
106
117
|
value: function render() {
|
|
107
118
|
var _this$props3 = this.props,
|
|
119
|
+
allowMultiplePlacements = _this$props3.allowMultiplePlacements,
|
|
108
120
|
classes = _this$props3.classes,
|
|
109
121
|
className = _this$props3.className,
|
|
110
122
|
choice = _this$props3.choice,
|
|
123
|
+
deleteFocusedEl = _this$props3.deleteFocusedEl,
|
|
124
|
+
focusedEl = _this$props3.focusedEl,
|
|
125
|
+
index = _this$props3.index,
|
|
111
126
|
onDelete = _this$props3.onDelete,
|
|
127
|
+
connectDropTarget = _this$props3.connectDropTarget,
|
|
112
128
|
connectDragSource = _this$props3.connectDragSource,
|
|
113
129
|
connectDragPreview = _this$props3.connectDragPreview,
|
|
114
|
-
imageSupport = _this$props3.imageSupport
|
|
130
|
+
imageSupport = _this$props3.imageSupport,
|
|
131
|
+
spellCheck = _this$props3.spellCheck,
|
|
132
|
+
toolbarOpts = _this$props3.toolbarOpts,
|
|
133
|
+
error = _this$props3.error,
|
|
134
|
+
maxImageWidth = _this$props3.maxImageWidth,
|
|
135
|
+
maxImageHeight = _this$props3.maxImageHeight,
|
|
136
|
+
uploadSoundSupport = _this$props3.uploadSoundSupport;
|
|
137
|
+
var showRemoveAfterPlacing = this.isCheckboxShown(allowMultiplePlacements);
|
|
115
138
|
var draggable = canDrag(this.props);
|
|
116
139
|
return /*#__PURE__*/_react["default"].createElement(_Card["default"], {
|
|
117
140
|
className: (0, _classnames["default"])(classes.choice, className)
|
|
118
141
|
}, /*#__PURE__*/_react["default"].createElement(_CardActions["default"], {
|
|
119
142
|
className: classes.actions
|
|
120
|
-
}, connectDragSource( /*#__PURE__*/_react["default"].createElement("span", {
|
|
143
|
+
}, connectDragSource(connectDropTarget( /*#__PURE__*/_react["default"].createElement("span", {
|
|
121
144
|
className: (0, _classnames["default"])(classes.dragHandle, draggable === false && classes.dragDisabled)
|
|
122
145
|
}, /*#__PURE__*/_react["default"].createElement(_DragHandle["default"], {
|
|
123
146
|
color: draggable ? 'primary' : 'disabled'
|
|
124
|
-
})))), connectDragPreview( /*#__PURE__*/_react["default"].createElement("span", null, /*#__PURE__*/_react["default"].createElement(_inputHeader["default"], {
|
|
147
|
+
}))))), connectDragPreview( /*#__PURE__*/_react["default"].createElement("span", null, /*#__PURE__*/_react["default"].createElement(_inputHeader["default"], {
|
|
125
148
|
imageSupport: imageSupport,
|
|
149
|
+
focusedEl: focusedEl,
|
|
150
|
+
deleteFocusedEl: deleteFocusedEl,
|
|
151
|
+
index: index,
|
|
126
152
|
label: choice.content,
|
|
127
153
|
onChange: this.changeContent,
|
|
128
|
-
onDelete: onDelete
|
|
129
|
-
|
|
154
|
+
onDelete: onDelete,
|
|
155
|
+
toolbarOpts: toolbarOpts,
|
|
156
|
+
spellCheck: spellCheck,
|
|
157
|
+
error: error,
|
|
158
|
+
maxImageWidth: maxImageWidth,
|
|
159
|
+
maxImageHeight: maxImageHeight,
|
|
160
|
+
uploadSoundSupport: uploadSoundSupport
|
|
161
|
+
}), error && /*#__PURE__*/_react["default"].createElement("div", {
|
|
162
|
+
className: classes.errorText
|
|
163
|
+
}, error))), /*#__PURE__*/_react["default"].createElement(_CardActions["default"], {
|
|
130
164
|
className: classes.actions
|
|
131
165
|
}, /*#__PURE__*/_react["default"].createElement(_buttons.DeleteButton, {
|
|
132
166
|
label: 'delete',
|
|
133
167
|
onClick: onDelete
|
|
134
|
-
}), /*#__PURE__*/_react["default"].createElement(_configUi.Checkbox, {
|
|
168
|
+
}), showRemoveAfterPlacing && /*#__PURE__*/_react["default"].createElement(_configUi.Checkbox, {
|
|
135
169
|
mini: true,
|
|
136
170
|
label: 'Remove after placing',
|
|
137
171
|
checked: choice.categoryCount === 1,
|
|
@@ -144,9 +178,14 @@ var Choice = /*#__PURE__*/function (_React$Component) {
|
|
|
144
178
|
|
|
145
179
|
exports.Choice = Choice;
|
|
146
180
|
(0, _defineProperty2["default"])(Choice, "propTypes", {
|
|
181
|
+
allowMultiplePlacements: _propTypes["default"].string,
|
|
147
182
|
classes: _propTypes["default"].object.isRequired,
|
|
148
183
|
className: _propTypes["default"].string,
|
|
149
184
|
choice: _propTypes["default"].object.isRequired,
|
|
185
|
+
deleteFocusedEl: _propTypes["default"].func,
|
|
186
|
+
focusedEl: _propTypes["default"].number,
|
|
187
|
+
index: _propTypes["default"].number,
|
|
188
|
+
lockChoiceOrder: _propTypes["default"].bool,
|
|
150
189
|
onChange: _propTypes["default"].func.isRequired,
|
|
151
190
|
onDelete: _propTypes["default"].func.isRequired,
|
|
152
191
|
connectDragSource: _propTypes["default"].func.isRequired,
|
|
@@ -155,6 +194,12 @@ exports.Choice = Choice;
|
|
|
155
194
|
imageSupport: _propTypes["default"].shape({
|
|
156
195
|
add: _propTypes["default"].func.isRequired,
|
|
157
196
|
"delete": _propTypes["default"].func.isRequired
|
|
197
|
+
}),
|
|
198
|
+
toolbarOpts: _propTypes["default"].object,
|
|
199
|
+
error: _propTypes["default"].string,
|
|
200
|
+
uploadSoundSupport: _propTypes["default"].shape({
|
|
201
|
+
add: _propTypes["default"].func.isRequired,
|
|
202
|
+
"delete": _propTypes["default"].func.isRequired
|
|
158
203
|
})
|
|
159
204
|
});
|
|
160
205
|
(0, _defineProperty2["default"])(Choice, "defaultProps", {});
|
|
@@ -174,6 +219,11 @@ var styles = function styles(theme) {
|
|
|
174
219
|
},
|
|
175
220
|
dragDisabled: {
|
|
176
221
|
cursor: 'inherit'
|
|
222
|
+
},
|
|
223
|
+
errorText: {
|
|
224
|
+
fontSize: '11px',
|
|
225
|
+
color: 'red',
|
|
226
|
+
paddingBottom: '5px'
|
|
177
227
|
}
|
|
178
228
|
};
|
|
179
229
|
};
|
|
@@ -183,7 +233,8 @@ var spec = {
|
|
|
183
233
|
canDrag: canDrag,
|
|
184
234
|
beginDrag: function beginDrag(props) {
|
|
185
235
|
var out = {
|
|
186
|
-
id: props.choice.id
|
|
236
|
+
id: props.choice.id,
|
|
237
|
+
index: props.index
|
|
187
238
|
};
|
|
188
239
|
log('[beginDrag] out:', out);
|
|
189
240
|
return out;
|
|
@@ -200,7 +251,20 @@ var spec = {
|
|
|
200
251
|
}
|
|
201
252
|
};
|
|
202
253
|
exports.spec = spec;
|
|
203
|
-
var
|
|
254
|
+
var specTarget = {
|
|
255
|
+
drop: function drop(props, monitor) {
|
|
256
|
+
log('[drop] props: ', props);
|
|
257
|
+
var item = monitor.getItem();
|
|
258
|
+
props.rearrangeChoices(item.index, props.index);
|
|
259
|
+
},
|
|
260
|
+
canDrop: function canDrop(props, monitor) {
|
|
261
|
+
var item = monitor.getItem();
|
|
262
|
+
return props.choice.id !== item.id;
|
|
263
|
+
}
|
|
264
|
+
};
|
|
265
|
+
exports.specTarget = specTarget;
|
|
266
|
+
|
|
267
|
+
var _default = _drag.uid.withUid((0, _flow["default"])((0, _reactDnd.DragSource)(function (_ref) {
|
|
204
268
|
var uid = _ref.uid;
|
|
205
269
|
return uid;
|
|
206
270
|
}, spec, function (connect, monitor) {
|
|
@@ -209,9 +273,15 @@ var DraggableChoice = (0, _reactDnd.DragSource)(function (_ref) {
|
|
|
209
273
|
connectDragPreview: connect.dragPreview(),
|
|
210
274
|
isDragging: monitor.isDragging()
|
|
211
275
|
};
|
|
212
|
-
})(
|
|
213
|
-
|
|
214
|
-
|
|
276
|
+
}), (0, _reactDnd.DropTarget)(function (_ref2) {
|
|
277
|
+
var uid = _ref2.uid;
|
|
278
|
+
return uid;
|
|
279
|
+
}, specTarget, function (connect, monitor) {
|
|
280
|
+
return {
|
|
281
|
+
connectDropTarget: connect.dropTarget(),
|
|
282
|
+
isOver: monitor.isOver()
|
|
283
|
+
};
|
|
284
|
+
}))(StyledChoice));
|
|
215
285
|
|
|
216
286
|
exports["default"] = _default;
|
|
217
287
|
//# sourceMappingURL=choice.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/design/choices/choice.jsx"],"names":["log","canDrag","props","count","choice","categoryCount","correctResponseCount","Choice","content","onChange","classes","className","onDelete","connectDragSource","connectDragPreview","imageSupport","draggable","actions","dragHandle","dragDisabled","changeContent","changeCategoryCount","React","Component","PropTypes","object","isRequired","string","func","number","shape","add","styles","theme","padding","justifyContent","spacing","unit","overflow","cursor","StyledChoice","spec","beginDrag","out","id","endDrag","monitor","didDrop","item","getItem","categoryId","onRemoveChoice","DraggableChoice","uid","connect","dragSource","dragPreview","isDragging","withUid"],"mappings":"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","sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\nimport { withStyles } from '@material-ui/core/styles';\nimport classNames from 'classnames';\nimport Card from '@material-ui/core/Card';\nimport CardActions from '@material-ui/core/CardActions';\nimport InputHeader from '../input-header';\nimport { Checkbox } from '@pie-lib/config-ui';\nimport { DeleteButton } from '../buttons';\nimport DragHandle from '@material-ui/icons/DragHandle';\nimport { DragSource } from 'react-dnd';\nimport debug from 'debug';\nimport { uid } from '@pie-lib/drag';\n\nconst log = debug('@pie-element:categorize:configure:choice');\n\nconst canDrag = props => {\n const count = props.choice.categoryCount || 0;\n if (count === 0) {\n return true;\n } else {\n return props.correctResponseCount < count;\n }\n};\n\nexport class Choice extends React.Component {\n static propTypes = {\n classes: PropTypes.object.isRequired,\n className: PropTypes.string,\n choice: PropTypes.object.isRequired,\n onChange: PropTypes.func.isRequired,\n onDelete: PropTypes.func.isRequired,\n connectDragSource: PropTypes.func.isRequired,\n connectDragPreview: PropTypes.func.isRequired,\n correctResponseCount: PropTypes.number.isRequired,\n imageSupport: PropTypes.shape({\n add: PropTypes.func.isRequired,\n delete: PropTypes.func.isRequired\n })\n };\n\n static defaultProps = {};\n\n changeContent = content => {\n const { onChange, choice } = this.props;\n choice.content = content;\n onChange(choice);\n };\n\n changeCategoryCount = () => {\n const { onChange, choice } = this.props;\n if (choice.categoryCount === 1) {\n choice.categoryCount = 0;\n } else {\n choice.categoryCount = 1;\n }\n onChange(choice);\n };\n\n render() {\n const {\n classes,\n className,\n choice,\n onDelete,\n connectDragSource,\n connectDragPreview,\n imageSupport\n } = this.props;\n\n const draggable = canDrag(this.props);\n\n return (\n <Card className={classNames(classes.choice, className)}>\n <CardActions className={classes.actions}>\n {connectDragSource(\n <span\n className={classNames(\n classes.dragHandle,\n draggable === false && classes.dragDisabled\n )}\n >\n <DragHandle color={draggable ? 'primary' : 'disabled'} />\n </span>\n )}\n </CardActions>\n {connectDragPreview(\n <span>\n <InputHeader\n imageSupport={imageSupport}\n label={choice.content}\n onChange={this.changeContent}\n onDelete={onDelete}\n />\n </span>\n )}\n\n <CardActions className={classes.actions}>\n <DeleteButton label={'delete'} onClick={onDelete} />\n <Checkbox\n mini\n label={'Remove after placing'}\n checked={choice.categoryCount === 1}\n onChange={this.changeCategoryCount}\n />\n </CardActions>\n </Card>\n );\n }\n}\nconst styles = theme => ({\n actions: {\n padding: 0,\n justifyContent: 'space-between'\n },\n choice: {\n padding: theme.spacing.unit,\n overflow: 'visible'\n },\n dragHandle: {\n cursor: 'move'\n },\n dragDisabled: {\n cursor: 'inherit'\n }\n});\n\nconst StyledChoice = withStyles(styles)(Choice);\n\nexport const spec = {\n canDrag,\n beginDrag: props => {\n const out = {\n id: props.choice.id\n };\n log('[beginDrag] out:', out);\n return out;\n },\n endDrag: (props, monitor) => {\n if (!monitor.didDrop()) {\n const item = monitor.getItem();\n if (item.categoryId) {\n log('wasnt droppped - what to do?');\n props.onRemoveChoice(item);\n }\n }\n }\n};\n\nconst DraggableChoice = DragSource(\n ({ uid }) => uid,\n spec,\n (connect, monitor) => ({\n connectDragSource: connect.dragSource(),\n connectDragPreview: connect.dragPreview(),\n isDragging: monitor.isDragging()\n })\n)(StyledChoice);\n\nexport default uid.withUid(DraggableChoice);\n"],"file":"choice.js"}
|
|
1
|
+
{"version":3,"sources":["../../../src/design/choices/choice.jsx"],"names":["log","canDrag","props","lockChoiceOrder","count","choice","categoryCount","correctResponseCount","Choice","content","onChange","allowMultiplePlacements","multiplePlacements","perChoice","classes","className","deleteFocusedEl","focusedEl","index","onDelete","connectDropTarget","connectDragSource","connectDragPreview","imageSupport","spellCheck","toolbarOpts","error","maxImageWidth","maxImageHeight","uploadSoundSupport","showRemoveAfterPlacing","isCheckboxShown","draggable","actions","dragHandle","dragDisabled","changeContent","errorText","changeCategoryCount","React","Component","PropTypes","string","object","isRequired","func","number","bool","shape","add","styles","theme","padding","justifyContent","spacing","unit","overflow","cursor","fontSize","color","paddingBottom","StyledChoice","spec","beginDrag","out","id","endDrag","monitor","didDrop","item","getItem","categoryId","onRemoveChoice","specTarget","drop","rearrangeChoices","canDrop","uid","withUid","connect","dragSource","dragPreview","isDragging","dropTarget","isOver"],"mappings":"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","sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\nimport { withStyles } from '@material-ui/core/styles';\nimport classNames from 'classnames';\nimport Card from '@material-ui/core/Card';\nimport CardActions from '@material-ui/core/CardActions';\nimport InputHeader from '../input-header';\nimport { Checkbox } from '@pie-lib/config-ui';\nimport { DeleteButton } from '../buttons';\nimport DragHandle from '@material-ui/icons/DragHandle';\nimport { DragSource, DropTarget } from 'react-dnd';\nimport debug from 'debug';\nimport { uid } from '@pie-lib/drag';\nimport { multiplePlacements } from '../../utils';\nimport flow from 'lodash/flow';\n\nconst log = debug('@pie-element:categorize:configure:choice');\n\nconst canDrag = (props) => {\n if (props.lockChoiceOrder) {\n return true;\n }\n const count = props.choice.categoryCount || 0;\n if (count === 0) {\n return true;\n } else {\n return props.correctResponseCount < count;\n }\n};\n\nexport class Choice extends React.Component {\n static propTypes = {\n allowMultiplePlacements: PropTypes.string,\n classes: PropTypes.object.isRequired,\n className: PropTypes.string,\n choice: PropTypes.object.isRequired,\n deleteFocusedEl: PropTypes.func,\n focusedEl: PropTypes.number,\n index: PropTypes.number,\n lockChoiceOrder: PropTypes.bool,\n onChange: PropTypes.func.isRequired,\n onDelete: PropTypes.func.isRequired,\n connectDragSource: PropTypes.func.isRequired,\n connectDragPreview: PropTypes.func.isRequired,\n correctResponseCount: PropTypes.number.isRequired,\n imageSupport: PropTypes.shape({\n add: PropTypes.func.isRequired,\n delete: PropTypes.func.isRequired,\n }),\n toolbarOpts: PropTypes.object,\n error: PropTypes.string,\n uploadSoundSupport: PropTypes.shape({\n add: PropTypes.func.isRequired,\n delete: PropTypes.func.isRequired,\n }),\n };\n\n static defaultProps = {};\n\n changeContent = (content) => {\n const { onChange, choice } = this.props;\n choice.content = content;\n onChange(choice);\n };\n\n changeCategoryCount = () => {\n const { onChange, choice } = this.props;\n if (choice.categoryCount === 1) {\n choice.categoryCount = 0;\n } else {\n choice.categoryCount = 1;\n }\n onChange(choice);\n };\n\n isCheckboxShown = (allowMultiplePlacements) => allowMultiplePlacements === multiplePlacements.perChoice;\n\n render() {\n const {\n allowMultiplePlacements,\n classes,\n className,\n choice,\n deleteFocusedEl,\n focusedEl,\n index,\n onDelete,\n connectDropTarget,\n connectDragSource,\n connectDragPreview,\n imageSupport,\n spellCheck,\n toolbarOpts,\n error,\n maxImageWidth,\n maxImageHeight,\n uploadSoundSupport,\n } = this.props;\n\n const showRemoveAfterPlacing = this.isCheckboxShown(allowMultiplePlacements);\n const draggable = canDrag(this.props);\n\n return (\n <Card className={classNames(classes.choice, className)}>\n <CardActions className={classes.actions}>\n {connectDragSource(\n connectDropTarget(\n <span className={classNames(classes.dragHandle, draggable === false && classes.dragDisabled)}>\n <DragHandle color={draggable ? 'primary' : 'disabled'} />\n </span>,\n ),\n )}\n </CardActions>\n {connectDragPreview(\n <span>\n <InputHeader\n imageSupport={imageSupport}\n focusedEl={focusedEl}\n deleteFocusedEl={deleteFocusedEl}\n index={index}\n label={choice.content}\n onChange={this.changeContent}\n onDelete={onDelete}\n toolbarOpts={toolbarOpts}\n spellCheck={spellCheck}\n error={error}\n maxImageWidth={maxImageWidth}\n maxImageHeight={maxImageHeight}\n uploadSoundSupport={uploadSoundSupport}\n />\n {error && <div className={classes.errorText}>{error}</div>}\n </span>,\n )}\n\n <CardActions className={classes.actions}>\n <DeleteButton label={'delete'} onClick={onDelete} />\n {showRemoveAfterPlacing && (\n <Checkbox\n mini\n label={'Remove after placing'}\n checked={choice.categoryCount === 1}\n onChange={this.changeCategoryCount}\n />\n )}\n </CardActions>\n </Card>\n );\n }\n}\nconst styles = (theme) => ({\n actions: {\n padding: 0,\n justifyContent: 'space-between',\n },\n choice: {\n padding: theme.spacing.unit,\n overflow: 'visible',\n },\n dragHandle: {\n cursor: 'move',\n },\n dragDisabled: {\n cursor: 'inherit',\n },\n errorText: {\n fontSize: '11px',\n color: 'red',\n paddingBottom: '5px',\n },\n});\n\nconst StyledChoice = withStyles(styles)(Choice);\n\nexport const spec = {\n canDrag,\n beginDrag: (props) => {\n const out = {\n id: props.choice.id,\n index: props.index,\n };\n log('[beginDrag] out:', out);\n return out;\n },\n endDrag: (props, monitor) => {\n if (!monitor.didDrop()) {\n const item = monitor.getItem();\n if (item.categoryId) {\n log('wasnt droppped - what to do?');\n props.onRemoveChoice(item);\n }\n }\n },\n};\n\nexport const specTarget = {\n drop: (props, monitor) => {\n log('[drop] props: ', props);\n const item = monitor.getItem();\n props.rearrangeChoices(item.index, props.index);\n },\n canDrop: (props, monitor) => {\n const item = monitor.getItem();\n return props.choice.id !== item.id;\n },\n};\n\nexport default uid.withUid(\n flow(\n DragSource(\n ({ uid }) => uid,\n spec,\n (connect, monitor) => ({\n connectDragSource: connect.dragSource(),\n connectDragPreview: connect.dragPreview(),\n isDragging: monitor.isDragging(),\n }),\n ),\n DropTarget(\n ({ uid }) => uid,\n specTarget,\n (connect, monitor) => ({\n connectDropTarget: connect.dropTarget(),\n isOver: monitor.isOver(),\n }),\n ),\n )(StyledChoice),\n);\n"],"file":"choice.js"}
|
|
@@ -45,25 +45,7 @@ var _configUi = require("@pie-lib/config-ui");
|
|
|
45
45
|
|
|
46
46
|
function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = (0, _getPrototypeOf2["default"])(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = (0, _getPrototypeOf2["default"])(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return (0, _possibleConstructorReturn2["default"])(this, result); }; }
|
|
47
47
|
|
|
48
|
-
function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try {
|
|
49
|
-
|
|
50
|
-
var positionOptions = [{
|
|
51
|
-
label: 'Above',
|
|
52
|
-
value: 'above',
|
|
53
|
-
secondaryText: 'Choices will be shown above categories'
|
|
54
|
-
}, {
|
|
55
|
-
label: 'Below',
|
|
56
|
-
value: 'below',
|
|
57
|
-
secondaryText: 'Choices will be shown below categories'
|
|
58
|
-
}, {
|
|
59
|
-
label: 'Left',
|
|
60
|
-
value: 'left',
|
|
61
|
-
secondaryText: 'Choices will be shown to the left of the categories'
|
|
62
|
-
}, {
|
|
63
|
-
label: 'Right',
|
|
64
|
-
value: 'right',
|
|
65
|
-
secondaryText: 'Choices will be shown to the right of the categories'
|
|
66
|
-
}];
|
|
48
|
+
function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
|
|
67
49
|
|
|
68
50
|
var Config = /*#__PURE__*/function (_React$Component) {
|
|
69
51
|
(0, _inherits2["default"])(Config, _React$Component);
|
|
@@ -80,112 +62,27 @@ var Config = /*#__PURE__*/function (_React$Component) {
|
|
|
80
62
|
}
|
|
81
63
|
|
|
82
64
|
_this = _super.call.apply(_super, [this].concat(args));
|
|
83
|
-
(0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "
|
|
84
|
-
anchorEl: null
|
|
85
|
-
});
|
|
86
|
-
(0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "toggleRemoveAllTiles", function () {
|
|
87
|
-
var _this$props = _this.props,
|
|
88
|
-
config = _this$props.config,
|
|
89
|
-
onModelChanged = _this$props.onModelChanged;
|
|
90
|
-
|
|
91
|
-
var allAtOne = _this.props.allChoicesHaveCount(1);
|
|
92
|
-
|
|
93
|
-
var update = config.choices.map(function (c) {
|
|
94
|
-
c.categoryCount = allAtOne ? 0 : 1;
|
|
95
|
-
return c;
|
|
96
|
-
});
|
|
97
|
-
onModelChanged({
|
|
98
|
-
choices: update
|
|
99
|
-
});
|
|
100
|
-
});
|
|
101
|
-
(0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "changeColumns", function (_ref) {
|
|
65
|
+
(0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "changeLabel", function (_ref) {
|
|
102
66
|
var target = _ref.target;
|
|
103
|
-
var onModelChanged = _this.props.onModelChanged;
|
|
104
|
-
var numberValue = parseInt(target.value, 10);
|
|
105
|
-
|
|
106
|
-
if (numberValue && numberValue >= 1 && numberValue <= 4) {
|
|
107
|
-
onModelChanged({
|
|
108
|
-
choicesPerRow: numberValue
|
|
109
|
-
});
|
|
110
|
-
}
|
|
111
|
-
});
|
|
112
|
-
(0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "changeLabel", function (_ref2) {
|
|
113
|
-
var target = _ref2.target;
|
|
114
67
|
|
|
115
68
|
_this.props.onModelChanged({
|
|
116
69
|
choicesLabel: target.value
|
|
117
70
|
});
|
|
118
71
|
});
|
|
119
|
-
(0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "toggleShuffle", function () {
|
|
120
|
-
_this.props.onModelChanged({
|
|
121
|
-
lockChoiceOrder: !_this.props.config.lockChoiceOrder
|
|
122
|
-
});
|
|
123
|
-
});
|
|
124
|
-
(0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "changePosition", function (position) {
|
|
125
|
-
_this.props.onModelChanged({
|
|
126
|
-
choicesPosition: position.value
|
|
127
|
-
});
|
|
128
|
-
|
|
129
|
-
_this.setState({
|
|
130
|
-
anchorEl: null
|
|
131
|
-
});
|
|
132
|
-
});
|
|
133
|
-
(0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "handleClickPosition", function (event) {
|
|
134
|
-
_this.setState({
|
|
135
|
-
anchorEl: event.currentTarget
|
|
136
|
-
});
|
|
137
|
-
});
|
|
138
|
-
(0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "handleMenuItemClick", function (event, index) {
|
|
139
|
-
_this.setState({
|
|
140
|
-
selectedIndex: index,
|
|
141
|
-
anchorEl: null
|
|
142
|
-
});
|
|
143
|
-
});
|
|
144
|
-
(0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "handleClose", function () {
|
|
145
|
-
_this.setState({
|
|
146
|
-
anchorEl: null
|
|
147
|
-
});
|
|
148
|
-
});
|
|
149
72
|
return _this;
|
|
150
73
|
}
|
|
151
74
|
|
|
152
75
|
(0, _createClass2["default"])(Config, [{
|
|
153
76
|
key: "render",
|
|
154
77
|
value: function render() {
|
|
155
|
-
var
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
className = _this$props2.className,
|
|
161
|
-
categoryCountIsOne = _this$props2.categoryCountIsOne,
|
|
162
|
-
config = _this$props2.config;
|
|
163
|
-
var positionOption = positionOptions.find(function (option) {
|
|
164
|
-
return option.value === config.choicesPosition;
|
|
165
|
-
}) || positionOption[1];
|
|
78
|
+
var _this$props = this.props,
|
|
79
|
+
classes = _this$props.classes,
|
|
80
|
+
className = _this$props.className,
|
|
81
|
+
config = _this$props.config,
|
|
82
|
+
spellCheck = _this$props.spellCheck;
|
|
166
83
|
return /*#__PURE__*/_react["default"].createElement("div", {
|
|
167
84
|
className: (0, _classnames["default"])(classes.config, className)
|
|
168
85
|
}, /*#__PURE__*/_react["default"].createElement("div", {
|
|
169
|
-
className: classes.row
|
|
170
|
-
}, /*#__PURE__*/_react["default"].createElement(_TextField["default"], {
|
|
171
|
-
label: 'Choices per row',
|
|
172
|
-
type: "number",
|
|
173
|
-
inputProps: {
|
|
174
|
-
min: 1,
|
|
175
|
-
max: 4
|
|
176
|
-
},
|
|
177
|
-
value: config.choicesPerRow,
|
|
178
|
-
onChange: this.changeColumns
|
|
179
|
-
}), /*#__PURE__*/_react["default"].createElement(_configUi.InputCheckbox, {
|
|
180
|
-
label: 'Remove all tiles after placing',
|
|
181
|
-
checked: categoryCountIsOne,
|
|
182
|
-
onChange: this.toggleRemoveAllTiles
|
|
183
|
-
}), /*#__PURE__*/_react["default"].createElement(_configUi.InputCheckbox, {
|
|
184
|
-
className: classes.shuffleCheckbox,
|
|
185
|
-
label: 'Lock Choice Order',
|
|
186
|
-
checked: config.lockChoiceOrder,
|
|
187
|
-
onChange: this.toggleShuffle
|
|
188
|
-
})), /*#__PURE__*/_react["default"].createElement("div", {
|
|
189
86
|
className: classes.configuration
|
|
190
87
|
}, /*#__PURE__*/_react["default"].createElement(_TextField["default"], {
|
|
191
88
|
className: classes.label,
|
|
@@ -194,30 +91,9 @@ var Config = /*#__PURE__*/function (_React$Component) {
|
|
|
194
91
|
},
|
|
195
92
|
label: "Label",
|
|
196
93
|
value: config.choicesLabel,
|
|
197
|
-
onChange: this.changeLabel
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
}, /*#__PURE__*/_react["default"].createElement(_ListItem["default"], {
|
|
201
|
-
button: true,
|
|
202
|
-
"aria-haspopup": "true",
|
|
203
|
-
onClick: this.handleClickPosition
|
|
204
|
-
}, /*#__PURE__*/_react["default"].createElement(_ListItemText["default"], {
|
|
205
|
-
primary: "Choices Position",
|
|
206
|
-
secondary: positionOption.secondaryText
|
|
207
|
-
}))), /*#__PURE__*/_react["default"].createElement(_Menu["default"], {
|
|
208
|
-
id: "lock-menu",
|
|
209
|
-
anchorEl: anchorEl,
|
|
210
|
-
open: Boolean(anchorEl),
|
|
211
|
-
onClose: this.handleClose
|
|
212
|
-
}, positionOptions.map(function (option) {
|
|
213
|
-
return /*#__PURE__*/_react["default"].createElement(_MenuItem["default"], {
|
|
214
|
-
key: option.value,
|
|
215
|
-
selected: option.value === config.choicesPosition,
|
|
216
|
-
onClick: function onClick() {
|
|
217
|
-
return _this2.changePosition(option);
|
|
218
|
-
}
|
|
219
|
-
}, option.label);
|
|
220
|
-
}))));
|
|
94
|
+
onChange: this.changeLabel,
|
|
95
|
+
spellCheck: spellCheck
|
|
96
|
+
})));
|
|
221
97
|
}
|
|
222
98
|
}]);
|
|
223
99
|
return Config;
|
|
@@ -228,8 +104,6 @@ exports.Config = Config;
|
|
|
228
104
|
classes: _propTypes["default"].object.isRequired,
|
|
229
105
|
className: _propTypes["default"].string,
|
|
230
106
|
config: _propTypes["default"].object,
|
|
231
|
-
categoryCountIsOne: _propTypes["default"].bool,
|
|
232
|
-
allChoicesHaveCount: _propTypes["default"].func,
|
|
233
107
|
onModelChanged: _propTypes["default"].func
|
|
234
108
|
});
|
|
235
109
|
(0, _defineProperty2["default"])(Config, "defaultProps", {});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/design/choices/config.jsx"],"names":["positionOptions","label","value","secondaryText","Config","anchorEl","props","config","onModelChanged","allAtOne","allChoicesHaveCount","update","choices","map","c","categoryCount","target","numberValue","parseInt","choicesPerRow","choicesLabel","lockChoiceOrder","position","choicesPosition","setState","event","currentTarget","index","selectedIndex","state","classes","className","categoryCountIsOne","positionOption","find","option","row","min","max","changeColumns","toggleRemoveAllTiles","shuffleCheckbox","toggleShuffle","configuration","shrink","changeLabel","handleClickPosition","Boolean","handleClose","changePosition","React","Component","PropTypes","object","isRequired","string","bool","func","styles","theme","display","alignItems","gridColumnGap","spacing","unit","gridRowGap","gridTemplateColumns","justifyContent","marginBottom","choiceConfig","width","maxWidth","backgroundColor","palette","background","paper","marginTop","gridColumnStart","gridColumnEnd"],"mappings":"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","sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\nimport { withStyles } from '@material-ui/core/styles';\nimport classNames from 'classnames';\n\nimport TextField from '@material-ui/core/TextField';\nimport List from '@material-ui/core/List';\nimport ListItem from '@material-ui/core/ListItem';\nimport ListItemText from '@material-ui/core/ListItemText';\nimport MenuItem from '@material-ui/core/MenuItem';\nimport Menu from '@material-ui/core/Menu';\nimport { InputCheckbox } from '@pie-lib/config-ui';\n\nconst positionOptions = [\n {\n label: 'Above',\n value: 'above',\n secondaryText: 'Choices will be shown above categories'\n },\n {\n label: 'Below',\n value: 'below',\n secondaryText: 'Choices will be shown below categories'\n },\n {\n label: 'Left',\n value: 'left',\n secondaryText: 'Choices will be shown to the left of the categories'\n },\n {\n label: 'Right',\n value: 'right',\n secondaryText: 'Choices will be shown to the right of the categories'\n }\n];\n\nexport class Config extends React.Component {\n static propTypes = {\n classes: PropTypes.object.isRequired,\n className: PropTypes.string,\n config: PropTypes.object,\n categoryCountIsOne: PropTypes.bool,\n allChoicesHaveCount: PropTypes.func,\n onModelChanged: PropTypes.func\n };\n\n static defaultProps = {};\n\n state = {\n anchorEl: null\n };\n\n toggleRemoveAllTiles = () => {\n const { config, onModelChanged } = this.props;\n\n const allAtOne = this.props.allChoicesHaveCount(1);\n const update = config.choices.map(c => {\n c.categoryCount = allAtOne ? 0 : 1;\n return c;\n });\n\n onModelChanged({ choices: update });\n };\n\n changeColumns = ({ target }) => {\n const { onModelChanged } = this.props;\n const numberValue = parseInt(target.value, 10);\n\n if (numberValue && numberValue >= 1 && numberValue <= 4) {\n onModelChanged({ choicesPerRow: numberValue });\n }\n };\n\n changeLabel = ({ target }) => {\n this.props.onModelChanged({ choicesLabel: target.value });\n };\n\n toggleShuffle = () => {\n this.props.onModelChanged({\n lockChoiceOrder: !this.props.config.lockChoiceOrder\n });\n };\n\n changePosition = position => {\n this.props.onModelChanged({ choicesPosition: position.value });\n\n this.setState({ anchorEl: null });\n };\n\n handleClickPosition = event => {\n this.setState({ anchorEl: event.currentTarget });\n };\n\n handleMenuItemClick = (event, index) => {\n this.setState({ selectedIndex: index, anchorEl: null });\n };\n\n handleClose = () => {\n this.setState({ anchorEl: null });\n };\n\n render() {\n const { anchorEl } = this.state;\n const { classes, className, categoryCountIsOne, config } = this.props;\n\n const positionOption =\n positionOptions.find(option => option.value === config.choicesPosition) ||\n positionOption[1];\n\n return (\n <div className={classNames(classes.config, className)}>\n <div className={classes.row}>\n <TextField\n label={'Choices per row'}\n type=\"number\"\n inputProps={{\n min: 1,\n max: 4\n }}\n value={config.choicesPerRow}\n onChange={this.changeColumns}\n />\n <InputCheckbox\n label={'Remove all tiles after placing'}\n checked={categoryCountIsOne}\n onChange={this.toggleRemoveAllTiles}\n />\n <InputCheckbox\n className={classes.shuffleCheckbox}\n label={'Lock Choice Order'}\n checked={config.lockChoiceOrder}\n onChange={this.toggleShuffle}\n />\n </div>\n\n <div className={classes.configuration}>\n <TextField\n className={classes.label}\n InputLabelProps={{\n shrink: true\n }}\n label=\"Label\"\n value={config.choicesLabel}\n onChange={this.changeLabel}\n />\n <List component=\"nav\">\n <ListItem\n button\n aria-haspopup=\"true\"\n onClick={this.handleClickPosition}\n >\n <ListItemText\n primary=\"Choices Position\"\n secondary={positionOption.secondaryText}\n />\n </ListItem>\n </List>\n <Menu\n id=\"lock-menu\"\n anchorEl={anchorEl}\n open={Boolean(anchorEl)}\n onClose={this.handleClose}\n >\n {positionOptions.map(option => (\n <MenuItem\n key={option.value}\n selected={option.value === config.choicesPosition}\n onClick={() => this.changePosition(option)}\n >\n {option.label}\n </MenuItem>\n ))}\n </Menu>\n </div>\n </div>\n );\n }\n}\nconst styles = theme => ({\n configuration: {\n display: 'grid',\n alignItems: 'center',\n gridColumnGap: `${theme.spacing.unit}px`,\n gridRowGap: `${theme.spacing.unit}px`,\n gridTemplateColumns: 'repeat(2, 1fr)',\n justifyContent: 'space-between',\n marginBottom: theme.spacing.unit\n },\n choiceConfig: {\n width: '100%',\n maxWidth: 360,\n backgroundColor: theme.palette.background.paper\n },\n row: {\n display: 'grid',\n gridColumnGap: `${theme.spacing.unit}px`,\n gridRowGap: `${theme.spacing.unit}px`,\n gridTemplateColumns: 'repeat(2, 1fr)',\n justifyContent: 'space-between',\n marginTop: theme.spacing.unit,\n marginBottom: theme.spacing.unit\n },\n shuffleCheckbox: {\n gridColumnStart: 2,\n gridColumnEnd: 2\n }\n});\nexport default withStyles(styles)(Config);\n"],"file":"config.js"}
|
|
1
|
+
{"version":3,"sources":["../../../src/design/choices/config.jsx"],"names":["Config","target","props","onModelChanged","choicesLabel","value","classes","className","config","spellCheck","configuration","label","shrink","changeLabel","React","Component","PropTypes","object","isRequired","string","func","styles","theme","display","alignItems","gridColumnGap","spacing","unit","gridRowGap","gridTemplateColumns","justifyContent","marginBottom","choiceConfig","width","maxWidth","backgroundColor","palette","background","paper","row","marginTop","shuffleCheckbox","gridColumnStart","gridColumnEnd"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;AAAA;;AACA;;AACA;;AACA;;AAEA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;;;;;IAGaA,M;;;;;;;;;;;;;;;oGAWG,gBAAgB;AAAA,UAAbC,MAAa,QAAbA,MAAa;;AAC5B,YAAKC,KAAL,CAAWC,cAAX,CAA0B;AAAEC,QAAAA,YAAY,EAAEH,MAAM,CAACI;AAAvB,OAA1B;AACD,K;;;;;;WAGD,kBAAS;AACP,wBAAkD,KAAKH,KAAvD;AAAA,UAAQI,OAAR,eAAQA,OAAR;AAAA,UAAiBC,SAAjB,eAAiBA,SAAjB;AAAA,UAA4BC,MAA5B,eAA4BA,MAA5B;AAAA,UAAoCC,UAApC,eAAoCA,UAApC;AAGA,0BACE;AAAK,QAAA,SAAS,EAAE,4BAAWH,OAAO,CAACE,MAAnB,EAA2BD,SAA3B;AAAhB,sBACE;AAAK,QAAA,SAAS,EAAED,OAAO,CAACI;AAAxB,sBACE,gCAAC,qBAAD;AACE,QAAA,SAAS,EAAEJ,OAAO,CAACK,KADrB;AAEE,QAAA,eAAe,EAAE;AACfC,UAAAA,MAAM,EAAE;AADO,SAFnB;AAKE,QAAA,KAAK,EAAC,OALR;AAME,QAAA,KAAK,EAAEJ,MAAM,CAACJ,YANhB;AAOE,QAAA,QAAQ,EAAE,KAAKS,WAPjB;AAQE,QAAA,UAAU,EAAEJ;AARd,QADF,CADF,CADF;AAgBD;;;EApCyBK,kBAAMC,S;;;iCAArBf,M,eACQ;AACjBM,EAAAA,OAAO,EAAEU,sBAAUC,MAAV,CAAiBC,UADT;AAEjBX,EAAAA,SAAS,EAAES,sBAAUG,MAFJ;AAGjBX,EAAAA,MAAM,EAAEQ,sBAAUC,MAHD;AAIjBd,EAAAA,cAAc,EAAEa,sBAAUI;AAJT,C;iCADRpB,M,kBAQW,E;;AA8BxB,IAAMqB,MAAM,GAAG,SAATA,MAAS,CAAAC,KAAK;AAAA,SAAK;AACvBZ,IAAAA,aAAa,EAAE;AACba,MAAAA,OAAO,EAAE,MADI;AAEbC,MAAAA,UAAU,EAAE,QAFC;AAGbC,MAAAA,aAAa,YAAKH,KAAK,CAACI,OAAN,CAAcC,IAAnB,OAHA;AAIbC,MAAAA,UAAU,YAAKN,KAAK,CAACI,OAAN,CAAcC,IAAnB,OAJG;AAKbE,MAAAA,mBAAmB,EAAE,gBALR;AAMbC,MAAAA,cAAc,EAAE,eANH;AAObC,MAAAA,YAAY,EAAET,KAAK,CAACI,OAAN,CAAcC;AAPf,KADQ;AAUvBK,IAAAA,YAAY,EAAE;AACZC,MAAAA,KAAK,EAAE,MADK;AAEZC,MAAAA,QAAQ,EAAE,GAFE;AAGZC,MAAAA,eAAe,EAAEb,KAAK,CAACc,OAAN,CAAcC,UAAd,CAAyBC;AAH9B,KAVS;AAevBC,IAAAA,GAAG,EAAE;AACHhB,MAAAA,OAAO,EAAE,MADN;AAEHE,MAAAA,aAAa,YAAKH,KAAK,CAACI,OAAN,CAAcC,IAAnB,OAFV;AAGHC,MAAAA,UAAU,YAAKN,KAAK,CAACI,OAAN,CAAcC,IAAnB,OAHP;AAIHE,MAAAA,mBAAmB,EAAE,gBAJlB;AAKHC,MAAAA,cAAc,EAAE,eALb;AAMHU,MAAAA,SAAS,EAAElB,KAAK,CAACI,OAAN,CAAcC,IANtB;AAOHI,MAAAA,YAAY,EAAET,KAAK,CAACI,OAAN,CAAcC;AAPzB,KAfkB;AAwBvBc,IAAAA,eAAe,EAAE;AACfC,MAAAA,eAAe,EAAE,CADF;AAEfC,MAAAA,aAAa,EAAE;AAFA;AAxBM,GAAL;AAAA,CAApB;;eA6Be,wBAAWtB,MAAX,EAAmBrB,MAAnB,C","sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\nimport { withStyles } from '@material-ui/core/styles';\nimport classNames from 'classnames';\n\nimport TextField from '@material-ui/core/TextField';\nimport List from '@material-ui/core/List';\nimport ListItem from '@material-ui/core/ListItem';\nimport ListItemText from '@material-ui/core/ListItemText';\nimport MenuItem from '@material-ui/core/MenuItem';\nimport Menu from '@material-ui/core/Menu';\nimport { Checkbox } from '@pie-lib/config-ui';\n\n\nexport class Config extends React.Component {\n static propTypes = {\n classes: PropTypes.object.isRequired,\n className: PropTypes.string,\n config: PropTypes.object,\n onModelChanged: PropTypes.func\n };\n\n static defaultProps = {};\n\n\n changeLabel = ({ target }) => {\n this.props.onModelChanged({ choicesLabel: target.value });\n };\n\n\n render() {\n const { classes, className, config, spellCheck} = this.props;\n\n\n return (\n <div className={classNames(classes.config, className)}>\n <div className={classes.configuration}>\n <TextField\n className={classes.label}\n InputLabelProps={{\n shrink: true\n }}\n label=\"Label\"\n value={config.choicesLabel}\n onChange={this.changeLabel}\n spellCheck={spellCheck}\n />\n </div>\n </div>\n );\n }\n}\nconst styles = theme => ({\n configuration: {\n display: 'grid',\n alignItems: 'center',\n gridColumnGap: `${theme.spacing.unit}px`,\n gridRowGap: `${theme.spacing.unit}px`,\n gridTemplateColumns: 'repeat(2, 1fr)',\n justifyContent: 'space-between',\n marginBottom: theme.spacing.unit\n },\n choiceConfig: {\n width: '100%',\n maxWidth: 360,\n backgroundColor: theme.palette.background.paper\n },\n row: {\n display: 'grid',\n gridColumnGap: `${theme.spacing.unit}px`,\n gridRowGap: `${theme.spacing.unit}px`,\n gridTemplateColumns: 'repeat(2, 1fr)',\n justifyContent: 'space-between',\n marginTop: theme.spacing.unit,\n marginBottom: theme.spacing.unit\n },\n shuffleCheckbox: {\n gridColumnStart: 2,\n gridColumnEnd: 2\n }\n});\nexport default withStyles(styles)(Config);\n"],"file":"config.js"}
|