@activecollab/components 2.0.317 → 2.0.318
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/dist/cjs/components/Autocomplete/Autocomplete.js +104 -17
- package/dist/cjs/components/Autocomplete/Autocomplete.js.map +1 -1
- package/dist/esm/components/Autocomplete/Autocomplete.d.ts.map +1 -1
- package/dist/esm/components/Autocomplete/Autocomplete.js +82 -21
- package/dist/esm/components/Autocomplete/Autocomplete.js.map +1 -1
- package/dist/index.js +104 -17
- package/dist/index.js.map +1 -1
- package/dist/index.min.js +1 -1
- package/dist/index.min.js.map +1 -1
- package/package.json +1 -1
|
@@ -30,6 +30,63 @@ function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e =
|
|
|
30
30
|
function isOptionGroup(item) {
|
|
31
31
|
return item.options !== undefined;
|
|
32
32
|
}
|
|
33
|
+
var collectLeafIds = function collectLeafIds(opts) {
|
|
34
|
+
return opts.reduce(function (acc, opt) {
|
|
35
|
+
return isOptionGroup(opt) ? [...acc, ...opt.options.map(function (o) {
|
|
36
|
+
return o.id;
|
|
37
|
+
})] : [...acc, opt.id];
|
|
38
|
+
}, []);
|
|
39
|
+
};
|
|
40
|
+
|
|
41
|
+
// Inserts an option at its alphabetical position among the options that share
|
|
42
|
+
// its checked state (checked items live at the top, so a checked option lands
|
|
43
|
+
// among the checked ones, sorted).
|
|
44
|
+
var insertAmongSameState = function insertAmongSameState(list, item, isChecked) {
|
|
45
|
+
var checked = isChecked(item.id);
|
|
46
|
+
var index = list.findIndex(function (o) {
|
|
47
|
+
return isChecked(o.id) === checked && o.name.localeCompare(item.name) > 0;
|
|
48
|
+
});
|
|
49
|
+
if (index === -1) {
|
|
50
|
+
index = checked ? list.reduce(function (acc, o, i) {
|
|
51
|
+
return isChecked(o.id) ? i + 1 : acc;
|
|
52
|
+
}, 0) : list.length;
|
|
53
|
+
}
|
|
54
|
+
return [...list.slice(0, index), item, ...list.slice(index)];
|
|
55
|
+
};
|
|
56
|
+
|
|
57
|
+
// Frozen options keep their order (checking/unchecking never moves them).
|
|
58
|
+
// Options that aren't frozen yet are slotted in among the checked items,
|
|
59
|
+
// alphabetically — that's how a freshly added option finds its place.
|
|
60
|
+
var reconcileFlat = function reconcileFlat(prev, next, frozen, isChecked) {
|
|
61
|
+
var nextById = new Map(next.map(function (o) {
|
|
62
|
+
return [o.id, o];
|
|
63
|
+
}));
|
|
64
|
+
var base = prev.filter(function (o) {
|
|
65
|
+
return frozen.has(o.id) && nextById.has(o.id);
|
|
66
|
+
}).map(function (o) {
|
|
67
|
+
return nextById.get(o.id);
|
|
68
|
+
});
|
|
69
|
+
var toPlace = next.filter(function (o) {
|
|
70
|
+
return !frozen.has(o.id);
|
|
71
|
+
});
|
|
72
|
+
return toPlace.reduce(function (acc, item) {
|
|
73
|
+
return insertAmongSameState(acc, item, isChecked);
|
|
74
|
+
}, base);
|
|
75
|
+
};
|
|
76
|
+
var reconcileOrder = function reconcileOrder(prev, next, frozen, isChecked) {
|
|
77
|
+
if (!next.every(isOptionGroup) || !prev.every(isOptionGroup)) {
|
|
78
|
+
return reconcileFlat(prev, next, frozen, isChecked);
|
|
79
|
+
}
|
|
80
|
+
var prevGroupById = new Map(prev.map(function (group) {
|
|
81
|
+
return [group.id, group];
|
|
82
|
+
}));
|
|
83
|
+
return next.map(function (group) {
|
|
84
|
+
var _prevGroupById$get$op, _prevGroupById$get;
|
|
85
|
+
return _objectSpread(_objectSpread({}, group), {}, {
|
|
86
|
+
options: reconcileFlat((_prevGroupById$get$op = (_prevGroupById$get = prevGroupById.get(group.id)) === null || _prevGroupById$get === void 0 ? void 0 : _prevGroupById$get.options) !== null && _prevGroupById$get$op !== void 0 ? _prevGroupById$get$op : [], group.options, frozen, isChecked)
|
|
87
|
+
});
|
|
88
|
+
});
|
|
89
|
+
};
|
|
33
90
|
var Autocomplete = exports.Autocomplete = function Autocomplete(_ref) {
|
|
34
91
|
var type = _ref.type,
|
|
35
92
|
_ref$options = _ref.options,
|
|
@@ -70,6 +127,11 @@ var Autocomplete = exports.Autocomplete = function Autocomplete(_ref) {
|
|
|
70
127
|
}
|
|
71
128
|
return [selected];
|
|
72
129
|
}, [selected]);
|
|
130
|
+
|
|
131
|
+
// Ids whose position is fixed. Starts with everything present on open; a
|
|
132
|
+
// freshly added option joins this set once it becomes checked, so unchecking
|
|
133
|
+
// it later won't move it. Everything frozen keeps its order on every re-sort.
|
|
134
|
+
var frozenRef = (0, _react.useRef)(new Set(collectLeafIds(options)));
|
|
73
135
|
var handleSort = (0, _react.useCallback)(function (opts) {
|
|
74
136
|
var _opts$;
|
|
75
137
|
if (keepSameOptionsOrder) {
|
|
@@ -97,38 +159,32 @@ var Autocomplete = exports.Autocomplete = function Autocomplete(_ref) {
|
|
|
97
159
|
};
|
|
98
160
|
if (isGrouped) {
|
|
99
161
|
return opts.map(function (group) {
|
|
100
|
-
var sortedGroupOptions = group.options.sort(sortOptions);
|
|
101
162
|
return _objectSpread(_objectSpread({}, group), {}, {
|
|
102
|
-
options:
|
|
163
|
+
options: [...group.options].sort(sortOptions)
|
|
103
164
|
});
|
|
104
165
|
});
|
|
105
166
|
} else {
|
|
106
|
-
return opts.sort(sortOptions);
|
|
167
|
+
return [...opts].sort(sortOptions);
|
|
107
168
|
}
|
|
108
|
-
},
|
|
109
|
-
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
110
|
-
[mixedOptions, selectedOptions]);
|
|
169
|
+
}, [keepSameOptionsOrder, selectedOptions, mixedOptions]);
|
|
111
170
|
var sortList = (0, _react.useCallback)(function (options) {
|
|
112
171
|
var _options$;
|
|
113
172
|
if (disabledInternalSort) {
|
|
114
|
-
return handleSort(
|
|
173
|
+
return handleSort(options);
|
|
115
174
|
}
|
|
175
|
+
var alphaSort = function alphaSort(a, b) {
|
|
176
|
+
return sortDirection === "asc" ? a.name.localeCompare(b.name) : b.name.localeCompare(a.name);
|
|
177
|
+
};
|
|
116
178
|
var isGrouped = Array.isArray((_options$ = options[0]) === null || _options$ === void 0 ? void 0 : _options$.options);
|
|
117
179
|
if (isGrouped) {
|
|
118
180
|
var sortedOptions = options.map(function (group) {
|
|
119
|
-
var sortedGroupOptions = group.options.sort(function (a, b) {
|
|
120
|
-
return sortDirection === "asc" ? a.name.localeCompare(b.name) : b.name.localeCompare(a.name);
|
|
121
|
-
});
|
|
122
181
|
return _objectSpread(_objectSpread({}, group), {}, {
|
|
123
|
-
options: handleSort(
|
|
182
|
+
options: handleSort([...group.options].sort(alphaSort))
|
|
124
183
|
});
|
|
125
184
|
});
|
|
126
185
|
return handleSort(sortedOptions);
|
|
127
186
|
} else {
|
|
128
|
-
|
|
129
|
-
return sortDirection === "asc" ? a.name.localeCompare(b.name) : b.name.localeCompare(a.name);
|
|
130
|
-
});
|
|
131
|
-
return handleSort(_sortedOptions);
|
|
187
|
+
return handleSort([...options].sort(alphaSort));
|
|
132
188
|
}
|
|
133
189
|
}, [sortDirection, disabledInternalSort, handleSort]);
|
|
134
190
|
var _useState = (0, _react.useState)(function () {
|
|
@@ -137,10 +193,41 @@ var Autocomplete = exports.Autocomplete = function Autocomplete(_ref) {
|
|
|
137
193
|
_useState2 = _slicedToArray(_useState, 2),
|
|
138
194
|
sortedList = _useState2[0],
|
|
139
195
|
setSortedList = _useState2[1];
|
|
196
|
+
|
|
197
|
+
// The order is established on open. Options present then keep their place for
|
|
198
|
+
// the whole session — checking/unchecking never reorders them. Options added
|
|
199
|
+
// afterwards are slotted in among the checked items, alphabetically. The
|
|
200
|
+
// selection key is a primitive so a fresh `selected = []` default can't loop.
|
|
201
|
+
var isInitialSortRef = (0, _react.useRef)(true);
|
|
202
|
+
var selectedKey = selectedOptions.join(",");
|
|
140
203
|
(0, _react.useEffect)(function () {
|
|
141
|
-
|
|
204
|
+
if (isInitialSortRef.current) {
|
|
205
|
+
isInitialSortRef.current = false;
|
|
206
|
+
return;
|
|
207
|
+
}
|
|
208
|
+
if (keepSameOptionsOrder) {
|
|
209
|
+
setSortedList(sortList(options));
|
|
210
|
+
return;
|
|
211
|
+
}
|
|
212
|
+
if (sortedList.length === 0) {
|
|
213
|
+
frozenRef.current = new Set(collectLeafIds(options));
|
|
214
|
+
setSortedList(sortList(options));
|
|
215
|
+
return;
|
|
216
|
+
}
|
|
217
|
+
var isChecked = function isChecked(id) {
|
|
218
|
+
return selectedOptions.includes(id);
|
|
219
|
+
};
|
|
220
|
+
var frozen = frozenRef.current;
|
|
221
|
+
var nextFrozen = new Set(frozen);
|
|
222
|
+
collectLeafIds(options).forEach(function (id) {
|
|
223
|
+
if (!frozen.has(id) && isChecked(id)) {
|
|
224
|
+
nextFrozen.add(id);
|
|
225
|
+
}
|
|
226
|
+
});
|
|
227
|
+
frozenRef.current = nextFrozen;
|
|
228
|
+
setSortedList(reconcileOrder(sortedList, options, frozen, isChecked));
|
|
142
229
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
143
|
-
}, [options]);
|
|
230
|
+
}, [options, selectedKey]);
|
|
144
231
|
var _useState3 = (0, _react.useState)({
|
|
145
232
|
item: undefined,
|
|
146
233
|
by: undefined
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Autocomplete.js","names":["_react","_interopRequireWildcard","require","_reactVirtual","_HandleKeyboard","_Styles","_useHighlightText","_interopRequireDefault","_Option","_Styles2","_OptionGroup","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","get","set","_t","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","_slicedToArray","_arrayWithHoles","_iterableToArrayLimit","_unsupportedIterableToArray","_nonIterableRest","TypeError","a","_arrayLikeToArray","toString","slice","constructor","name","Array","from","test","length","l","Symbol","iterator","u","next","done","push","value","return","isArray","ownKeys","keys","getOwnPropertySymbols","filter","enumerable","apply","_objectSpread","arguments","forEach","_defineProperty","getOwnPropertyDescriptors","defineProperties","_toPropertyKey","configurable","writable","_toPrimitive","toPrimitive","String","Number","isOptionGroup","item","options","undefined","Autocomplete","exports","_ref","type","_ref$options","inputEl","_ref$selected","selected","emptyValue","noResultText","_ref$renderOption","renderOption","option","defaultValue","_ref$sortDirection","sortDirection","handleChange","optionClassName","handleEmptyAction","disabledInternalSort","AutocompleteClassName","handleDefaultOptionChange","preselectDefaultValue","_ref$keepSameOptionsO","keepSameOptionsOrder","_ref$autoHeightMax","autoHeightMax","clearInputOnSelect","_ref$mixedOptions","mixedOptions","filterCriteria","disableVirtualization","listContainerRef","useRef","itemRef","selectedOptions","useMemo","handleSort","useCallback","opts","_opts$","isGrouped","sortOptions","b","aSelected","includes","id","bSelected","aMixed","bMixed","map","group","sortedGroupOptions","sort","sortList","_options$","sortedOptions","localeCompare","_useState","useState","_useState2","sortedList","setSortedList","useEffect","_useState3","by","_useState4","hover","setHover","_useState5","_useState6","setFilter","handleEmpty","button","_inputEl$current","current","focus","onAddNewMouseEnter","showAddNew","trim","every","v","toLowerCase","filterOptions","trimmedFilter","matchesFilter","hidden","nameMatch","hovered","reduce","acc","groupedOption","filteredOptions","list","showDefaultOption","flatOptions","showNoResultCondition","virtualItems","items","index","shouldUseVirtualization","rowVirtualizer","useVirtualizer","count","getScrollElement","estimateSize","overscan","gap","handleInputChange","target","key","handleHoverCallback","toggleSelected","result","_id","dispatchEvent","Event","bubbles","handleMouseEnter","handleClick","preventDefault","handleRenderOption","createElement","OptionGroup","checked","tooltip","renderOptions","onChange","Option","ref","onMouseEnter","onClick","className","highlightText","concat","handleOnMouseLeave","findIndex","scrollToIndex","align","handleOnKeyDown","handleKeyboardMovement","listenerTarget","addEventListener","removeEventListener","isDefaultOptionSelected","renderVirtualItem","virtualItem","_StyledStyledOption","StyledAutocompleteNewItem","onMouseDown","StyledAutocompleteScrollShadow","$isHidden","_ref2","onScroll","StyledAutocompleteBody","onMouseLeave","style","height","Math","min","getTotalSize","overflow","width","position","getVirtualItems","virtualRow","top","left","transform","start","Fragment","displayName","_styledComponents","StyledOption","withConfig","componentId"],"sources":["../../../../src/components/Autocomplete/Autocomplete.tsx"],"sourcesContent":["import React, {\n type FC,\n useCallback,\n useState,\n useMemo,\n useEffect,\n useRef,\n type ReactNode,\n type ReactElement,\n type MutableRefObject,\n} from \"react\";\n\nimport { useVirtualizer } from \"@tanstack/react-virtual\";\n\nimport { handleKeyboardMovement } from \"./HandleKeyboard\";\nimport {\n StyledAutocompleteBody,\n StyledAutocompleteNewItem,\n StyledAutocompleteScrollShadow,\n} from \"./Styles\";\nimport highlightText from \"../../hooks/useHighlightText\";\nimport { type IOptionItemProps, Option } from \"../Select/Option\";\nimport { StyledOption } from \"../Select/Option/Styles\";\nimport { type IOptionGroupProps, OptionGroup } from \"../Select/OptionGroup\";\n\nexport function isOptionGroup(\n item: IOptionGroupProps | IOptionItemProps\n): item is IOptionGroupProps {\n return (item as IOptionGroupProps).options !== undefined;\n}\n\nexport interface IAutocompleteProps {\n /** Select type: single or multiple */\n type?: \"single\" | \"multiple\";\n /** List of options or group options */\n options?: (IOptionGroupProps | IOptionItemProps)[];\n /** Selected values */\n selected?: (string | number)[] | string | number;\n /** Mixed options values */\n mixedOptions?: (string | number)[];\n /** Input Element. */\n inputEl?: MutableRefObject<HTMLInputElement | null | undefined>;\n /** Text for empty value */\n emptyValue?: string;\n /** Text for No result */\n noResultText?: string;\n /** Render option */\n renderOption?: (\n option: Record<string, ReactNode>,\n data: Record<string, unknown>\n ) => string | ReactElement;\n /** Default value that renders on top of list */\n defaultValue?: string;\n /** Sort direction for labels */\n sortDirection?: \"asc\" | \"desc\";\n /** handleChange callback */\n handleChange?: (\n e: (string | number)[] | string | number | null | undefined\n ) => void;\n /** ClassName for single option */\n optionClassName?: string;\n /** handleEmptyAction */\n handleEmptyAction?: (e: string | number) => void;\n /** Disable sorting options */\n disabledInternalSort?: boolean;\n /** ClassName for Autocomplete component */\n AutocompleteClassName?: string;\n /** handleDefaultOptionChange callback */\n handleDefaultOptionChange?: () => void;\n /** Should default value be selected */\n preselectDefaultValue?: boolean;\n /** Should order stay the same after choosing an option */\n keepSameOptionsOrder?: boolean;\n /** Set max height property for scrollbars */\n autoHeightMax?: number;\n /** Clear input on select - works in single mode */\n clearInputOnSelect?: boolean;\n /** Custom filter function for additional filtering criteria */\n filterCriteria?: (option: IOptionItemProps, filter: string) => boolean;\n disableVirtualization?: boolean;\n}\n\ninterface IHover {\n item: number | string | undefined | null;\n by: \"mouse\" | \"keyboard\" | undefined;\n}\n\ninterface VirtualItem {\n type: \"default\" | \"option\" | \"group\" | \"addNew\" | \"noResult\";\n id: string | number;\n item?: IOptionItemProps | IOptionGroupProps;\n index?: number;\n}\n\nexport const Autocomplete: FC<IAutocompleteProps> = ({\n type,\n options = [],\n inputEl,\n selected = [],\n emptyValue,\n noResultText,\n renderOption = (option) => option?.name,\n defaultValue,\n sortDirection = \"asc\",\n handleChange,\n optionClassName,\n handleEmptyAction,\n disabledInternalSort,\n AutocompleteClassName,\n handleDefaultOptionChange,\n preselectDefaultValue,\n keepSameOptionsOrder = false,\n autoHeightMax = 340,\n clearInputOnSelect,\n mixedOptions = [],\n filterCriteria,\n disableVirtualization,\n}) => {\n const listContainerRef = useRef<HTMLDivElement>(null);\n const itemRef = useRef<HTMLLIElement>(null);\n\n const selectedOptions = useMemo(() => {\n if (Array.isArray(selected)) {\n return selected;\n }\n return [selected];\n }, [selected]);\n\n const handleSort = useCallback(\n (opts) => {\n if (keepSameOptionsOrder) {\n return opts;\n }\n\n const isGrouped = Array.isArray(opts[0]?.options);\n\n const sortOptions = (a, b) => {\n const aSelected = selectedOptions.includes(a.id);\n const bSelected = selectedOptions.includes(b.id);\n const aMixed = mixedOptions.includes(a.id);\n const bMixed = mixedOptions.includes(b.id);\n\n if (aSelected && !bSelected) {\n return -1;\n }\n if (!aSelected && bSelected) {\n return 1;\n }\n if (aMixed && !bMixed) {\n return -1;\n }\n if (!aMixed && bMixed) {\n return 1;\n }\n return 0;\n };\n\n if (isGrouped) {\n return opts.map((group) => {\n const sortedGroupOptions = group.options.sort(sortOptions);\n\n return {\n ...group,\n options: sortedGroupOptions,\n };\n });\n } else {\n return opts.sort(sortOptions);\n }\n },\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [mixedOptions, selectedOptions]\n );\n\n const sortList = useCallback(\n (options) => {\n if (disabledInternalSort) {\n return handleSort([...options]);\n }\n\n const isGrouped = Array.isArray(options[0]?.options);\n\n if (isGrouped) {\n const sortedOptions = options.map((group) => {\n const sortedGroupOptions = group.options.sort((a, b) =>\n sortDirection === \"asc\"\n ? a.name.localeCompare(b.name)\n : b.name.localeCompare(a.name)\n );\n\n return {\n ...group,\n options: handleSort(sortedGroupOptions),\n };\n });\n\n return handleSort(sortedOptions);\n } else {\n const sortedOptions = options.sort((a, b) =>\n sortDirection === \"asc\"\n ? a.name.localeCompare(b.name)\n : b.name.localeCompare(a.name)\n );\n\n return handleSort(sortedOptions);\n }\n },\n [sortDirection, disabledInternalSort, handleSort]\n );\n\n const [sortedList, setSortedList] = useState(() => sortList(options));\n\n useEffect(() => {\n setSortedList(sortList(options));\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [options]);\n\n const [hover, setHover] = useState<IHover>({\n item: undefined,\n by: undefined,\n });\n const [filter, setFilter] = useState(\"\");\n\n const handleEmpty = useCallback(\n (e) => {\n if (e && e.button !== 0) {\n return;\n }\n if (handleEmptyAction) {\n inputEl?.current?.focus();\n setFilter(\"\");\n handleEmptyAction(filter);\n }\n },\n [filter, handleEmptyAction, inputEl]\n );\n\n const onAddNewMouseEnter = useCallback(\n () => setHover({ item: \"addNew\", by: \"mouse\" }),\n []\n );\n\n const showAddNew = useMemo(() => {\n return !!(\n emptyValue &&\n filter.trim() &&\n options.every((option) => {\n if (isOptionGroup(option)) {\n return option.options.every(\n (v) => v.name.toLowerCase() !== filter.trim().toLowerCase()\n );\n }\n return option.name.toLowerCase() !== filter.trim().toLowerCase();\n })\n );\n }, [emptyValue, filter, options]);\n\n const filterOptions = useCallback(\n (options, filter) => {\n const trimmedFilter = filter.trim();\n const isGrouped = options[0] && isOptionGroup(options[0]);\n\n const matchesFilter = (option: IOptionItemProps) => {\n if (option.hidden) {\n return false;\n }\n\n const nameMatch = option.name\n .toLowerCase()\n .includes(trimmedFilter.toLowerCase());\n\n if (filterCriteria && trimmedFilter) {\n return nameMatch || filterCriteria(option, trimmedFilter);\n }\n\n return nameMatch;\n };\n\n if (isGrouped) {\n let hovered = false;\n return options.reduce((acc, groupedOption) => {\n const filteredOptions = groupedOption.options.filter(matchesFilter);\n\n if (filteredOptions.length > 0) {\n if (!hovered && filter) {\n setHover({ item: filteredOptions[0].id, by: \"keyboard\" });\n }\n hovered = true;\n return [...acc, { ...groupedOption, options: filteredOptions }];\n }\n return [...acc];\n }, []);\n } else {\n const filteredOptions = options.filter(matchesFilter);\n\n if (filter && filteredOptions.length > 0) {\n setHover({ item: filteredOptions[0].id, by: \"keyboard\" });\n }\n if (filteredOptions.length === 0 && emptyValue) {\n setHover({ item: \"addNew\", by: \"keyboard\" });\n }\n return filteredOptions;\n }\n },\n [emptyValue, filterCriteria]\n );\n\n const list = useMemo(\n () => filterOptions(sortedList, filter),\n [filter, filterOptions, sortedList]\n );\n\n const showDefaultOption = useMemo(\n () => !!defaultValue && !filter,\n [defaultValue, filter]\n );\n\n const flatOptions = useMemo(() => {\n const options = list.reduce(\n (\n acc: (IOptionItemProps | IOptionGroupProps | [])[],\n option: IOptionItemProps | IOptionGroupProps\n ) => {\n if (!isOptionGroup(option)) {\n return [...acc, option];\n }\n return [...acc, ...option.options];\n },\n []\n );\n return filterOptions(options, filter);\n }, [filter, filterOptions, list]);\n\n const showNoResultCondition = useMemo(\n () =>\n noResultText &&\n !showAddNew &&\n list.length < 1 &&\n ((defaultValue && filter) || !defaultValue),\n [noResultText, showAddNew, list.length, defaultValue, filter]\n );\n\n const virtualItems = useMemo(() => {\n const items: VirtualItem[] = [];\n\n if (showDefaultOption) {\n items.push({\n type: \"default\",\n id: \"default\",\n });\n }\n\n list.forEach((item, index) => {\n if (isOptionGroup(item)) {\n items.push({\n type: \"group\",\n id: item.id,\n item,\n });\n\n item.options.forEach((option) => {\n items.push({\n type: \"option\",\n id: option.id,\n item: option,\n index,\n });\n });\n } else {\n items.push({\n type: \"option\",\n id: item.id,\n item,\n index,\n });\n }\n });\n\n if (showNoResultCondition) {\n items.push({\n type: \"noResult\",\n id: \"noResult\",\n });\n }\n\n if (showAddNew) {\n items.push({\n type: \"addNew\",\n id: \"addNew\",\n });\n }\n\n return items;\n }, [list, showDefaultOption, showNoResultCondition, showAddNew]);\n\n const shouldUseVirtualization =\n !disableVirtualization && virtualItems.length > 40;\n\n const rowVirtualizer = useVirtualizer({\n count: virtualItems.length,\n getScrollElement: () => listContainerRef.current,\n estimateSize: () => 28,\n overscan: 5,\n gap: 4,\n });\n\n const handleInputChange = useCallback((e) => {\n if (\n e.target &&\n !(e.key === \"ArrowDown\") &&\n !(e.key === \"ArrowUp\") &&\n !(e.key === \"Enter\")\n ) {\n setFilter(e.target.value);\n }\n }, []);\n\n const handleHoverCallback = useCallback(\n (e: number | string | undefined): void => {\n setHover({ item: e, by: \"mouse\" });\n },\n []\n );\n\n const toggleSelected = useCallback(\n (id) => {\n let result;\n\n if (id !== null) {\n if (type === \"multiple\") {\n if (selectedOptions.includes(id)) {\n result = selectedOptions.filter((_id) => _id !== id);\n } else {\n result = [...selectedOptions, id];\n }\n } else {\n result = id;\n }\n if (clearInputOnSelect && inputEl?.current) {\n inputEl.current.value = \"\";\n inputEl.current.dispatchEvent(new Event(\"change\", { bubbles: true }));\n }\n setFilter(\"\");\n } else {\n if (typeof handleDefaultOptionChange === \"function\") {\n handleDefaultOptionChange();\n return;\n }\n }\n\n if (typeof handleChange === \"function\") {\n handleChange(result);\n }\n },\n [\n clearInputOnSelect,\n handleChange,\n handleDefaultOptionChange,\n inputEl,\n selectedOptions,\n type,\n ]\n );\n\n const handleMouseEnter = useCallback((e) => {\n if (e === undefined || e === null) {\n return setHover({ item: null, by: \"mouse\" });\n }\n setHover({ item: e, by: \"mouse\" });\n }, []);\n\n const handleClick = useCallback(\n (e) => {\n e.preventDefault();\n toggleSelected(hover.item);\n },\n [toggleSelected, hover]\n );\n\n const handleRenderOption = useCallback(\n (item: IOptionItemProps | IOptionGroupProps, index) => {\n if (isOptionGroup(item)) {\n return (\n <OptionGroup\n checked={selectedOptions}\n name={item.name}\n tooltip={item.tooltip}\n key={item.id}\n setHover={handleHoverCallback}\n id={item.id}\n hover={hover.item}\n options={item.options}\n renderOptions={handleRenderOption}\n type={type}\n onChange={handleChange}\n filter={filter}\n mixedOptions={mixedOptions}\n />\n );\n }\n return (\n <Option\n name={item.name}\n ref={hover.item === item.id ? itemRef : null}\n key={index}\n tooltip={item.tooltip}\n onMouseEnter={handleMouseEnter}\n onClick={handleClick}\n id={item.id}\n hover={item.id === hover.item}\n className={optionClassName}\n renderOption={renderOption(\n { ...item, name: highlightText(item.name, filter) },\n {\n id: `option_${item.id}`,\n checked: selectedOptions && selectedOptions.includes(item.id),\n hover: hover.item === item.id,\n onChange: () => null,\n }\n )}\n />\n );\n },\n [\n handleClick,\n handleMouseEnter,\n hover.item,\n optionClassName,\n renderOption,\n filter,\n selectedOptions,\n handleHoverCallback,\n type,\n handleChange,\n mixedOptions,\n ]\n );\n\n const handleOnMouseLeave = useCallback(() => {\n setHover({ item: undefined, by: \"mouse\" });\n }, []);\n\n useEffect(() => {\n if (hover.by === \"keyboard\" && hover.item !== undefined) {\n const index = virtualItems.findIndex((item) => item.id === hover.item);\n if (index !== -1) {\n rowVirtualizer.scrollToIndex(index, { align: \"center\" });\n }\n }\n }, [hover, rowVirtualizer, virtualItems]);\n\n const handleOnKeyDown = useCallback(\n (e) => {\n if (e.key === \"Enter\") {\n e.preventDefault();\n\n if (hover.item === undefined && filter === \"\") {\n return;\n }\n if (hover.item === \"addNew\") {\n handleEmpty(null);\n return;\n }\n if (hover.item === null && handleDefaultOptionChange) {\n handleDefaultOptionChange();\n return;\n }\n\n if (typeof hover.item !== \"undefined\" || hover.item !== null) {\n toggleSelected(hover.item);\n setFilter(\"\");\n }\n return;\n }\n setHover({\n item: handleKeyboardMovement(\n e,\n hover.item,\n flatOptions,\n showAddNew,\n showDefaultOption\n ),\n by: \"keyboard\",\n });\n },\n [\n filter,\n flatOptions,\n toggleSelected,\n handleDefaultOptionChange,\n handleEmpty,\n hover,\n showAddNew,\n showDefaultOption,\n ]\n );\n\n useEffect(() => {\n const listenerTarget = inputEl?.current;\n if (!listenerTarget) return;\n\n listenerTarget.addEventListener(\"input\", handleInputChange);\n listenerTarget.addEventListener(\"keydown\", handleOnKeyDown);\n return () => {\n listenerTarget.removeEventListener(\"input\", handleInputChange);\n listenerTarget.removeEventListener(\"keydown\", handleOnKeyDown);\n };\n }, [handleInputChange, handleOnKeyDown, inputEl]);\n\n const isDefaultOptionSelected = useCallback(() => {\n if (preselectDefaultValue) {\n return selectedOptions.length < 1 || selectedOptions[0] === \"\";\n } else {\n return (\n selectedOptions[0] === null ||\n selectedOptions.length === flatOptions.length\n );\n }\n }, [flatOptions.length, preselectDefaultValue, selectedOptions]);\n\n const renderVirtualItem = useCallback(\n (virtualItem: VirtualItem, index: number) => {\n switch (virtualItem.type) {\n case \"default\":\n return (\n <Option\n name={String(defaultValue)}\n ref={hover.item === null ? itemRef : null}\n hover={hover.item === null}\n onMouseEnter={handleMouseEnter}\n onClick={(e) => {\n e.preventDefault();\n toggleSelected(null);\n }}\n renderOption={renderOption(\n { name: defaultValue, id: null },\n {\n checked: isDefaultOptionSelected(),\n hover: hover.item === null,\n onChange: () => null,\n }\n )}\n />\n );\n\n case \"group\":\n if (!virtualItem.item || !isOptionGroup(virtualItem.item))\n return null;\n return (\n <OptionGroup\n checked={selectedOptions}\n name={virtualItem.item.name}\n tooltip={virtualItem.item.tooltip}\n key={virtualItem.item.id}\n setHover={handleHoverCallback}\n id={virtualItem.item.id}\n hover={hover.item}\n options={virtualItem.item.options}\n renderOptions={handleRenderOption}\n type={type}\n onChange={handleChange}\n filter={filter}\n mixedOptions={mixedOptions}\n />\n );\n\n case \"option\":\n if (!virtualItem.item || isOptionGroup(virtualItem.item)) return null;\n return (\n <Option\n name={(virtualItem.item as IOptionItemProps).name}\n ref={hover.item === virtualItem.id ? itemRef : null}\n key={index}\n tooltip={(virtualItem.item as IOptionItemProps).tooltip}\n onMouseEnter={() => handleMouseEnter(virtualItem.id)}\n onClick={handleClick}\n id={virtualItem.id}\n hover={virtualItem.id === hover.item}\n className={optionClassName}\n renderOption={renderOption(\n {\n ...(virtualItem.item as IOptionItemProps),\n name: highlightText(\n (virtualItem.item as IOptionItemProps).name,\n filter\n ),\n },\n {\n id: `option_${virtualItem.id}`,\n checked:\n selectedOptions && selectedOptions.includes(virtualItem.id),\n hover: hover.item === virtualItem.id,\n onChange: () => null,\n }\n )}\n />\n );\n\n case \"noResult\":\n return <StyledOption css=\"cursor: auto\">{noResultText}</StyledOption>;\n\n case \"addNew\":\n return (\n <StyledAutocompleteNewItem\n ref={hover.item === \"addNew\" ? itemRef : null}\n key=\"emptyValue\"\n hover={hover.item === \"addNew\"}\n onMouseDown={handleEmpty}\n onMouseEnter={onAddNewMouseEnter}\n >\n {emptyValue}\n </StyledAutocompleteNewItem>\n );\n\n default:\n return null;\n }\n },\n [\n defaultValue,\n hover.item,\n handleMouseEnter,\n renderOption,\n isDefaultOptionSelected,\n selectedOptions,\n handleHoverCallback,\n handleRenderOption,\n type,\n handleChange,\n filter,\n mixedOptions,\n handleClick,\n optionClassName,\n noResultText,\n handleEmpty,\n onAddNewMouseEnter,\n emptyValue,\n toggleSelected,\n ]\n );\n\n return (\n <StyledAutocompleteScrollShadow\n className={AutocompleteClassName}\n $isHidden={\n !defaultValue && !emptyValue && !noResultText && list.length < 1\n }\n >\n {({ onScroll }) => (\n <StyledAutocompleteBody key=\"body\" onMouseLeave={handleOnMouseLeave}>\n <div\n ref={listContainerRef}\n style={{\n height: `${Math.min(\n rowVirtualizer.getTotalSize() + 12,\n autoHeightMax\n )}px`,\n overflow: \"auto\",\n }}\n onScroll={(e) => {\n if (onScroll) onScroll(e);\n }}\n >\n <div\n style={{\n height: `${rowVirtualizer.getTotalSize()}px`,\n width: \"100%\",\n position: \"relative\",\n }}\n >\n {shouldUseVirtualization\n ? rowVirtualizer.getVirtualItems().map((virtualRow) => {\n const item = virtualItems[virtualRow.index];\n return (\n <div\n key={virtualRow.index}\n data-index={virtualRow.index}\n style={{\n position: \"absolute\",\n top: 0,\n left: 0,\n width: \"100%\",\n transform: `translateY(${virtualRow.start}px)`,\n }}\n >\n {renderVirtualItem(item, virtualRow.index)}\n </div>\n );\n })\n : virtualItems.map((item, index) => (\n <React.Fragment key={index}>\n {renderVirtualItem(item, index)}\n </React.Fragment>\n ))}\n </div>\n </div>\n </StyledAutocompleteBody>\n )}\n </StyledAutocompleteScrollShadow>\n );\n};\n\nAutocomplete.displayName = \"Autocomplete\";\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"Autocomplete.js","names":["_react","_interopRequireWildcard","require","_reactVirtual","_HandleKeyboard","_Styles","_useHighlightText","_interopRequireDefault","_Option","_Styles2","_OptionGroup","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","get","set","_t","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","_slicedToArray","_arrayWithHoles","_iterableToArrayLimit","_unsupportedIterableToArray","_nonIterableRest","TypeError","a","_arrayLikeToArray","toString","slice","constructor","name","Array","from","test","length","l","Symbol","iterator","u","next","done","push","value","return","isArray","ownKeys","keys","getOwnPropertySymbols","filter","enumerable","apply","_objectSpread","arguments","forEach","_defineProperty","getOwnPropertyDescriptors","defineProperties","_toPropertyKey","configurable","writable","_toPrimitive","toPrimitive","String","Number","isOptionGroup","item","options","undefined","collectLeafIds","opts","reduce","acc","opt","map","id","insertAmongSameState","list","isChecked","checked","index","findIndex","localeCompare","reconcileFlat","prev","frozen","nextById","Map","base","toPlace","reconcileOrder","every","prevGroupById","group","_prevGroupById$get$op","_prevGroupById$get","Autocomplete","exports","_ref","type","_ref$options","inputEl","_ref$selected","selected","emptyValue","noResultText","_ref$renderOption","renderOption","option","defaultValue","_ref$sortDirection","sortDirection","handleChange","optionClassName","handleEmptyAction","disabledInternalSort","AutocompleteClassName","handleDefaultOptionChange","preselectDefaultValue","_ref$keepSameOptionsO","keepSameOptionsOrder","_ref$autoHeightMax","autoHeightMax","clearInputOnSelect","_ref$mixedOptions","mixedOptions","filterCriteria","disableVirtualization","listContainerRef","useRef","itemRef","selectedOptions","useMemo","frozenRef","Set","handleSort","useCallback","_opts$","isGrouped","sortOptions","b","aSelected","includes","bSelected","aMixed","bMixed","sort","sortList","_options$","alphaSort","sortedOptions","_useState","useState","_useState2","sortedList","setSortedList","isInitialSortRef","selectedKey","join","useEffect","current","nextFrozen","add","_useState3","by","_useState4","hover","setHover","_useState5","_useState6","setFilter","handleEmpty","button","_inputEl$current","focus","onAddNewMouseEnter","showAddNew","trim","v","toLowerCase","filterOptions","trimmedFilter","matchesFilter","hidden","nameMatch","hovered","groupedOption","filteredOptions","showDefaultOption","flatOptions","showNoResultCondition","virtualItems","items","shouldUseVirtualization","rowVirtualizer","useVirtualizer","count","getScrollElement","estimateSize","overscan","gap","handleInputChange","target","key","handleHoverCallback","toggleSelected","result","_id","dispatchEvent","Event","bubbles","handleMouseEnter","handleClick","preventDefault","handleRenderOption","createElement","OptionGroup","tooltip","renderOptions","onChange","Option","ref","onMouseEnter","onClick","className","highlightText","concat","handleOnMouseLeave","scrollToIndex","align","handleOnKeyDown","handleKeyboardMovement","listenerTarget","addEventListener","removeEventListener","isDefaultOptionSelected","renderVirtualItem","virtualItem","_StyledStyledOption","StyledAutocompleteNewItem","onMouseDown","StyledAutocompleteScrollShadow","$isHidden","_ref2","onScroll","StyledAutocompleteBody","onMouseLeave","style","height","Math","min","getTotalSize","overflow","width","position","getVirtualItems","virtualRow","top","left","transform","start","Fragment","displayName","_styledComponents","StyledOption","withConfig","componentId"],"sources":["../../../../src/components/Autocomplete/Autocomplete.tsx"],"sourcesContent":["import React, {\n type FC,\n useCallback,\n useState,\n useMemo,\n useEffect,\n useRef,\n type ReactNode,\n type ReactElement,\n type MutableRefObject,\n} from \"react\";\n\nimport { useVirtualizer } from \"@tanstack/react-virtual\";\n\nimport { handleKeyboardMovement } from \"./HandleKeyboard\";\nimport {\n StyledAutocompleteBody,\n StyledAutocompleteNewItem,\n StyledAutocompleteScrollShadow,\n} from \"./Styles\";\nimport highlightText from \"../../hooks/useHighlightText\";\nimport { type IOptionItemProps, Option } from \"../Select/Option\";\nimport { StyledOption } from \"../Select/Option/Styles\";\nimport { type IOptionGroupProps, OptionGroup } from \"../Select/OptionGroup\";\n\nexport function isOptionGroup(\n item: IOptionGroupProps | IOptionItemProps\n): item is IOptionGroupProps {\n return (item as IOptionGroupProps).options !== undefined;\n}\n\nconst collectLeafIds = (\n opts: (IOptionGroupProps | IOptionItemProps)[]\n): (string | number)[] =>\n opts.reduce<(string | number)[]>(\n (acc, opt) =>\n isOptionGroup(opt)\n ? [...acc, ...opt.options.map((o) => o.id)]\n : [...acc, opt.id],\n []\n );\n\n// Inserts an option at its alphabetical position among the options that share\n// its checked state (checked items live at the top, so a checked option lands\n// among the checked ones, sorted).\nconst insertAmongSameState = (\n list: IOptionItemProps[],\n item: IOptionItemProps,\n isChecked: (id: string | number) => boolean\n): IOptionItemProps[] => {\n const checked = isChecked(item.id);\n let index = list.findIndex(\n (o) => isChecked(o.id) === checked && o.name.localeCompare(item.name) > 0\n );\n if (index === -1) {\n index = checked\n ? list.reduce((acc, o, i) => (isChecked(o.id) ? i + 1 : acc), 0)\n : list.length;\n }\n return [...list.slice(0, index), item, ...list.slice(index)];\n};\n\n// Frozen options keep their order (checking/unchecking never moves them).\n// Options that aren't frozen yet are slotted in among the checked items,\n// alphabetically — that's how a freshly added option finds its place.\nconst reconcileFlat = (\n prev: IOptionItemProps[],\n next: IOptionItemProps[],\n frozen: Set<string | number>,\n isChecked: (id: string | number) => boolean\n): IOptionItemProps[] => {\n const nextById = new Map(next.map((o) => [o.id, o]));\n const base = prev\n .filter((o) => frozen.has(o.id) && nextById.has(o.id))\n .map((o) => nextById.get(o.id) as IOptionItemProps);\n const toPlace = next.filter((o) => !frozen.has(o.id));\n\n return toPlace.reduce(\n (acc, item) => insertAmongSameState(acc, item, isChecked),\n base\n );\n};\n\nconst reconcileOrder = (\n prev: (IOptionGroupProps | IOptionItemProps)[],\n next: (IOptionGroupProps | IOptionItemProps)[],\n frozen: Set<string | number>,\n isChecked: (id: string | number) => boolean\n): (IOptionGroupProps | IOptionItemProps)[] => {\n if (!next.every(isOptionGroup) || !prev.every(isOptionGroup)) {\n return reconcileFlat(\n prev as IOptionItemProps[],\n next as IOptionItemProps[],\n frozen,\n isChecked\n );\n }\n\n const prevGroupById = new Map(prev.map((group) => [group.id, group]));\n\n return next.map((group) => ({\n ...group,\n options: reconcileFlat(\n prevGroupById.get(group.id)?.options ?? [],\n group.options,\n frozen,\n isChecked\n ),\n }));\n};\n\nexport interface IAutocompleteProps {\n /** Select type: single or multiple */\n type?: \"single\" | \"multiple\";\n /** List of options or group options */\n options?: (IOptionGroupProps | IOptionItemProps)[];\n /** Selected values */\n selected?: (string | number)[] | string | number;\n /** Mixed options values */\n mixedOptions?: (string | number)[];\n /** Input Element. */\n inputEl?: MutableRefObject<HTMLInputElement | null | undefined>;\n /** Text for empty value */\n emptyValue?: string;\n /** Text for No result */\n noResultText?: string;\n /** Render option */\n renderOption?: (\n option: Record<string, ReactNode>,\n data: Record<string, unknown>\n ) => string | ReactElement;\n /** Default value that renders on top of list */\n defaultValue?: string;\n /** Sort direction for labels */\n sortDirection?: \"asc\" | \"desc\";\n /** handleChange callback */\n handleChange?: (\n e: (string | number)[] | string | number | null | undefined\n ) => void;\n /** ClassName for single option */\n optionClassName?: string;\n /** handleEmptyAction */\n handleEmptyAction?: (e: string | number) => void;\n /** Disable sorting options */\n disabledInternalSort?: boolean;\n /** ClassName for Autocomplete component */\n AutocompleteClassName?: string;\n /** handleDefaultOptionChange callback */\n handleDefaultOptionChange?: () => void;\n /** Should default value be selected */\n preselectDefaultValue?: boolean;\n /** Should order stay the same after choosing an option */\n keepSameOptionsOrder?: boolean;\n /** Set max height property for scrollbars */\n autoHeightMax?: number;\n /** Clear input on select - works in single mode */\n clearInputOnSelect?: boolean;\n /** Custom filter function for additional filtering criteria */\n filterCriteria?: (option: IOptionItemProps, filter: string) => boolean;\n disableVirtualization?: boolean;\n}\n\ninterface IHover {\n item: number | string | undefined | null;\n by: \"mouse\" | \"keyboard\" | undefined;\n}\n\ninterface VirtualItem {\n type: \"default\" | \"option\" | \"group\" | \"addNew\" | \"noResult\";\n id: string | number;\n item?: IOptionItemProps | IOptionGroupProps;\n index?: number;\n}\n\nexport const Autocomplete: FC<IAutocompleteProps> = ({\n type,\n options = [],\n inputEl,\n selected = [],\n emptyValue,\n noResultText,\n renderOption = (option) => option?.name,\n defaultValue,\n sortDirection = \"asc\",\n handleChange,\n optionClassName,\n handleEmptyAction,\n disabledInternalSort,\n AutocompleteClassName,\n handleDefaultOptionChange,\n preselectDefaultValue,\n keepSameOptionsOrder = false,\n autoHeightMax = 340,\n clearInputOnSelect,\n mixedOptions = [],\n filterCriteria,\n disableVirtualization,\n}) => {\n const listContainerRef = useRef<HTMLDivElement>(null);\n const itemRef = useRef<HTMLLIElement>(null);\n\n const selectedOptions = useMemo(() => {\n if (Array.isArray(selected)) {\n return selected;\n }\n return [selected];\n }, [selected]);\n\n // Ids whose position is fixed. Starts with everything present on open; a\n // freshly added option joins this set once it becomes checked, so unchecking\n // it later won't move it. Everything frozen keeps its order on every re-sort.\n const frozenRef = useRef(new Set(collectLeafIds(options)));\n\n const handleSort = useCallback(\n (opts) => {\n if (keepSameOptionsOrder) {\n return opts;\n }\n\n const isGrouped = Array.isArray(opts[0]?.options);\n\n const sortOptions = (a, b) => {\n const aSelected = selectedOptions.includes(a.id);\n const bSelected = selectedOptions.includes(b.id);\n const aMixed = mixedOptions.includes(a.id);\n const bMixed = mixedOptions.includes(b.id);\n\n if (aSelected && !bSelected) {\n return -1;\n }\n if (!aSelected && bSelected) {\n return 1;\n }\n if (aMixed && !bMixed) {\n return -1;\n }\n if (!aMixed && bMixed) {\n return 1;\n }\n return 0;\n };\n\n if (isGrouped) {\n return opts.map((group) => ({\n ...group,\n options: [...group.options].sort(sortOptions),\n }));\n } else {\n return [...opts].sort(sortOptions);\n }\n },\n [keepSameOptionsOrder, selectedOptions, mixedOptions]\n );\n\n const sortList = useCallback(\n (options) => {\n if (disabledInternalSort) {\n return handleSort(options);\n }\n\n const alphaSort = (a, b) =>\n sortDirection === \"asc\"\n ? a.name.localeCompare(b.name)\n : b.name.localeCompare(a.name);\n\n const isGrouped = Array.isArray(options[0]?.options);\n\n if (isGrouped) {\n const sortedOptions = options.map((group) => ({\n ...group,\n options: handleSort([...group.options].sort(alphaSort)),\n }));\n\n return handleSort(sortedOptions);\n } else {\n return handleSort([...options].sort(alphaSort));\n }\n },\n [sortDirection, disabledInternalSort, handleSort]\n );\n\n const [sortedList, setSortedList] = useState(() => sortList(options));\n\n // The order is established on open. Options present then keep their place for\n // the whole session — checking/unchecking never reorders them. Options added\n // afterwards are slotted in among the checked items, alphabetically. The\n // selection key is a primitive so a fresh `selected = []` default can't loop.\n const isInitialSortRef = useRef(true);\n const selectedKey = selectedOptions.join(\",\");\n\n useEffect(() => {\n if (isInitialSortRef.current) {\n isInitialSortRef.current = false;\n return;\n }\n\n if (keepSameOptionsOrder) {\n setSortedList(sortList(options));\n return;\n }\n\n if (sortedList.length === 0) {\n frozenRef.current = new Set(collectLeafIds(options));\n setSortedList(sortList(options));\n return;\n }\n\n const isChecked = (id: string | number) => selectedOptions.includes(id);\n const frozen = frozenRef.current;\n\n const nextFrozen = new Set(frozen);\n collectLeafIds(options).forEach((id) => {\n if (!frozen.has(id) && isChecked(id)) {\n nextFrozen.add(id);\n }\n });\n frozenRef.current = nextFrozen;\n\n setSortedList(reconcileOrder(sortedList, options, frozen, isChecked));\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [options, selectedKey]);\n\n const [hover, setHover] = useState<IHover>({\n item: undefined,\n by: undefined,\n });\n const [filter, setFilter] = useState(\"\");\n\n const handleEmpty = useCallback(\n (e) => {\n if (e && e.button !== 0) {\n return;\n }\n if (handleEmptyAction) {\n inputEl?.current?.focus();\n setFilter(\"\");\n handleEmptyAction(filter);\n }\n },\n [filter, handleEmptyAction, inputEl]\n );\n\n const onAddNewMouseEnter = useCallback(\n () => setHover({ item: \"addNew\", by: \"mouse\" }),\n []\n );\n\n const showAddNew = useMemo(() => {\n return !!(\n emptyValue &&\n filter.trim() &&\n options.every((option) => {\n if (isOptionGroup(option)) {\n return option.options.every(\n (v) => v.name.toLowerCase() !== filter.trim().toLowerCase()\n );\n }\n return option.name.toLowerCase() !== filter.trim().toLowerCase();\n })\n );\n }, [emptyValue, filter, options]);\n\n const filterOptions = useCallback(\n (options, filter) => {\n const trimmedFilter = filter.trim();\n const isGrouped = options[0] && isOptionGroup(options[0]);\n\n const matchesFilter = (option: IOptionItemProps) => {\n if (option.hidden) {\n return false;\n }\n\n const nameMatch = option.name\n .toLowerCase()\n .includes(trimmedFilter.toLowerCase());\n\n if (filterCriteria && trimmedFilter) {\n return nameMatch || filterCriteria(option, trimmedFilter);\n }\n\n return nameMatch;\n };\n\n if (isGrouped) {\n let hovered = false;\n return options.reduce((acc, groupedOption) => {\n const filteredOptions = groupedOption.options.filter(matchesFilter);\n\n if (filteredOptions.length > 0) {\n if (!hovered && filter) {\n setHover({ item: filteredOptions[0].id, by: \"keyboard\" });\n }\n hovered = true;\n return [...acc, { ...groupedOption, options: filteredOptions }];\n }\n return [...acc];\n }, []);\n } else {\n const filteredOptions = options.filter(matchesFilter);\n\n if (filter && filteredOptions.length > 0) {\n setHover({ item: filteredOptions[0].id, by: \"keyboard\" });\n }\n if (filteredOptions.length === 0 && emptyValue) {\n setHover({ item: \"addNew\", by: \"keyboard\" });\n }\n return filteredOptions;\n }\n },\n [emptyValue, filterCriteria]\n );\n\n const list = useMemo(\n () => filterOptions(sortedList, filter),\n [filter, filterOptions, sortedList]\n );\n\n const showDefaultOption = useMemo(\n () => !!defaultValue && !filter,\n [defaultValue, filter]\n );\n\n const flatOptions = useMemo(() => {\n const options = list.reduce(\n (\n acc: (IOptionItemProps | IOptionGroupProps | [])[],\n option: IOptionItemProps | IOptionGroupProps\n ) => {\n if (!isOptionGroup(option)) {\n return [...acc, option];\n }\n return [...acc, ...option.options];\n },\n []\n );\n return filterOptions(options, filter);\n }, [filter, filterOptions, list]);\n\n const showNoResultCondition = useMemo(\n () =>\n noResultText &&\n !showAddNew &&\n list.length < 1 &&\n ((defaultValue && filter) || !defaultValue),\n [noResultText, showAddNew, list.length, defaultValue, filter]\n );\n\n const virtualItems = useMemo(() => {\n const items: VirtualItem[] = [];\n\n if (showDefaultOption) {\n items.push({\n type: \"default\",\n id: \"default\",\n });\n }\n\n list.forEach((item, index) => {\n if (isOptionGroup(item)) {\n items.push({\n type: \"group\",\n id: item.id,\n item,\n });\n\n item.options.forEach((option) => {\n items.push({\n type: \"option\",\n id: option.id,\n item: option,\n index,\n });\n });\n } else {\n items.push({\n type: \"option\",\n id: item.id,\n item,\n index,\n });\n }\n });\n\n if (showNoResultCondition) {\n items.push({\n type: \"noResult\",\n id: \"noResult\",\n });\n }\n\n if (showAddNew) {\n items.push({\n type: \"addNew\",\n id: \"addNew\",\n });\n }\n\n return items;\n }, [list, showDefaultOption, showNoResultCondition, showAddNew]);\n\n const shouldUseVirtualization =\n !disableVirtualization && virtualItems.length > 40;\n\n const rowVirtualizer = useVirtualizer({\n count: virtualItems.length,\n getScrollElement: () => listContainerRef.current,\n estimateSize: () => 28,\n overscan: 5,\n gap: 4,\n });\n\n const handleInputChange = useCallback((e) => {\n if (\n e.target &&\n !(e.key === \"ArrowDown\") &&\n !(e.key === \"ArrowUp\") &&\n !(e.key === \"Enter\")\n ) {\n setFilter(e.target.value);\n }\n }, []);\n\n const handleHoverCallback = useCallback(\n (e: number | string | undefined): void => {\n setHover({ item: e, by: \"mouse\" });\n },\n []\n );\n\n const toggleSelected = useCallback(\n (id) => {\n let result;\n\n if (id !== null) {\n if (type === \"multiple\") {\n if (selectedOptions.includes(id)) {\n result = selectedOptions.filter((_id) => _id !== id);\n } else {\n result = [...selectedOptions, id];\n }\n } else {\n result = id;\n }\n if (clearInputOnSelect && inputEl?.current) {\n inputEl.current.value = \"\";\n inputEl.current.dispatchEvent(new Event(\"change\", { bubbles: true }));\n }\n setFilter(\"\");\n } else {\n if (typeof handleDefaultOptionChange === \"function\") {\n handleDefaultOptionChange();\n return;\n }\n }\n\n if (typeof handleChange === \"function\") {\n handleChange(result);\n }\n },\n [\n clearInputOnSelect,\n handleChange,\n handleDefaultOptionChange,\n inputEl,\n selectedOptions,\n type,\n ]\n );\n\n const handleMouseEnter = useCallback((e) => {\n if (e === undefined || e === null) {\n return setHover({ item: null, by: \"mouse\" });\n }\n setHover({ item: e, by: \"mouse\" });\n }, []);\n\n const handleClick = useCallback(\n (e) => {\n e.preventDefault();\n toggleSelected(hover.item);\n },\n [toggleSelected, hover]\n );\n\n const handleRenderOption = useCallback(\n (item: IOptionItemProps | IOptionGroupProps, index) => {\n if (isOptionGroup(item)) {\n return (\n <OptionGroup\n checked={selectedOptions}\n name={item.name}\n tooltip={item.tooltip}\n key={item.id}\n setHover={handleHoverCallback}\n id={item.id}\n hover={hover.item}\n options={item.options}\n renderOptions={handleRenderOption}\n type={type}\n onChange={handleChange}\n filter={filter}\n mixedOptions={mixedOptions}\n />\n );\n }\n return (\n <Option\n name={item.name}\n ref={hover.item === item.id ? itemRef : null}\n key={index}\n tooltip={item.tooltip}\n onMouseEnter={handleMouseEnter}\n onClick={handleClick}\n id={item.id}\n hover={item.id === hover.item}\n className={optionClassName}\n renderOption={renderOption(\n { ...item, name: highlightText(item.name, filter) },\n {\n id: `option_${item.id}`,\n checked: selectedOptions && selectedOptions.includes(item.id),\n hover: hover.item === item.id,\n onChange: () => null,\n }\n )}\n />\n );\n },\n [\n handleClick,\n handleMouseEnter,\n hover.item,\n optionClassName,\n renderOption,\n filter,\n selectedOptions,\n handleHoverCallback,\n type,\n handleChange,\n mixedOptions,\n ]\n );\n\n const handleOnMouseLeave = useCallback(() => {\n setHover({ item: undefined, by: \"mouse\" });\n }, []);\n\n useEffect(() => {\n if (hover.by === \"keyboard\" && hover.item !== undefined) {\n const index = virtualItems.findIndex((item) => item.id === hover.item);\n if (index !== -1) {\n rowVirtualizer.scrollToIndex(index, { align: \"center\" });\n }\n }\n }, [hover, rowVirtualizer, virtualItems]);\n\n const handleOnKeyDown = useCallback(\n (e) => {\n if (e.key === \"Enter\") {\n e.preventDefault();\n\n if (hover.item === undefined && filter === \"\") {\n return;\n }\n if (hover.item === \"addNew\") {\n handleEmpty(null);\n return;\n }\n if (hover.item === null && handleDefaultOptionChange) {\n handleDefaultOptionChange();\n return;\n }\n\n if (typeof hover.item !== \"undefined\" || hover.item !== null) {\n toggleSelected(hover.item);\n setFilter(\"\");\n }\n return;\n }\n setHover({\n item: handleKeyboardMovement(\n e,\n hover.item,\n flatOptions,\n showAddNew,\n showDefaultOption\n ),\n by: \"keyboard\",\n });\n },\n [\n filter,\n flatOptions,\n toggleSelected,\n handleDefaultOptionChange,\n handleEmpty,\n hover,\n showAddNew,\n showDefaultOption,\n ]\n );\n\n useEffect(() => {\n const listenerTarget = inputEl?.current;\n if (!listenerTarget) return;\n\n listenerTarget.addEventListener(\"input\", handleInputChange);\n listenerTarget.addEventListener(\"keydown\", handleOnKeyDown);\n return () => {\n listenerTarget.removeEventListener(\"input\", handleInputChange);\n listenerTarget.removeEventListener(\"keydown\", handleOnKeyDown);\n };\n }, [handleInputChange, handleOnKeyDown, inputEl]);\n\n const isDefaultOptionSelected = useCallback(() => {\n if (preselectDefaultValue) {\n return selectedOptions.length < 1 || selectedOptions[0] === \"\";\n } else {\n return (\n selectedOptions[0] === null ||\n selectedOptions.length === flatOptions.length\n );\n }\n }, [flatOptions.length, preselectDefaultValue, selectedOptions]);\n\n const renderVirtualItem = useCallback(\n (virtualItem: VirtualItem, index: number) => {\n switch (virtualItem.type) {\n case \"default\":\n return (\n <Option\n name={String(defaultValue)}\n ref={hover.item === null ? itemRef : null}\n hover={hover.item === null}\n onMouseEnter={handleMouseEnter}\n onClick={(e) => {\n e.preventDefault();\n toggleSelected(null);\n }}\n renderOption={renderOption(\n { name: defaultValue, id: null },\n {\n checked: isDefaultOptionSelected(),\n hover: hover.item === null,\n onChange: () => null,\n }\n )}\n />\n );\n\n case \"group\":\n if (!virtualItem.item || !isOptionGroup(virtualItem.item))\n return null;\n return (\n <OptionGroup\n checked={selectedOptions}\n name={virtualItem.item.name}\n tooltip={virtualItem.item.tooltip}\n key={virtualItem.item.id}\n setHover={handleHoverCallback}\n id={virtualItem.item.id}\n hover={hover.item}\n options={virtualItem.item.options}\n renderOptions={handleRenderOption}\n type={type}\n onChange={handleChange}\n filter={filter}\n mixedOptions={mixedOptions}\n />\n );\n\n case \"option\":\n if (!virtualItem.item || isOptionGroup(virtualItem.item)) return null;\n return (\n <Option\n name={(virtualItem.item as IOptionItemProps).name}\n ref={hover.item === virtualItem.id ? itemRef : null}\n key={index}\n tooltip={(virtualItem.item as IOptionItemProps).tooltip}\n onMouseEnter={() => handleMouseEnter(virtualItem.id)}\n onClick={handleClick}\n id={virtualItem.id}\n hover={virtualItem.id === hover.item}\n className={optionClassName}\n renderOption={renderOption(\n {\n ...(virtualItem.item as IOptionItemProps),\n name: highlightText(\n (virtualItem.item as IOptionItemProps).name,\n filter\n ),\n },\n {\n id: `option_${virtualItem.id}`,\n checked:\n selectedOptions && selectedOptions.includes(virtualItem.id),\n hover: hover.item === virtualItem.id,\n onChange: () => null,\n }\n )}\n />\n );\n\n case \"noResult\":\n return <StyledOption css=\"cursor: auto\">{noResultText}</StyledOption>;\n\n case \"addNew\":\n return (\n <StyledAutocompleteNewItem\n ref={hover.item === \"addNew\" ? itemRef : null}\n key=\"emptyValue\"\n hover={hover.item === \"addNew\"}\n onMouseDown={handleEmpty}\n onMouseEnter={onAddNewMouseEnter}\n >\n {emptyValue}\n </StyledAutocompleteNewItem>\n );\n\n default:\n return null;\n }\n },\n [\n defaultValue,\n hover.item,\n handleMouseEnter,\n renderOption,\n isDefaultOptionSelected,\n selectedOptions,\n handleHoverCallback,\n handleRenderOption,\n type,\n handleChange,\n filter,\n mixedOptions,\n handleClick,\n optionClassName,\n noResultText,\n handleEmpty,\n onAddNewMouseEnter,\n emptyValue,\n toggleSelected,\n ]\n );\n\n return (\n <StyledAutocompleteScrollShadow\n className={AutocompleteClassName}\n $isHidden={\n !defaultValue && !emptyValue && !noResultText && list.length < 1\n }\n >\n {({ onScroll }) => (\n <StyledAutocompleteBody key=\"body\" onMouseLeave={handleOnMouseLeave}>\n <div\n ref={listContainerRef}\n style={{\n height: `${Math.min(\n rowVirtualizer.getTotalSize() + 12,\n autoHeightMax\n )}px`,\n overflow: \"auto\",\n }}\n onScroll={(e) => {\n if (onScroll) onScroll(e);\n }}\n >\n <div\n style={{\n height: `${rowVirtualizer.getTotalSize()}px`,\n width: \"100%\",\n position: \"relative\",\n }}\n >\n {shouldUseVirtualization\n ? rowVirtualizer.getVirtualItems().map((virtualRow) => {\n const item = virtualItems[virtualRow.index];\n return (\n <div\n key={virtualRow.index}\n data-index={virtualRow.index}\n style={{\n position: \"absolute\",\n top: 0,\n left: 0,\n width: \"100%\",\n transform: `translateY(${virtualRow.start}px)`,\n }}\n >\n {renderVirtualItem(item, virtualRow.index)}\n </div>\n );\n })\n : virtualItems.map((item, index) => (\n <React.Fragment key={index}>\n {renderVirtualItem(item, index)}\n </React.Fragment>\n ))}\n </div>\n </div>\n </StyledAutocompleteBody>\n )}\n </StyledAutocompleteScrollShadow>\n );\n};\n\nAutocomplete.displayName = \"Autocomplete\";\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Autocomplete.d.ts","sourceRoot":"","sources":["../../../../src/components/Autocomplete/Autocomplete.tsx"],"names":[],"mappings":"AAAA,OAAc,EACZ,KAAK,EAAE,EAMP,KAAK,SAAS,EACd,KAAK,YAAY,EACjB,KAAK,gBAAgB,EACtB,MAAM,OAAO,CAAC;AAWf,OAAO,EAAE,KAAK,gBAAgB,EAAU,MAAM,kBAAkB,CAAC;AAEjE,OAAO,EAAE,KAAK,iBAAiB,EAAe,MAAM,uBAAuB,CAAC;AAE5E,wBAAgB,aAAa,CAC3B,IAAI,EAAE,iBAAiB,GAAG,gBAAgB,GACzC,IAAI,IAAI,iBAAiB,CAE3B;
|
|
1
|
+
{"version":3,"file":"Autocomplete.d.ts","sourceRoot":"","sources":["../../../../src/components/Autocomplete/Autocomplete.tsx"],"names":[],"mappings":"AAAA,OAAc,EACZ,KAAK,EAAE,EAMP,KAAK,SAAS,EACd,KAAK,YAAY,EACjB,KAAK,gBAAgB,EACtB,MAAM,OAAO,CAAC;AAWf,OAAO,EAAE,KAAK,gBAAgB,EAAU,MAAM,kBAAkB,CAAC;AAEjE,OAAO,EAAE,KAAK,iBAAiB,EAAe,MAAM,uBAAuB,CAAC;AAE5E,wBAAgB,aAAa,CAC3B,IAAI,EAAE,iBAAiB,GAAG,gBAAgB,GACzC,IAAI,IAAI,iBAAiB,CAE3B;AAkFD,MAAM,WAAW,kBAAkB;IACjC,sCAAsC;IACtC,IAAI,CAAC,EAAE,QAAQ,GAAG,UAAU,CAAC;IAC7B,uCAAuC;IACvC,OAAO,CAAC,EAAE,CAAC,iBAAiB,GAAG,gBAAgB,CAAC,EAAE,CAAC;IACnD,sBAAsB;IACtB,QAAQ,CAAC,EAAE,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,GAAG,MAAM,GAAG,MAAM,CAAC;IACjD,2BAA2B;IAC3B,YAAY,CAAC,EAAE,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,CAAC;IACnC,qBAAqB;IACrB,OAAO,CAAC,EAAE,gBAAgB,CAAC,gBAAgB,GAAG,IAAI,GAAG,SAAS,CAAC,CAAC;IAChE,2BAA2B;IAC3B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,yBAAyB;IACzB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,oBAAoB;IACpB,YAAY,CAAC,EAAE,CACb,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,EACjC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAC1B,MAAM,GAAG,YAAY,CAAC;IAC3B,gDAAgD;IAChD,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,gCAAgC;IAChC,aAAa,CAAC,EAAE,KAAK,GAAG,MAAM,CAAC;IAC/B,4BAA4B;IAC5B,YAAY,CAAC,EAAE,CACb,CAAC,EAAE,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,GAAG,MAAM,GAAG,MAAM,GAAG,IAAI,GAAG,SAAS,KACxD,IAAI,CAAC;IACV,kCAAkC;IAClC,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,wBAAwB;IACxB,iBAAiB,CAAC,EAAE,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,KAAK,IAAI,CAAC;IACjD,8BAA8B;IAC9B,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,2CAA2C;IAC3C,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,yCAAyC;IACzC,yBAAyB,CAAC,EAAE,MAAM,IAAI,CAAC;IACvC,uCAAuC;IACvC,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAChC,0DAA0D;IAC1D,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,6CAA6C;IAC7C,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,mDAAmD;IACnD,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,+DAA+D;IAC/D,cAAc,CAAC,EAAE,CAAC,MAAM,EAAE,gBAAgB,EAAE,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC;IACvE,qBAAqB,CAAC,EAAE,OAAO,CAAC;CACjC;AAcD,eAAO,MAAM,YAAY,EAAE,EAAE,CAAC,kBAAkB,CA2tB/C,CAAC"}
|
|
@@ -11,6 +11,41 @@ import { OptionGroup } from "../Select/OptionGroup";
|
|
|
11
11
|
export function isOptionGroup(item) {
|
|
12
12
|
return item.options !== undefined;
|
|
13
13
|
}
|
|
14
|
+
const collectLeafIds = opts => opts.reduce((acc, opt) => isOptionGroup(opt) ? [...acc, ...opt.options.map(o => o.id)] : [...acc, opt.id], []);
|
|
15
|
+
|
|
16
|
+
// Inserts an option at its alphabetical position among the options that share
|
|
17
|
+
// its checked state (checked items live at the top, so a checked option lands
|
|
18
|
+
// among the checked ones, sorted).
|
|
19
|
+
const insertAmongSameState = (list, item, isChecked) => {
|
|
20
|
+
const checked = isChecked(item.id);
|
|
21
|
+
let index = list.findIndex(o => isChecked(o.id) === checked && o.name.localeCompare(item.name) > 0);
|
|
22
|
+
if (index === -1) {
|
|
23
|
+
index = checked ? list.reduce((acc, o, i) => isChecked(o.id) ? i + 1 : acc, 0) : list.length;
|
|
24
|
+
}
|
|
25
|
+
return [...list.slice(0, index), item, ...list.slice(index)];
|
|
26
|
+
};
|
|
27
|
+
|
|
28
|
+
// Frozen options keep their order (checking/unchecking never moves them).
|
|
29
|
+
// Options that aren't frozen yet are slotted in among the checked items,
|
|
30
|
+
// alphabetically — that's how a freshly added option finds its place.
|
|
31
|
+
const reconcileFlat = (prev, next, frozen, isChecked) => {
|
|
32
|
+
const nextById = new Map(next.map(o => [o.id, o]));
|
|
33
|
+
const base = prev.filter(o => frozen.has(o.id) && nextById.has(o.id)).map(o => nextById.get(o.id));
|
|
34
|
+
const toPlace = next.filter(o => !frozen.has(o.id));
|
|
35
|
+
return toPlace.reduce((acc, item) => insertAmongSameState(acc, item, isChecked), base);
|
|
36
|
+
};
|
|
37
|
+
const reconcileOrder = (prev, next, frozen, isChecked) => {
|
|
38
|
+
if (!next.every(isOptionGroup) || !prev.every(isOptionGroup)) {
|
|
39
|
+
return reconcileFlat(prev, next, frozen, isChecked);
|
|
40
|
+
}
|
|
41
|
+
const prevGroupById = new Map(prev.map(group => [group.id, group]));
|
|
42
|
+
return next.map(group => {
|
|
43
|
+
var _prevGroupById$get$op, _prevGroupById$get;
|
|
44
|
+
return _extends({}, group, {
|
|
45
|
+
options: reconcileFlat((_prevGroupById$get$op = (_prevGroupById$get = prevGroupById.get(group.id)) == null ? void 0 : _prevGroupById$get.options) != null ? _prevGroupById$get$op : [], group.options, frozen, isChecked)
|
|
46
|
+
});
|
|
47
|
+
});
|
|
48
|
+
};
|
|
14
49
|
export const Autocomplete = _ref => {
|
|
15
50
|
let type = _ref.type,
|
|
16
51
|
_ref$options = _ref.options,
|
|
@@ -49,6 +84,11 @@ export const Autocomplete = _ref => {
|
|
|
49
84
|
}
|
|
50
85
|
return [selected];
|
|
51
86
|
}, [selected]);
|
|
87
|
+
|
|
88
|
+
// Ids whose position is fixed. Starts with everything present on open; a
|
|
89
|
+
// freshly added option joins this set once it becomes checked, so unchecking
|
|
90
|
+
// it later won't move it. Everything frozen keeps its order on every re-sort.
|
|
91
|
+
const frozenRef = useRef(new Set(collectLeafIds(options)));
|
|
52
92
|
const handleSort = useCallback(opts => {
|
|
53
93
|
var _opts$;
|
|
54
94
|
if (keepSameOptionsOrder) {
|
|
@@ -75,44 +115,65 @@ export const Autocomplete = _ref => {
|
|
|
75
115
|
return 0;
|
|
76
116
|
};
|
|
77
117
|
if (isGrouped) {
|
|
78
|
-
return opts.map(group => {
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
options: sortedGroupOptions
|
|
82
|
-
});
|
|
83
|
-
});
|
|
118
|
+
return opts.map(group => _extends({}, group, {
|
|
119
|
+
options: [...group.options].sort(sortOptions)
|
|
120
|
+
}));
|
|
84
121
|
} else {
|
|
85
|
-
return opts.sort(sortOptions);
|
|
122
|
+
return [...opts].sort(sortOptions);
|
|
86
123
|
}
|
|
87
|
-
},
|
|
88
|
-
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
89
|
-
[mixedOptions, selectedOptions]);
|
|
124
|
+
}, [keepSameOptionsOrder, selectedOptions, mixedOptions]);
|
|
90
125
|
const sortList = useCallback(options => {
|
|
91
126
|
var _options$;
|
|
92
127
|
if (disabledInternalSort) {
|
|
93
|
-
return handleSort(
|
|
128
|
+
return handleSort(options);
|
|
94
129
|
}
|
|
130
|
+
const alphaSort = (a, b) => sortDirection === "asc" ? a.name.localeCompare(b.name) : b.name.localeCompare(a.name);
|
|
95
131
|
const isGrouped = Array.isArray((_options$ = options[0]) == null ? void 0 : _options$.options);
|
|
96
132
|
if (isGrouped) {
|
|
97
|
-
const sortedOptions = options.map(group => {
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
options: handleSort(sortedGroupOptions)
|
|
101
|
-
});
|
|
102
|
-
});
|
|
133
|
+
const sortedOptions = options.map(group => _extends({}, group, {
|
|
134
|
+
options: handleSort([...group.options].sort(alphaSort))
|
|
135
|
+
}));
|
|
103
136
|
return handleSort(sortedOptions);
|
|
104
137
|
} else {
|
|
105
|
-
|
|
106
|
-
return handleSort(sortedOptions);
|
|
138
|
+
return handleSort([...options].sort(alphaSort));
|
|
107
139
|
}
|
|
108
140
|
}, [sortDirection, disabledInternalSort, handleSort]);
|
|
109
141
|
const _useState = useState(() => sortList(options)),
|
|
110
142
|
sortedList = _useState[0],
|
|
111
143
|
setSortedList = _useState[1];
|
|
144
|
+
|
|
145
|
+
// The order is established on open. Options present then keep their place for
|
|
146
|
+
// the whole session — checking/unchecking never reorders them. Options added
|
|
147
|
+
// afterwards are slotted in among the checked items, alphabetically. The
|
|
148
|
+
// selection key is a primitive so a fresh `selected = []` default can't loop.
|
|
149
|
+
const isInitialSortRef = useRef(true);
|
|
150
|
+
const selectedKey = selectedOptions.join(",");
|
|
112
151
|
useEffect(() => {
|
|
113
|
-
|
|
152
|
+
if (isInitialSortRef.current) {
|
|
153
|
+
isInitialSortRef.current = false;
|
|
154
|
+
return;
|
|
155
|
+
}
|
|
156
|
+
if (keepSameOptionsOrder) {
|
|
157
|
+
setSortedList(sortList(options));
|
|
158
|
+
return;
|
|
159
|
+
}
|
|
160
|
+
if (sortedList.length === 0) {
|
|
161
|
+
frozenRef.current = new Set(collectLeafIds(options));
|
|
162
|
+
setSortedList(sortList(options));
|
|
163
|
+
return;
|
|
164
|
+
}
|
|
165
|
+
const isChecked = id => selectedOptions.includes(id);
|
|
166
|
+
const frozen = frozenRef.current;
|
|
167
|
+
const nextFrozen = new Set(frozen);
|
|
168
|
+
collectLeafIds(options).forEach(id => {
|
|
169
|
+
if (!frozen.has(id) && isChecked(id)) {
|
|
170
|
+
nextFrozen.add(id);
|
|
171
|
+
}
|
|
172
|
+
});
|
|
173
|
+
frozenRef.current = nextFrozen;
|
|
174
|
+
setSortedList(reconcileOrder(sortedList, options, frozen, isChecked));
|
|
114
175
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
115
|
-
}, [options]);
|
|
176
|
+
}, [options, selectedKey]);
|
|
116
177
|
const _useState2 = useState({
|
|
117
178
|
item: undefined,
|
|
118
179
|
by: undefined
|