react-ui-basics 0.0.175 → 0.0.178

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.
Files changed (162) hide show
  1. package/Animated.js.map +1 -1
  2. package/AutocompleteSelect.js.map +1 -1
  3. package/Button.js.map +1 -1
  4. package/CalendarMonthView.css +20 -0
  5. package/CalendarMonthView.d.ts +12 -0
  6. package/CalendarMonthView.js +52 -0
  7. package/CalendarMonthView.js.map +1 -0
  8. package/Checkbox.js.map +1 -1
  9. package/CircleProgress.js.map +1 -1
  10. package/CommonFields.js.map +1 -1
  11. package/DNDContainer.js.map +1 -1
  12. package/DNDDraggable.js.map +1 -1
  13. package/DNDDroppable.js.map +1 -1
  14. package/DatePicker.css +93 -0
  15. package/DatePicker.d.ts +32 -0
  16. package/DatePicker.js +116 -0
  17. package/DatePicker.js.map +1 -0
  18. package/DateTools.d.ts +39 -0
  19. package/DateTools.js +73 -0
  20. package/DateTools.js.map +1 -0
  21. package/Dialog.js.map +1 -1
  22. package/DropFileInput.js.map +1 -1
  23. package/DroppableHorizontalList.js.map +1 -1
  24. package/DroppableList.js.map +1 -1
  25. package/Dropzone.js.map +1 -1
  26. package/FilteredList.js.map +1 -1
  27. package/FloatingActionButton.js.map +1 -1
  28. package/FormUploadProgress.js.map +1 -1
  29. package/ImageGallery.js.map +1 -1
  30. package/MaterialIcon.js.map +1 -1
  31. package/Modal.js.map +1 -1
  32. package/ModalMenu.js.map +1 -1
  33. package/ReactConstants.js.map +1 -1
  34. package/ReactCreateElement.js.map +1 -1
  35. package/ReadyListener.js.map +1 -1
  36. package/Scrollable.js.map +1 -1
  37. package/ScrollableTable.js.map +1 -1
  38. package/Size.js.map +1 -1
  39. package/Snackbar.js.map +1 -1
  40. package/SpinningProgress.js.map +1 -1
  41. package/Switch.js.map +1 -1
  42. package/Table.js.map +1 -1
  43. package/Tabs.css +65 -0
  44. package/Tabs.d.ts +22 -0
  45. package/TextField.js.map +1 -1
  46. package/Tools.d.ts +2 -2
  47. package/Tools.js.map +1 -1
  48. package/bundle.css +726 -587
  49. package/index.js +4 -0
  50. package/index.js.map +1 -1
  51. package/package.json +1 -1
  52. package/router/HistoryTools.js.map +1 -1
  53. package/router/Link.js.map +1 -1
  54. package/router/NavLink.js.map +1 -1
  55. package/router/Route.js.map +1 -1
  56. package/router/index.js.map +1 -1
  57. package/src/Animated.css +7 -0
  58. package/src/Animated.js +219 -0
  59. package/src/Animated.scss +8 -0
  60. package/src/AutocompleteSelect.css +256 -0
  61. package/src/AutocompleteSelect.js +473 -0
  62. package/src/AutocompleteSelect.scss +322 -0
  63. package/src/Button.css +138 -0
  64. package/src/Button.js +104 -0
  65. package/src/Button.scss +177 -0
  66. package/src/CalendarMonthView.css +20 -0
  67. package/src/CalendarMonthView.scss +25 -0
  68. package/src/CalendarMonthView.tsx +80 -0
  69. package/src/Checkbox.css +56 -0
  70. package/src/Checkbox.js +52 -0
  71. package/src/Checkbox.scss +87 -0
  72. package/src/CircleProgress.css +11 -0
  73. package/src/CircleProgress.js +38 -0
  74. package/src/CircleProgress.scss +13 -0
  75. package/src/CommonFields.js +21 -0
  76. package/src/DNDContainer.css +26 -0
  77. package/src/DNDContainer.js +263 -0
  78. package/src/DNDContainer.scss +33 -0
  79. package/src/DNDDraggable.js +55 -0
  80. package/src/DNDDroppable.js +58 -0
  81. package/src/DatePicker.css +93 -0
  82. package/src/DatePicker.scss +118 -0
  83. package/src/DatePicker.tsx +179 -0
  84. package/src/DateTools.ts +85 -0
  85. package/src/Dialog.css +36 -0
  86. package/src/Dialog.js +160 -0
  87. package/src/Dialog.scss +42 -0
  88. package/src/DropFileInput.css +24 -0
  89. package/src/DropFileInput.js +45 -0
  90. package/src/DropFileInput.scss +28 -0
  91. package/src/DroppableHorizontalList.js +190 -0
  92. package/src/DroppableList.css +14 -0
  93. package/src/DroppableList.js +201 -0
  94. package/src/DroppableList.scss +27 -0
  95. package/src/Dropzone.css +54 -0
  96. package/src/Dropzone.js +140 -0
  97. package/src/Dropzone.scss +66 -0
  98. package/src/FilteredList.css +68 -0
  99. package/src/FilteredList.js +196 -0
  100. package/src/FilteredList.scss +86 -0
  101. package/src/FloatingActionButton.css +20 -0
  102. package/src/FloatingActionButton.js +35 -0
  103. package/src/FloatingActionButton.scss +25 -0
  104. package/src/FormUploadProgress.css +61 -0
  105. package/src/FormUploadProgress.js +87 -0
  106. package/src/FormUploadProgress.scss +78 -0
  107. package/src/ImageGallery.css +196 -0
  108. package/src/ImageGallery.js +935 -0
  109. package/src/ImageGallery.scss +256 -0
  110. package/src/MaterialIcon.js +1837 -0
  111. package/src/Modal.css +61 -0
  112. package/src/Modal.js +160 -0
  113. package/src/Modal.scss +73 -0
  114. package/src/ModalMenu.css +30 -0
  115. package/src/ModalMenu.js +59 -0
  116. package/src/ModalMenu.scss +36 -0
  117. package/src/ReactConstants.ts +42 -0
  118. package/src/ReactCreateElement.js +5 -0
  119. package/src/ReadyListener.js +53 -0
  120. package/src/ResizeObserver.ts +50 -0
  121. package/src/Scrollable.css +80 -0
  122. package/src/Scrollable.js +388 -0
  123. package/src/Scrollable.scss +100 -0
  124. package/src/ScrollableTable.css +6 -0
  125. package/src/ScrollableTable.scss +12 -0
  126. package/src/ScrollableTable.tsx +39 -0
  127. package/src/Size.js +56 -0
  128. package/src/Snackbar.css +40 -0
  129. package/src/Snackbar.js +71 -0
  130. package/src/Snackbar.scss +47 -0
  131. package/src/SpinningProgress.css +49 -0
  132. package/src/SpinningProgress.js +19 -0
  133. package/src/SpinningProgress.scss +57 -0
  134. package/src/Switch.css +69 -0
  135. package/src/Switch.js +54 -0
  136. package/src/Switch.scss +73 -0
  137. package/src/Table.css +94 -0
  138. package/src/Table.scss +121 -0
  139. package/src/Table.tsx +360 -0
  140. package/src/Tabs.css +65 -0
  141. package/src/Tabs.scss +77 -0
  142. package/src/Tabs.tsx +63 -0
  143. package/src/TextField.css +122 -0
  144. package/src/TextField.js +162 -0
  145. package/src/TextField.scss +160 -0
  146. package/src/Tools.test.js +105 -0
  147. package/src/Tools.ts +231 -0
  148. package/src/global.css +1 -0
  149. package/src/global.scss +6 -0
  150. package/src/index.js +84 -0
  151. package/src/router/HistoryTools.js +32 -0
  152. package/src/router/Link.js +27 -0
  153. package/src/router/NavLink.js +25 -0
  154. package/src/router/README.md +55 -0
  155. package/src/router/Route.js +209 -0
  156. package/src/router/Route.test.js +139 -0
  157. package/src/router/index.js +14 -0
  158. package/src/store/ProxyTools.js +91 -0
  159. package/src/store/ProxyTools.test.js +97 -0
  160. package/src/store/Store.ts +91 -0
  161. package/store/ProxyTools.js.map +1 -1
  162. package/store/Store.js.map +1 -1
@@ -0,0 +1,473 @@
1
+ import ReactConstants from "./../ReactConstants";
2
+ import {clientHeight as __clientHeight, clientWidth as __clientWidth, createAccessor as __createAccessor, data as __data, height as __height, left as __left, length as __length, pageX as __pageX, pageY as __pageY, props as __props, scrollLeft as __scrollLeft, scrollTop as __scrollTop, state as __state, style as __style, target as __target, top as __top, value as __value, width as __width} from "./../CommonFields";
3
+ import React from 'react';
4
+ import {toConsumableArray as __toConsumableArray} from "./../_virtual/_rollupPluginBabelHelpers";
5
+ import {extends as __extends} from "./../_virtual/_rollupPluginBabelHelpers";
6
+ import {inherits as __inherits} from "./../_virtual/_rollupPluginBabelHelpers";
7
+ import './AutocompleteSelect.css';
8
+ import ReactCreateElement from './ReactCreateElement';
9
+ import PropTypes from 'prop-types';
10
+ import './AutocompleteSelect.css'
11
+ import TextField from "./TextField";
12
+ import FilteredList, {getLabel} from "./FilteredList";
13
+ import {
14
+ classNames,
15
+ continuousIncludes,
16
+ getRandomId,
17
+ ref,
18
+ orNoop,
19
+ preventDefault,
20
+ stopPropagation,
21
+ DOCUMENT,
22
+ addEventListener,
23
+ removeEventListener,
24
+ isObject,
25
+ isFunction,
26
+ isString, UNDEFINED, memo
27
+ } from "./Tools";
28
+ import Button from "./Button";
29
+ import MaterialIcon from "./MaterialIcon";
30
+ import {PureComponent} from "./ReactConstants";
31
+
32
+ export const MODE_DEFAULT = 'default';
33
+ export const MODE_INLINE = 'inline';
34
+ export const MODE_INLINE_MULTIPLE = 'inline-multiple';
35
+ export const MODE_MULTIPLE_AUTO = 'multiple-auto';
36
+ export const MODE_MULTIPLE = 'multiple';
37
+ export const MODE_MULTIPLE_MINI = 'multiple-mini';
38
+ export const MODE_MINI = 'mini';
39
+ export const MODE_MULTIPLE_MINI_INLINE = 'multiple-mini-inline';
40
+
41
+
42
+ const DummyChild = ({id, label, dataConsumer, onClick}) => {
43
+ orNoop(dataConsumer)(label || id);
44
+ return <div className={`DummyChild`} onClick={onClick}>{label || id}</div>
45
+ };
46
+
47
+ const prepareSelected = (value) => {
48
+ let result;
49
+ if (value != null) {
50
+ if (Array.isArray(value))
51
+ result = value.reduce((map, obj) => {
52
+ map[obj] = obj;
53
+ return map;
54
+ }, {});
55
+ else if (isObject(value))
56
+ result = value;
57
+ else if (value)
58
+ result = {[value]: value};
59
+ else
60
+ result = {}
61
+ } else {
62
+ result = {};
63
+ }
64
+ return result;
65
+ };
66
+
67
+ const findParent = (el, tag) => {
68
+ if (el != null) {
69
+ const tagName = el.tagName;
70
+ if (tagName && tagName.toUpperCase() === tag.toUpperCase()) {
71
+ return el;
72
+ } else {
73
+ return findParent(el.parentNode, tag)
74
+ }
75
+ }
76
+ return null;
77
+ }
78
+
79
+ function isMultipleSelect(mode) {
80
+ return mode === MODE_MULTIPLE || mode === MODE_MULTIPLE_AUTO || mode === MODE_INLINE_MULTIPLE || mode === MODE_MULTIPLE_MINI || mode === MODE_MULTIPLE_MINI_INLINE;
81
+ }
82
+
83
+ class AutocompleteSelect extends PureComponent {
84
+
85
+ static propTypes = {
86
+ mode: PropTypes.oneOf([MODE_DEFAULT, MODE_INLINE, MODE_MULTIPLE, MODE_MULTIPLE_AUTO, MODE_MULTIPLE_MINI, MODE_MULTIPLE_MINI_INLINE, MODE_INLINE_MULTIPLE, MODE_MINI])
87
+ };
88
+
89
+ constructor(props) {
90
+ super(props);
91
+ const that = this;
92
+ that.state = {
93
+ selected: prepareSelected(__value(props)),
94
+ isActive: !!props.focused,
95
+
96
+ };
97
+ that.randomId = getRandomId('acs-');
98
+
99
+ const {data, getSelected} = props;
100
+ isFunction(data) && data(data => that.setState({data}));
101
+
102
+ getSelected && getSelected(() => Object.values(__state(that).selected));
103
+ }
104
+
105
+ componentDidMount() {
106
+ addEventListener(DOCUMENT, 'mousedown', this.listener = (e) => {
107
+ if (__state(this).isActive && this.el && !this.el.contains(__target(e))) {
108
+ this.onClickOutside()
109
+ }
110
+ })
111
+ if (__props(this).required) {
112
+ const form = findParent(this.el.parentNode, 'form')
113
+ if (form) {
114
+ addEventListener(this.submitButton = form.querySelector('button[type=submit]'), 'click', this.formSubmitListener = (e) => {
115
+ const errored = Object.keys(__state(this).selected).length === 0;
116
+ this.setState({errored: errored})
117
+ })
118
+ }
119
+ }
120
+ this.initSelected(__props(this), __state(this))
121
+ }
122
+
123
+ componentDidUpdate(prevProps, prevState, snapshot) {
124
+ if (__props(this).value !== __value(prevProps))
125
+ this.initSelected(__props(this), __state(this))
126
+ }
127
+
128
+ initSelected = ({value, mode, allowCustom}, {filterValue = ''}) => {
129
+ this.setState({
130
+ selected: prepareSelected(value),
131
+ filterValue: allowCustom && isString(value) && !isMultipleSelect(mode) ? value : filterValue,
132
+ });
133
+ };
134
+
135
+ componentWillUnmount() {
136
+ removeEventListener(DOCUMENT, 'mousedown', this.listener)
137
+ removeEventListener(this.submitButton, 'click', this.formSubmitListener)
138
+ }
139
+
140
+ static defaultProps = {
141
+ childComponent: DummyChild,
142
+ withArrow: true,
143
+ withFilter: true,
144
+ withReset: false,
145
+ scrollToValue: false,
146
+ mode: MODE_DEFAULT,
147
+ selectedMode: 'full',
148
+ removeIcon: <MaterialIcon icon="close"/>,
149
+ };
150
+
151
+ createFilter = memo((prefilter, filterValue, filterValueTrimmed, filter) => it => {
152
+ if (!it) return false;
153
+ if (prefilter && !prefilter(it)) return false;
154
+ if (!filterValue) return true;
155
+
156
+ if (filter) return filter(it, filterValueTrimmed);
157
+
158
+ let value = (isString(it) ? it : (it.name || it.label || '')).toLowerCase().trim();
159
+ return continuousIncludes(value, filterValueTrimmed);
160
+ }
161
+ )
162
+
163
+ render() {
164
+ const {
165
+ childComponent,
166
+ childProps,
167
+ withArrow,
168
+ withFilter,
169
+ withReset,
170
+ filter,
171
+ label,
172
+ inputLabel,
173
+ mode,
174
+ selectedMode,
175
+ prefilter,
176
+ className,
177
+ scrollToValue,
178
+ scroll,
179
+ required,
180
+ allowCustom,
181
+ inlineSelected,
182
+ removeIcon,
183
+ } = __props(this);
184
+ const id = __props(this).id || this.randomId;
185
+ const selectedComponent = __props(this).selectedComponent || childComponent;
186
+ const {selected = {}, filterValue = '', errored} = __state(this);
187
+ let {isActive} = __state(this);
188
+ if (__props(this).isActive !== UNDEFINED) {
189
+ isActive = __props(this).isActive
190
+ }
191
+ let {data = [], labels = {}} = __props(this);
192
+ if (__state(this).data)
193
+ data = __state(this).data;
194
+
195
+ if (!Array.isArray(data))
196
+ data = [];
197
+
198
+ const selectedIds = Object.values(selected);
199
+ const hasSelected = __length(selectedIds) !== 0;
200
+ const setActive = (e) => {
201
+ stopPropagation(e);
202
+ this.setState({isActive: true}, () => (scrollToValue && __length(selectedIds) > 0) && this.list.scrollTo(selectedIds[0]));
203
+ };
204
+ const toggle = (e) => {
205
+ if (!__state(this).isActive) {
206
+ setActive(e);
207
+ } else {
208
+ stopPropagation(e);
209
+ this.setState({isActive: false});
210
+ }
211
+ };
212
+
213
+ const isInline = mode === MODE_INLINE || mode === MODE_INLINE_MULTIPLE || mode === MODE_MULTIPLE_MINI_INLINE;
214
+ const filterValueTrimmed = filterValue.trim();
215
+ const dataFiltered = allowCustom ? [filterValueTrimmed, ...data.filter(suggestion => suggestion !== filterValueTrimmed)] : data;
216
+
217
+ const filterFunction = this.createFilter(prefilter, filterValue, filterValueTrimmed.toLowerCase(), filter)
218
+ return (
219
+ <div id={id}
220
+ className={classNames(
221
+ 'AutocompleteSelect',
222
+ mode,
223
+ isMultipleSelect(mode) && 'multi',
224
+ className,
225
+ withFilter ? 'withFilter' : 'withoutFilter',
226
+ isActive && 'active',
227
+ errored && 'errored',
228
+ inlineSelected && 'inlineSelected',
229
+ hasSelected && 'hasSelected',
230
+ )}
231
+ ref={ref('el', this)}>
232
+ {label && <label className={classNames(`label`, (hasSelected || filterValue) && 'active', hasSelected && 'hasSelected')}
233
+ htmlFor={'f-' + id}
234
+ onClick={() => {
235
+ if (mode === MODE_MULTIPLE_MINI_INLINE || !isActive) {
236
+ toggle();
237
+ }
238
+ }}
239
+ >
240
+ {label}
241
+ {required && ' *'}
242
+ {withArrow && <span className="arrow"/>}
243
+ </label>}
244
+
245
+ {(!isActive || mode === MODE_MULTIPLE || mode === MODE_INLINE_MULTIPLE || mode === MODE_MULTIPLE_MINI_INLINE || mode === MODE_MULTIPLE_AUTO || !withFilter) && !inlineSelected && hasSelected && (
246
+ <div
247
+ className={classNames('selected',
248
+ !label && 'nolabel',
249
+ (mode === MODE_MULTIPLE_MINI || mode === MODE_MINI || mode === MODE_MULTIPLE_MINI_INLINE) && 'clickable',
250
+ selectedMode)}
251
+ onClick={toggle}>
252
+
253
+ {selectedMode === 'full' && selectedIds.map(id =>
254
+ <div className="value" key={id}>
255
+ {React.createElement(selectedComponent, {...childProps, id, label: getLabel(labels, id), [ReactConstants[6]]: setActive})}
256
+ <div className="button remove" onClick={e => {
257
+ stopPropagation(e);
258
+ this.remove(id);
259
+ }}>
260
+ {removeIcon}
261
+ </div>
262
+ </div>
263
+ )}
264
+ {selectedMode === 'inline' && selectedIds.map(id =>
265
+ <React.Fragment key={id}>
266
+ {React.createElement(selectedComponent, {...childProps, id, label: getLabel(labels, id), [ReactConstants[6]]: setActive})}
267
+ {id !== selectedIds[__length(selectedIds) - 1] && ', '}
268
+ </React.Fragment>
269
+ )}
270
+ {!label && withArrow && <span className="arrow"/>}
271
+ {withReset && <Button className="reset" raised={false} onClick={this.clean}>
272
+ {removeIcon}
273
+ </Button>}
274
+ </div>
275
+ )}
276
+
277
+ {inlineSelected && hasSelected && <>
278
+ {selectedMode === 'full' && selectedIds.map(id =>
279
+ <div className="value" key={id}>
280
+ {React.createElement(selectedComponent, {...childProps, id, label: getLabel(labels, id), [ReactConstants[6]]: setActive})}
281
+ <div className="button remove" onClick={e => {
282
+ stopPropagation(e);
283
+ this.remove(id);
284
+ }}>
285
+ {removeIcon}
286
+ </div>
287
+ </div>
288
+ )}
289
+ {selectedMode === 'inline' && selectedIds.map(id =>
290
+ <React.Fragment key={id}>
291
+ {React.createElement(selectedComponent, {...childProps, id, label: getLabel(labels, id), [ReactConstants[6]]: setActive})}
292
+ {id !== selectedIds[__length(selectedIds) - 1] && ', '}
293
+ </React.Fragment>
294
+ )}
295
+ </>}
296
+
297
+ {(isActive || (!hasSelected && mode !== MODE_MULTIPLE_MINI_INLINE) || mode === MODE_MULTIPLE || (mode === MODE_MULTIPLE_AUTO && __length(selectedIds) > 1) || mode === MODE_INLINE_MULTIPLE) && (
298
+ <div className={`input`} data-value={filterValue}>
299
+ {withFilter && <TextField autoComplete="new-password" id={'f-' + id}
300
+ ref={ref('input', this)}
301
+ focused={isActive}
302
+ value={filterValue}
303
+ label={inputLabel}
304
+ onChange={this[ReactConstants[7]]}
305
+ onFocus={e => this.setState({isActive: true})}
306
+ check={__props(this).filterCheck}
307
+ onKeyDown={e => {
308
+ const keyCode = e.keyCode;
309
+ if (keyCode === 38/*up*/) {
310
+ preventDefault(e);
311
+ this.prev();
312
+ } else if (keyCode === 40/*down*/) {
313
+ preventDefault(e);
314
+ this.next();
315
+ } else if (keyCode === 13/*enter*/) {
316
+ preventDefault(e);
317
+ this.onSelect(this.getSelected())
318
+ } else if (keyCode === 9/*tab*/) {
319
+ this.onSelect(this.getSelected())
320
+ } else if (keyCode === 8/*backspace*/) {
321
+ if (!filterValue && (__length(selectedIds) !== 0) && isMultipleSelect(mode)) {
322
+ this.remove(selectedIds[__length(selectedIds) - 1]);
323
+ }
324
+ this.reset()
325
+ } else if (keyCode === 46/*delete*/) {
326
+ this.reset()
327
+ } else if (keyCode === 27/*esc*/) {
328
+ this.setState({
329
+ isActive: false,
330
+ filterValue: isMultipleSelect(mode) ? '' : (allowCustom ? filterValue : ''),
331
+ });
332
+ this.input.getInput().blur()
333
+ this.onCancel();
334
+ }
335
+ // console.log('key pressed:', e.keyCode)
336
+ }}
337
+ />}
338
+ {!withFilter && inputLabel && <label>{inputLabel}</label>}
339
+ </div>
340
+ )}
341
+
342
+ <FilteredList className={classNames(isActive && 'visible')}
343
+ ref={ref('list', this)}
344
+ filter={filterFunction}
345
+ selectSingle={!allowCustom}
346
+ scroll={scroll}
347
+ inline={isInline}
348
+ nextProvider={ref('next', this)}
349
+ prevProvider={ref('prev', this)}
350
+ selectedProvider={ref('getSelected', this)}
351
+ resetProvider={ref('reset', this)}
352
+ onSelect={this.onSelect}
353
+ selected={selected}
354
+ childComponent={childComponent}
355
+ childProps={childProps}
356
+ data={dataFiltered}
357
+ labels={labels}
358
+ />
359
+ </div>
360
+ )
361
+ }
362
+
363
+ onClickOutside = () => {
364
+ const {allowCustom, required} = __props(this);
365
+ const {filterValue} = __state(this);
366
+ if (allowCustom && (!!filterValue || !required)) {
367
+ this.onSelect()
368
+ }
369
+
370
+ this.setState({isActive: false});
371
+
372
+ this.onCancel();
373
+ };
374
+
375
+ onCancel = () => {
376
+ orNoop(__props(this).onCancel)()
377
+ };
378
+
379
+ onSelect = (selectedId) => {
380
+ const {mode, required, allowCustom, onSelect, onChange, default: defaultValue} = __props(this);
381
+ const {filterValue, selected: currentSelection} = __state(this);
382
+ const {labels = {}} = __props(this);
383
+
384
+ if (selectedId == null && (!!filterValue || !required) && allowCustom && (!this.input || !this.input.check()))
385
+ selectedId = filterValue.trim();
386
+
387
+ const isMultiSelect = isMultipleSelect(mode);
388
+
389
+ if (!selectedId && isMultiSelect) {
390
+ selectedId = null;
391
+ }
392
+
393
+ // debugger
394
+
395
+ const isSelected = selectedId != null;
396
+
397
+ let selected = {...currentSelection};
398
+ if (selected[selectedId] && (defaultValue || isMultiSelect)) {
399
+ delete selected[selectedId];
400
+ if (defaultValue && Object.keys(selected).length === 0)
401
+ selected[defaultValue] = defaultValue;
402
+ } else if (isSelected && (isMultiSelect)) {
403
+ selected[selectedId] = selectedId;
404
+ } else if (isSelected) {
405
+ selected = {[selectedId]: selectedId};
406
+ }
407
+
408
+ const errored = required && Object.keys(selected) === 0;
409
+
410
+ const isActive = mode === MODE_MULTIPLE_MINI_INLINE || (isMultiSelect && isSelected)
411
+
412
+ let customValue = '';
413
+ if (allowCustom && selectedId) {
414
+ let label
415
+ if (isFunction(labels))
416
+ label = labels(selectedId)
417
+ else
418
+ label = labels[selectedId]
419
+
420
+ if (label && isString(label))
421
+ customValue = label
422
+ }
423
+
424
+ let filterValueWithCustom = isMultiSelect ? '' : customValue;
425
+ this.setState({
426
+ isActive: isActive,
427
+ selected: selected,
428
+ filterValue: filterValueWithCustom,
429
+ errored,
430
+ });
431
+
432
+ if (isActive && this.input)
433
+ this.input.getInput().focus()
434
+
435
+ orNoop(onSelect)(selectedId);
436
+ orNoop(onChange)(Object.values(selected));
437
+ };
438
+
439
+ clean = (e) => {
440
+ preventDefault(e);
441
+ stopPropagation(e);
442
+
443
+ this.setState({
444
+ isActive: false,
445
+ selected: {},
446
+ filterValue: '',
447
+ });
448
+
449
+ orNoop(__props(this).onSelect)(null);
450
+ orNoop(__props(this)[ReactConstants[7]])([]);
451
+
452
+ this.initSelected(__props(this), __state(this));
453
+ };
454
+
455
+ remove = (id) => {
456
+ let result = {
457
+ ...__state(this),
458
+ selected: {...__state(this).selected},
459
+ filterValue: '',
460
+ };
461
+ delete result.selected[id];
462
+ this.setState(result);
463
+ orNoop(__props(this)[ReactConstants[7]])(Object.values(result.selected));
464
+ };
465
+
466
+ onChange = (event) => {
467
+ const value = __target(event).value;
468
+ this.setState({filterValue: value});
469
+ __props(this).onFilterInputChange?.(value);
470
+ }
471
+ }
472
+
473
+ export default AutocompleteSelect;