react-ui-basics 0.0.117 → 0.0.121

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.
@@ -4,7 +4,7 @@ import ReactCreateElement from './ReactCreateElement.js';
4
4
  import PropTypes from 'prop-types';
5
5
  import TextField from './TextField.js';
6
6
  import FilteredList, { getLabel } from './FilteredList.js';
7
- import { orNoop, preventDefault, stopPropagation, getRandomId, isFunction, isObject, addEventListener, DOCUMENT, removeEventListener, UNDEFINED, classNames, ref, isString, continuousIncludes } from './Tools.js';
7
+ import { isString, orNoop, preventDefault, stopPropagation, getRandomId, isFunction, isObject, addEventListener, DOCUMENT, removeEventListener, UNDEFINED, classNames, ref, continuousIncludes } from './Tools.js';
8
8
  import Button from './Button.js';
9
9
  import MaterialIcon from './MaterialIcon.js';
10
10
 
@@ -48,6 +48,9 @@ var findParent = function findParent(el, tag) {
48
48
  }
49
49
  return null;
50
50
  };
51
+ function isMultipleSelect(mode) {
52
+ return mode === MODE_MULTIPLE || mode === MODE_MULTIPLE_AUTO || mode === MODE_INLINE_MULTIPLE || mode === MODE_MULTIPLE_MINI || mode === MODE_MULTIPLE_MINI_INLINE;
53
+ }
51
54
  var AutocompleteSelect = function (_React$Component) {
52
55
  _inherits(AutocompleteSelect, _React$Component);
53
56
  var _super = _createSuper(AutocompleteSelect);
@@ -55,16 +58,23 @@ var AutocompleteSelect = function (_React$Component) {
55
58
  var _this;
56
59
  _classCallCheck(this, AutocompleteSelect);
57
60
  _this = _super.call(this, props);
58
- _this.initSelected = function (_ref2) {
59
- var value = _ref2.value;
61
+ _this.initSelected = function (_ref2, _ref3) {
62
+ var value = _ref2.value,
63
+ mode = _ref2.mode,
64
+ allowCustom = _ref2.allowCustom;
65
+ var _ref3$filterValue = _ref3.filterValue,
66
+ filterValue = _ref3$filterValue === void 0 ? '' : _ref3$filterValue;
60
67
  _this.setState({
61
- selected: prepareSelected(value)
68
+ selected: prepareSelected(value),
69
+ filterValue: allowCustom && isString(value) && !isMultipleSelect(mode) ? value : filterValue
62
70
  });
63
71
  };
64
72
  _this.onClickOutside = function () {
65
- var allowCustom = _this.props.allowCustom;
73
+ var _this$props = _this.props,
74
+ allowCustom = _this$props.allowCustom,
75
+ required = _this$props.required;
66
76
  var filterValue = _this.state.filterValue;
67
- if (allowCustom && !!filterValue) {
77
+ if (allowCustom && (!!filterValue || !required)) {
68
78
  _this.onSelect();
69
79
  }
70
80
  _this.setState({
@@ -76,32 +86,32 @@ var AutocompleteSelect = function (_React$Component) {
76
86
  orNoop(_this.props.onCancel)();
77
87
  };
78
88
  _this.onSelect = function (selectedId) {
79
- var _this$props = _this.props,
80
- mode = _this$props.mode,
81
- required = _this$props.required,
82
- allowCustom = _this$props.allowCustom,
83
- onSelect = _this$props.onSelect,
84
- onChange = _this$props.onChange,
85
- defaultValue = _this$props["default"];
89
+ var _this$props2 = _this.props,
90
+ mode = _this$props2.mode,
91
+ required = _this$props2.required,
92
+ allowCustom = _this$props2.allowCustom,
93
+ onSelect = _this$props2.onSelect,
94
+ onChange = _this$props2.onChange,
95
+ defaultValue = _this$props2["default"];
86
96
  var filterValue = _this.state.filterValue;
87
- if (selectedId == null && !!filterValue && allowCustom && !_this.input.check()) selectedId = filterValue;
97
+ if (selectedId == null && (!!filterValue || !required) && allowCustom && !_this.input.check()) selectedId = filterValue;
88
98
  var isSelected = selectedId != null;
89
- var isMultipleSelect = mode === MODE_MULTIPLE || mode === MODE_MULTIPLE_AUTO || mode === MODE_INLINE_MULTIPLE || mode === MODE_MULTIPLE_MINI || mode === MODE_MULTIPLE_MINI_INLINE;
99
+ var isMultiSelect = isMultipleSelect(mode);
90
100
  var selected = _objectSpread2({}, _this.state.selected);
91
- if (selected[selectedId] && (defaultValue || isMultipleSelect)) {
101
+ if (selected[selectedId] && (defaultValue || isMultiSelect)) {
92
102
  delete selected[selectedId];
93
103
  if (defaultValue && Object.keys(selected).length === 0) selected[defaultValue] = defaultValue;
94
- } else if (isSelected && isMultipleSelect) {
104
+ } else if (isSelected && isMultiSelect) {
95
105
  selected[selectedId] = selectedId;
96
106
  } else if (isSelected) {
97
107
  selected = _defineProperty({}, selectedId, selectedId);
98
108
  }
99
109
  var errored = required && Object.keys(selected) === 0;
100
- var isActive = mode === MODE_MULTIPLE_MINI_INLINE || isMultipleSelect && isSelected;
110
+ var isActive = mode === MODE_MULTIPLE_MINI_INLINE || isMultiSelect && isSelected;
101
111
  _this.setState({
102
112
  isActive: isActive,
103
113
  selected: selected,
104
- filterValue: isMultipleSelect ? '' : allowCustom && selectedId === filterValue ? filterValue : '',
114
+ filterValue: isMultiSelect ? '' : allowCustom ? selectedId || '' : '',
105
115
  errored: errored
106
116
  });
107
117
  if (isActive && _this.input) _this.input.getInput().focus();
@@ -118,7 +128,7 @@ var AutocompleteSelect = function (_React$Component) {
118
128
  });
119
129
  orNoop(_this.props.onSelect)(null);
120
130
  orNoop(_this.props.onChange)([]);
121
- _this.initSelected(_this.props);
131
+ _this.initSelected(_this.props, _this.state);
122
132
  };
123
133
  _this.remove = function (id) {
124
134
  var result = _objectSpread2(_objectSpread2({}, _this.state), {}, {
@@ -172,11 +182,12 @@ var AutocompleteSelect = function (_React$Component) {
172
182
  });
173
183
  }
174
184
  }
185
+ this.initSelected(this.props, this.state);
175
186
  }
176
187
  }, {
177
188
  key: "componentDidUpdate",
178
189
  value: function componentDidUpdate(prevProps, prevState, snapshot) {
179
- if (this.props.value !== prevProps.value) this.initSelected(this.props);
190
+ if (this.props.value !== prevProps.value) this.initSelected(this.props, this.state);
180
191
  }
181
192
  }, {
182
193
  key: "componentWillUnmount",
@@ -188,22 +199,23 @@ var AutocompleteSelect = function (_React$Component) {
188
199
  key: "render",
189
200
  value: function render() {
190
201
  var _this3 = this;
191
- var _this$props2 = this.props,
192
- childComponent = _this$props2.childComponent,
193
- childProps = _this$props2.childProps,
194
- withArrow = _this$props2.withArrow,
195
- withFilter = _this$props2.withFilter,
196
- withReset = _this$props2.withReset,
197
- _filter = _this$props2.filter,
198
- label = _this$props2.label,
199
- inputLabel = _this$props2.inputLabel,
200
- mode = _this$props2.mode,
201
- selectedMode = _this$props2.selectedMode,
202
- prefilter = _this$props2.prefilter,
203
- className = _this$props2.className,
204
- scrollToValue = _this$props2.scrollToValue,
205
- scroll = _this$props2.scroll,
206
- required = _this$props2.required;
202
+ var _this$props3 = this.props,
203
+ childComponent = _this$props3.childComponent,
204
+ childProps = _this$props3.childProps,
205
+ withArrow = _this$props3.withArrow,
206
+ withFilter = _this$props3.withFilter,
207
+ withReset = _this$props3.withReset,
208
+ _filter = _this$props3.filter,
209
+ label = _this$props3.label,
210
+ inputLabel = _this$props3.inputLabel,
211
+ mode = _this$props3.mode,
212
+ selectedMode = _this$props3.selectedMode,
213
+ prefilter = _this$props3.prefilter,
214
+ className = _this$props3.className,
215
+ scrollToValue = _this$props3.scrollToValue,
216
+ scroll = _this$props3.scroll,
217
+ required = _this$props3.required,
218
+ allowCustom = _this$props3.allowCustom;
207
219
  var id = this.props.id || this.randomId;
208
220
  var selectedComponent = this.props.selectedComponent || childComponent;
209
221
  var _this$state = this.state,
@@ -216,11 +228,11 @@ var AutocompleteSelect = function (_React$Component) {
216
228
  if (this.props.isActive !== UNDEFINED) {
217
229
  isActive = this.props.isActive;
218
230
  }
219
- var _this$props3 = this.props,
220
- _this$props3$data = _this$props3.data,
221
- data = _this$props3$data === void 0 ? [] : _this$props3$data,
222
- _this$props3$labels = _this$props3.labels,
223
- labels = _this$props3$labels === void 0 ? {} : _this$props3$labels;
231
+ var _this$props4 = this.props,
232
+ _this$props4$data = _this$props4.data,
233
+ data = _this$props4$data === void 0 ? [] : _this$props4$data,
234
+ _this$props4$labels = _this$props4.labels,
235
+ labels = _this$props4$labels === void 0 ? {} : _this$props4$labels;
224
236
  if (this.state.data) data = this.state.data;
225
237
  if (!Array.isArray(data)) data = [];
226
238
  var selectedIds = Object.values(selected);
@@ -355,8 +367,9 @@ var AutocompleteSelect = function (_React$Component) {
355
367
  ) {
356
368
  _this3.setState({
357
369
  isActive: false,
358
- filterValue: ''
370
+ filterValue: isMultipleSelect(mode) ? '' : allowCustom ? filterValue : ''
359
371
  });
372
+ _this3.input.getInput().blur();
360
373
  _this3.onCancel();
361
374
  }
362
375
  }
@@ -1 +1 @@
1
- {"version":3,"file":"AutocompleteSelect.js","sources":["../src/react-ui-basics/AutocompleteSelect.js"],"sourcesContent":["import React from 'react';\nimport ReactCreateElement from './ReactCreateElement';\nimport PropTypes from 'prop-types';\nimport './AutocompleteSelect.css'\nimport TextField from \"./TextField\";\nimport FilteredList, {getLabel} from \"./FilteredList\";\nimport {\n classNames,\n continuousIncludes,\n getRandomId,\n ref,\n orNoop,\n preventDefault,\n stopPropagation,\n DOCUMENT,\n addEventListener,\n removeEventListener,\n isObject,\n isFunction,\n isString, UNDEFINED\n} from \"./Tools\";\nimport Button from \"./Button\";\nimport MaterialIcon from \"./MaterialIcon\";\n\nexport const MODE_DEFAULT = 'default';\nexport const MODE_INLINE = 'inline';\nexport const MODE_INLINE_MULTIPLE = 'inline-multiple';\nexport const MODE_MULTIPLE_AUTO = 'multiple-auto';\nexport const MODE_MULTIPLE = 'multiple';\nexport const MODE_MULTIPLE_MINI = 'multiple-mini';\nexport const MODE_MINI = 'mini';\nexport const MODE_MULTIPLE_MINI_INLINE = 'multiple-mini-inline';\n\n\nconst DummyChild = ({id, label, dataConsumer}) => {\n orNoop(dataConsumer)(label || id);\n return <div className={`DummyChild`}>{label || id}</div>\n};\n\nconst prepareSelected = (value) => {\n let result;\n if (value != null) {\n if (Array.isArray(value))\n result = value.reduce((map, obj) => {\n map[obj] = obj;\n return map;\n }, {});\n else if (isObject(value))\n result = value;\n else if (value)\n result = {[value]: value};\n else\n result = {}\n } else {\n result = {};\n }\n return result;\n};\n\nconst findParent = (el, tag) => {\n if (el != null) {\n const tagName = el.tagName;\n if (tagName && tagName.toUpperCase() === tag.toUpperCase()) {\n return el;\n } else {\n return findParent(el.parentNode, tag)\n }\n }\n return null;\n}\n\nclass AutocompleteSelect extends React.Component {\n\n static propTypes = {\n mode: PropTypes.oneOf([MODE_DEFAULT, MODE_INLINE, MODE_MULTIPLE, MODE_MULTIPLE_AUTO, MODE_MULTIPLE_MINI, MODE_MULTIPLE_MINI_INLINE, MODE_INLINE_MULTIPLE, MODE_MINI])\n };\n\n constructor(props) {\n super(props);\n const that = this;\n that.state = {\n selected: prepareSelected(props.value),\n isActive: !!props.focused,\n\n };\n that.randomId = getRandomId('acs-');\n\n const {data, getSelected} = props;\n isFunction(data) && data(data => that.setState({data}));\n\n getSelected && getSelected(() => Object.values(that.state.selected));\n }\n\n componentDidMount() {\n addEventListener(DOCUMENT, 'mousedown', this.listener = (e) => {\n if (this.state.isActive && this.el && !this.el.contains(e.target)) {\n this.onClickOutside()\n }\n })\n if (this.props.required) {\n const form = findParent(this.el.parentNode, 'form')\n if (form) {\n addEventListener(this.submitButton = form.querySelector('button[type=submit]'), 'click', this.formSubmitListener = (e) => {\n const errored = Object.keys(this.state.selected).length === 0;\n this.setState({errored: errored})\n })\n }\n }\n }\n\n componentDidUpdate(prevProps, prevState, snapshot) {\n if (this.props.value !== prevProps.value)\n this.initSelected(this.props)\n }\n\n initSelected = ({value}) => {\n this.setState({selected: prepareSelected(value)});\n };\n\n componentWillUnmount() {\n removeEventListener(DOCUMENT, 'mousedown', this.listener)\n removeEventListener(this.submitButton, 'click', this.formSubmitListener)\n }\n\n static defaultProps = {\n childComponent: DummyChild,\n withArrow: true,\n withFilter: true,\n withReset: false,\n scrollToValue: false,\n mode: MODE_DEFAULT,\n selectedMode: 'full',\n };\n\n render() {\n const {\n childComponent,\n childProps,\n withArrow,\n withFilter,\n withReset,\n filter,\n label,\n inputLabel,\n mode,\n selectedMode,\n prefilter,\n className,\n scrollToValue,\n scroll,\n required,\n } = this.props;\n const id = this.props.id || this.randomId;\n const selectedComponent = this.props.selectedComponent || childComponent;\n const {selected = {}, filterValue = '', errored} = this.state;\n let {isActive} = this.state;\n if (this.props.isActive !== UNDEFINED) {\n isActive = this.props.isActive\n }\n let {data = [], labels = {}} = this.props;\n if (this.state.data)\n data = this.state.data;\n\n if (!Array.isArray(data))\n data = [];\n\n const selectedIds = Object.values(selected);\n const hasSelected = selectedIds.length !== 0;\n const setActive = (e) => {\n stopPropagation(e);\n this.setState({isActive: true}, () => (scrollToValue && selectedIds.length > 0) && this.list.scrollTo(selectedIds[0]));\n };\n const toggle = (e) => {\n if (!this.state.isActive) {\n setActive(e);\n } else {\n stopPropagation(e);\n this.setState({isActive: false});\n }\n };\n\n const isInline = mode === MODE_INLINE || mode === MODE_INLINE_MULTIPLE || mode === MODE_MULTIPLE_MINI_INLINE;\n\n const list = <FilteredList className={classNames(isActive && 'visible')}\n ref={ref('list', this)}\n filter={it => {\n if (!it) return false;\n if (prefilter && !prefilter(it)) return false;\n if (!filterValue) return true;\n\n const f = filterValue.toLowerCase();\n if (filter) return filter(it, f);\n\n let value = (isString(it) ? it : (it.name || it.label || '')).toLowerCase();\n return continuousIncludes(value, f);\n }}\n scroll={scroll}\n inline={isInline}\n nextProvider={ref('next', this)}\n prevProvider={ref('prev', this)}\n selectedProvider={ref('getSelected', this)}\n resetProvider={ref('reset', this)}\n onSelect={this.onSelect}\n selected={selected}\n childComponent={childComponent}\n childProps={childProps}\n data={data}\n labels={labels}\n />;\n\n return (\n <div id={id} className={classNames('AutocompleteSelect', mode, className, withFilter ? 'withFilter' : 'withoutFilter', isActive && 'active', errored && 'errored')}\n ref={ref('el', this)}>\n {label && <label className={classNames(`label`, (hasSelected || filterValue) && 'active', hasSelected && 'hasSelected')}\n htmlFor={'f-' + id}\n onClick={() => mode === MODE_MULTIPLE_MINI_INLINE && toggle()}\n >\n {label}\n {required && ' *'}\n {withArrow && <span className=\"arrow\"/>}\n </label>}\n\n {(!isActive || mode === MODE_MULTIPLE || mode === MODE_INLINE_MULTIPLE || mode === MODE_MULTIPLE_MINI_INLINE || mode === MODE_MULTIPLE_AUTO || !withFilter) && hasSelected && (\n <div\n className={classNames('selected',\n !label && 'nolabel',\n (mode === MODE_MULTIPLE_MINI || mode === MODE_MINI || mode === MODE_MULTIPLE_MINI_INLINE) && 'clickable',\n selectedMode)}\n onClick={toggle}>\n\n {selectedMode === 'full' && selectedIds.map(id =>\n <div className=\"value\" key={id}>\n {React.createElement(selectedComponent, {...childProps, id, label: getLabel(labels, id), onClick: setActive})}\n <div className=\"button remove\" onClick={e => {\n stopPropagation(e);\n this.remove(id);\n }}>\n <MaterialIcon icon=\"close\"/>\n </div>\n </div>\n )}\n {selectedMode === 'inline' && selectedIds.map(id =>\n <React.Fragment key={id}>\n {React.createElement(selectedComponent, {...childProps, id, label: getLabel(labels, id), onClick: setActive})}\n {id !== selectedIds[selectedIds.length - 1] && ', '}\n </React.Fragment>\n )}\n {!label && withArrow && <span className=\"arrow\"/>}\n {withReset && <Button className=\"reset\" raised={false} onClick={this.clean}>\n <MaterialIcon icon=\"close\"/>\n </Button>}\n </div>\n )}\n {(isActive || (!hasSelected && mode !== MODE_MULTIPLE_MINI_INLINE) || mode === MODE_MULTIPLE || (mode === MODE_MULTIPLE_AUTO && selectedIds.length > 1) || mode === MODE_INLINE_MULTIPLE) && (\n <div className={`input`}>\n {withFilter && <TextField autoComplete=\"off\" id={'f-' + id}\n ref={ref('input', this)}\n focused={isActive}\n value={filterValue}\n label={inputLabel}\n onChange={this.onChange}\n onFocus={e => this.setState({isActive: true})}\n check={this.props.filterCheck}\n onKeyDown={e => {\n const keyCode = e.keyCode;\n if (keyCode === 38/*up*/) {\n preventDefault(e);\n this.prev();\n } else if (keyCode === 40/*down*/) {\n preventDefault(e);\n this.next();\n } else if (keyCode === 13/*enter*/) {\n preventDefault(e);\n this.onSelect(this.getSelected())\n } else if (keyCode === 8/*backspace*/ || keyCode === 46/*delete*/) {\n this.reset()\n } else if (keyCode === 27/*esc*/) {\n this.setState({isActive: false, filterValue: ''});\n this.onCancel();\n }\n // console.log('key pressed:', e.keyCode)\n }}\n />}\n {!withFilter && inputLabel && <label>{inputLabel}</label>}\n {(mode === MODE_MULTIPLE_MINI_INLINE || mode === MODE_MULTIPLE || mode === MODE_MULTIPLE_AUTO || mode === MODE_INLINE_MULTIPLE) && list}\n </div>\n )}\n {!(mode === MODE_MULTIPLE_MINI_INLINE || mode === MODE_MULTIPLE || mode === MODE_MULTIPLE_AUTO || mode === MODE_INLINE_MULTIPLE) && list}\n </div>\n )\n }\n\n onClickOutside = () => {\n const {allowCustom} = this.props;\n const {filterValue} = this.state;\n if(allowCustom && !!filterValue){\n this.onSelect()\n }\n\n this.setState({isActive: false});\n\n this.onCancel();\n };\n\n onCancel = () => {\n orNoop(this.props.onCancel)()\n };\n\n onSelect = (selectedId) => {\n const {mode, required, allowCustom, onSelect, onChange, default: defaultValue} = this.props;\n const {filterValue} = this.state;\n\n if (selectedId == null && !!filterValue && allowCustom && !this.input.check())\n selectedId = filterValue;\n\n\n const isSelected = selectedId != null;\n const isMultipleSelect = mode === MODE_MULTIPLE || mode === MODE_MULTIPLE_AUTO || mode === MODE_INLINE_MULTIPLE || mode === MODE_MULTIPLE_MINI || mode === MODE_MULTIPLE_MINI_INLINE;\n\n let selected = {...this.state.selected};\n if (selected[selectedId] && (defaultValue || isMultipleSelect)) {\n delete selected[selectedId];\n if (defaultValue && Object.keys(selected).length === 0)\n selected[defaultValue] = defaultValue;\n } else if (isSelected && (isMultipleSelect)) {\n selected[selectedId] = selectedId;\n } else if (isSelected) {\n selected = {[selectedId]: selectedId};\n }\n\n const errored = required && Object.keys(selected) === 0;\n\n const isActive = mode === MODE_MULTIPLE_MINI_INLINE || (isMultipleSelect && isSelected)\n\n this.setState({\n isActive: isActive,\n selected: selected,\n filterValue: isMultipleSelect ? '' : (allowCustom && selectedId === filterValue ? filterValue : ''),\n errored,\n });\n\n if (isActive && this.input)\n this.input.getInput().focus()\n\n orNoop(onSelect)(selectedId);\n orNoop(onChange)(Object.values(selected));\n };\n\n clean = (e) => {\n preventDefault(e);\n stopPropagation(e);\n\n this.setState({\n isActive: false,\n selected: {},\n filterValue: '',\n });\n\n orNoop(this.props.onSelect)(null);\n orNoop(this.props.onChange)([]);\n\n this.initSelected(this.props);\n };\n\n remove = (id) => {\n let result = {\n ...this.state,\n selected: {...this.state.selected}\n };\n delete result.selected[id];\n this.setState(result);\n orNoop(this.props.onChange)(Object.values(result.selected));\n };\n\n onChange = (event) => {\n const value = event.target.value;\n this.setState({filterValue: value});\n }\n}\n\nexport default AutocompleteSelect;\n"],"names":["MODE_DEFAULT","MODE_INLINE","MODE_INLINE_MULTIPLE","MODE_MULTIPLE_AUTO","MODE_MULTIPLE","MODE_MULTIPLE_MINI","MODE_MINI","MODE_MULTIPLE_MINI_INLINE","DummyChild","id","label","dataConsumer","orNoop","prepareSelected","value","result","Array","isArray","reduce","map","obj","isObject","findParent","el","tag","tagName","toUpperCase","parentNode","AutocompleteSelect","props","initSelected","setState","selected","onClickOutside","allowCustom","filterValue","state","onSelect","isActive","onCancel","selectedId","mode","required","onChange","defaultValue","input","check","isSelected","isMultipleSelect","Object","keys","length","errored","getInput","focus","values","clean","e","preventDefault","stopPropagation","remove","event","target","that","focused","randomId","getRandomId","data","getSelected","isFunction","addEventListener","DOCUMENT","listener","contains","form","submitButton","querySelector","formSubmitListener","prevProps","prevState","snapshot","removeEventListener","childComponent","childProps","withArrow","withFilter","withReset","filter","inputLabel","selectedMode","prefilter","className","scrollToValue","scroll","selectedComponent","UNDEFINED","labels","selectedIds","hasSelected","setActive","list","scrollTo","toggle","isInline","classNames","ref","it","f","toLowerCase","isString","name","continuousIncludes","React","createElement","getLabel","onClick","filterCheck","keyCode","prev","next","reset","Component","propTypes","PropTypes","oneOf","defaultProps"],"mappings":"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"}
1
+ {"version":3,"file":"AutocompleteSelect.js","sources":["../src/react-ui-basics/AutocompleteSelect.js"],"sourcesContent":["import React from 'react';\nimport ReactCreateElement from './ReactCreateElement';\nimport PropTypes from 'prop-types';\nimport './AutocompleteSelect.css'\nimport TextField from \"./TextField\";\nimport FilteredList, {getLabel} from \"./FilteredList\";\nimport {\n classNames,\n continuousIncludes,\n getRandomId,\n ref,\n orNoop,\n preventDefault,\n stopPropagation,\n DOCUMENT,\n addEventListener,\n removeEventListener,\n isObject,\n isFunction,\n isString, UNDEFINED\n} from \"./Tools\";\nimport Button from \"./Button\";\nimport MaterialIcon from \"./MaterialIcon\";\n\nexport const MODE_DEFAULT = 'default';\nexport const MODE_INLINE = 'inline';\nexport const MODE_INLINE_MULTIPLE = 'inline-multiple';\nexport const MODE_MULTIPLE_AUTO = 'multiple-auto';\nexport const MODE_MULTIPLE = 'multiple';\nexport const MODE_MULTIPLE_MINI = 'multiple-mini';\nexport const MODE_MINI = 'mini';\nexport const MODE_MULTIPLE_MINI_INLINE = 'multiple-mini-inline';\n\n\nconst DummyChild = ({id, label, dataConsumer}) => {\n orNoop(dataConsumer)(label || id);\n return <div className={`DummyChild`}>{label || id}</div>\n};\n\nconst prepareSelected = (value) => {\n let result;\n if (value != null) {\n if (Array.isArray(value))\n result = value.reduce((map, obj) => {\n map[obj] = obj;\n return map;\n }, {});\n else if (isObject(value))\n result = value;\n else if (value)\n result = {[value]: value};\n else\n result = {}\n } else {\n result = {};\n }\n return result;\n};\n\nconst findParent = (el, tag) => {\n if (el != null) {\n const tagName = el.tagName;\n if (tagName && tagName.toUpperCase() === tag.toUpperCase()) {\n return el;\n } else {\n return findParent(el.parentNode, tag)\n }\n }\n return null;\n}\n\nfunction isMultipleSelect(mode) {\n return mode === MODE_MULTIPLE || mode === MODE_MULTIPLE_AUTO || mode === MODE_INLINE_MULTIPLE || mode === MODE_MULTIPLE_MINI || mode === MODE_MULTIPLE_MINI_INLINE;\n}\n\nclass AutocompleteSelect extends React.Component {\n\n static propTypes = {\n mode: PropTypes.oneOf([MODE_DEFAULT, MODE_INLINE, MODE_MULTIPLE, MODE_MULTIPLE_AUTO, MODE_MULTIPLE_MINI, MODE_MULTIPLE_MINI_INLINE, MODE_INLINE_MULTIPLE, MODE_MINI])\n };\n\n constructor(props) {\n super(props);\n const that = this;\n that.state = {\n selected: prepareSelected(props.value),\n isActive: !!props.focused,\n\n };\n that.randomId = getRandomId('acs-');\n\n const {data, getSelected} = props;\n isFunction(data) && data(data => that.setState({data}));\n\n getSelected && getSelected(() => Object.values(that.state.selected));\n }\n\n componentDidMount() {\n addEventListener(DOCUMENT, 'mousedown', this.listener = (e) => {\n if (this.state.isActive && this.el && !this.el.contains(e.target)) {\n this.onClickOutside()\n }\n })\n if (this.props.required) {\n const form = findParent(this.el.parentNode, 'form')\n if (form) {\n addEventListener(this.submitButton = form.querySelector('button[type=submit]'), 'click', this.formSubmitListener = (e) => {\n const errored = Object.keys(this.state.selected).length === 0;\n this.setState({errored: errored})\n })\n }\n }\n this.initSelected(this.props, this.state)\n }\n\n componentDidUpdate(prevProps, prevState, snapshot) {\n if (this.props.value !== prevProps.value)\n this.initSelected(this.props, this.state)\n }\n\n initSelected = ({value, mode, allowCustom}, {filterValue = ''}) => {\n this.setState({\n selected: prepareSelected(value),\n filterValue: allowCustom && isString(value) && !isMultipleSelect(mode) ? value : filterValue,\n });\n };\n\n componentWillUnmount() {\n removeEventListener(DOCUMENT, 'mousedown', this.listener)\n removeEventListener(this.submitButton, 'click', this.formSubmitListener)\n }\n\n static defaultProps = {\n childComponent: DummyChild,\n withArrow: true,\n withFilter: true,\n withReset: false,\n scrollToValue: false,\n mode: MODE_DEFAULT,\n selectedMode: 'full',\n };\n\n render() {\n const {\n childComponent,\n childProps,\n withArrow,\n withFilter,\n withReset,\n filter,\n label,\n inputLabel,\n mode,\n selectedMode,\n prefilter,\n className,\n scrollToValue,\n scroll,\n required,\n allowCustom,\n } = this.props;\n const id = this.props.id || this.randomId;\n const selectedComponent = this.props.selectedComponent || childComponent;\n const {selected = {}, filterValue = '', errored} = this.state;\n let {isActive} = this.state;\n if (this.props.isActive !== UNDEFINED) {\n isActive = this.props.isActive\n }\n let {data = [], labels = {}} = this.props;\n if (this.state.data)\n data = this.state.data;\n\n if (!Array.isArray(data))\n data = [];\n\n const selectedIds = Object.values(selected);\n const hasSelected = selectedIds.length !== 0;\n const setActive = (e) => {\n stopPropagation(e);\n this.setState({isActive: true}, () => (scrollToValue && selectedIds.length > 0) && this.list.scrollTo(selectedIds[0]));\n };\n const toggle = (e) => {\n if (!this.state.isActive) {\n setActive(e);\n } else {\n stopPropagation(e);\n this.setState({isActive: false});\n }\n };\n\n const isInline = mode === MODE_INLINE || mode === MODE_INLINE_MULTIPLE || mode === MODE_MULTIPLE_MINI_INLINE;\n\n const list = <FilteredList className={classNames(isActive && 'visible')}\n ref={ref('list', this)}\n filter={it => {\n if (!it) return false;\n if (prefilter && !prefilter(it)) return false;\n if (!filterValue) return true;\n\n const f = filterValue.toLowerCase();\n if (filter) return filter(it, f);\n\n let value = (isString(it) ? it : (it.name || it.label || '')).toLowerCase();\n return continuousIncludes(value, f);\n }}\n scroll={scroll}\n inline={isInline}\n nextProvider={ref('next', this)}\n prevProvider={ref('prev', this)}\n selectedProvider={ref('getSelected', this)}\n resetProvider={ref('reset', this)}\n onSelect={this.onSelect}\n selected={selected}\n childComponent={childComponent}\n childProps={childProps}\n data={data}\n labels={labels}\n />;\n\n return (\n <div id={id} className={classNames('AutocompleteSelect', mode, className, withFilter ? 'withFilter' : 'withoutFilter', isActive && 'active', errored && 'errored')}\n ref={ref('el', this)}>\n {label && <label className={classNames(`label`, (hasSelected || filterValue) && 'active', hasSelected && 'hasSelected')}\n htmlFor={'f-' + id}\n onClick={() => mode === MODE_MULTIPLE_MINI_INLINE && toggle()}\n >\n {label}\n {required && ' *'}\n {withArrow && <span className=\"arrow\"/>}\n </label>}\n\n {(!isActive || mode === MODE_MULTIPLE || mode === MODE_INLINE_MULTIPLE || mode === MODE_MULTIPLE_MINI_INLINE || mode === MODE_MULTIPLE_AUTO || !withFilter) && hasSelected && (\n <div\n className={classNames('selected',\n !label && 'nolabel',\n (mode === MODE_MULTIPLE_MINI || mode === MODE_MINI || mode === MODE_MULTIPLE_MINI_INLINE) && 'clickable',\n selectedMode)}\n onClick={toggle}>\n\n {selectedMode === 'full' && selectedIds.map(id =>\n <div className=\"value\" key={id}>\n {React.createElement(selectedComponent, {...childProps, id, label: getLabel(labels, id), onClick: setActive})}\n <div className=\"button remove\" onClick={e => {\n stopPropagation(e);\n this.remove(id);\n }}>\n <MaterialIcon icon=\"close\"/>\n </div>\n </div>\n )}\n {selectedMode === 'inline' && selectedIds.map(id =>\n <React.Fragment key={id}>\n {React.createElement(selectedComponent, {...childProps, id, label: getLabel(labels, id), onClick: setActive})}\n {id !== selectedIds[selectedIds.length - 1] && ', '}\n </React.Fragment>\n )}\n {!label && withArrow && <span className=\"arrow\"/>}\n {withReset && <Button className=\"reset\" raised={false} onClick={this.clean}>\n <MaterialIcon icon=\"close\"/>\n </Button>}\n </div>\n )}\n {(isActive || (!hasSelected && mode !== MODE_MULTIPLE_MINI_INLINE) || mode === MODE_MULTIPLE || (mode === MODE_MULTIPLE_AUTO && selectedIds.length > 1) || mode === MODE_INLINE_MULTIPLE) && (\n <div className={`input`}>\n {withFilter && <TextField autoComplete=\"off\" id={'f-' + id}\n ref={ref('input', this)}\n focused={isActive}\n value={filterValue}\n label={inputLabel}\n onChange={this.onChange}\n onFocus={e => this.setState({isActive: true})}\n check={this.props.filterCheck}\n onKeyDown={e => {\n const keyCode = e.keyCode;\n if (keyCode === 38/*up*/) {\n preventDefault(e);\n this.prev();\n } else if (keyCode === 40/*down*/) {\n preventDefault(e);\n this.next();\n } else if (keyCode === 13/*enter*/) {\n preventDefault(e);\n this.onSelect(this.getSelected())\n } else if (keyCode === 8/*backspace*/ || keyCode === 46/*delete*/) {\n this.reset()\n } else if (keyCode === 27/*esc*/) {\n this.setState({\n isActive: false,\n filterValue: isMultipleSelect(mode) ? '' : (allowCustom ? filterValue : ''),\n });\n this.input.getInput().blur()\n this.onCancel();\n }\n // console.log('key pressed:', e.keyCode)\n }}\n />}\n {!withFilter && inputLabel && <label>{inputLabel}</label>}\n {(mode === MODE_MULTIPLE_MINI_INLINE || mode === MODE_MULTIPLE || mode === MODE_MULTIPLE_AUTO || mode === MODE_INLINE_MULTIPLE) && list}\n </div>\n )}\n {!(mode === MODE_MULTIPLE_MINI_INLINE || mode === MODE_MULTIPLE || mode === MODE_MULTIPLE_AUTO || mode === MODE_INLINE_MULTIPLE) && list}\n </div>\n )\n }\n\n onClickOutside = () => {\n const {allowCustom, required} = this.props;\n const {filterValue} = this.state;\n if (allowCustom && (!!filterValue || !required)) {\n this.onSelect()\n }\n\n this.setState({isActive: false});\n\n this.onCancel();\n };\n\n onCancel = () => {\n orNoop(this.props.onCancel)()\n };\n\n onSelect = (selectedId) => {\n const {mode, required, allowCustom, onSelect, onChange, default: defaultValue} = this.props;\n const {filterValue} = this.state;\n\n if (selectedId == null && (!!filterValue || !required) && allowCustom && !this.input.check())\n selectedId = filterValue;\n\n\n const isSelected = selectedId != null;\n const isMultiSelect = isMultipleSelect(mode);\n\n let selected = {...this.state.selected};\n if (selected[selectedId] && (defaultValue || isMultiSelect)) {\n delete selected[selectedId];\n if (defaultValue && Object.keys(selected).length === 0)\n selected[defaultValue] = defaultValue;\n } else if (isSelected && (isMultiSelect)) {\n selected[selectedId] = selectedId;\n } else if (isSelected) {\n selected = {[selectedId]: selectedId};\n }\n\n const errored = required && Object.keys(selected) === 0;\n\n const isActive = mode === MODE_MULTIPLE_MINI_INLINE || (isMultiSelect && isSelected)\n\n this.setState({\n isActive: isActive,\n selected: selected,\n filterValue: isMultiSelect ? '' : (allowCustom ? selectedId || '' : ''),\n errored,\n });\n\n if (isActive && this.input)\n this.input.getInput().focus()\n\n orNoop(onSelect)(selectedId);\n orNoop(onChange)(Object.values(selected));\n };\n\n clean = (e) => {\n preventDefault(e);\n stopPropagation(e);\n\n this.setState({\n isActive: false,\n selected: {},\n filterValue: '',\n });\n\n orNoop(this.props.onSelect)(null);\n orNoop(this.props.onChange)([]);\n\n this.initSelected(this.props, this.state);\n };\n\n remove = (id) => {\n let result = {\n ...this.state,\n selected: {...this.state.selected}\n };\n delete result.selected[id];\n this.setState(result);\n orNoop(this.props.onChange)(Object.values(result.selected));\n };\n\n onChange = (event) => {\n const value = event.target.value;\n this.setState({filterValue: value});\n }\n}\n\nexport default AutocompleteSelect;\n"],"names":["MODE_DEFAULT","MODE_INLINE","MODE_INLINE_MULTIPLE","MODE_MULTIPLE_AUTO","MODE_MULTIPLE","MODE_MULTIPLE_MINI","MODE_MINI","MODE_MULTIPLE_MINI_INLINE","DummyChild","id","label","dataConsumer","orNoop","prepareSelected","value","result","Array","isArray","reduce","map","obj","isObject","findParent","el","tag","tagName","toUpperCase","parentNode","isMultipleSelect","mode","AutocompleteSelect","props","initSelected","allowCustom","filterValue","setState","selected","isString","onClickOutside","required","state","onSelect","isActive","onCancel","selectedId","onChange","defaultValue","input","check","isSelected","isMultiSelect","Object","keys","length","errored","getInput","focus","values","clean","e","preventDefault","stopPropagation","remove","event","target","that","focused","randomId","getRandomId","data","getSelected","isFunction","addEventListener","DOCUMENT","listener","contains","form","submitButton","querySelector","formSubmitListener","prevProps","prevState","snapshot","removeEventListener","childComponent","childProps","withArrow","withFilter","withReset","filter","inputLabel","selectedMode","prefilter","className","scrollToValue","scroll","selectedComponent","UNDEFINED","labels","selectedIds","hasSelected","setActive","list","scrollTo","toggle","isInline","classNames","ref","it","f","toLowerCase","name","continuousIncludes","React","createElement","getLabel","onClick","filterCheck","keyCode","prev","next","reset","blur","Component","propTypes","PropTypes","oneOf","defaultProps"],"mappings":"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"}