@entur/dropdown 7.3.7 → 7.3.9-beta.0
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/MultiSelect.d.ts +2 -2
- package/dist/SearchableDropdown.d.ts +2 -2
- package/dist/components/DropdownList.d.ts +4 -5
- package/dist/dropdown.cjs.js +145 -145
- package/dist/dropdown.cjs.js.map +1 -1
- package/dist/dropdown.esm.js +146 -146
- package/dist/dropdown.esm.js.map +1 -1
- package/dist/styles.css +4 -1
- package/dist/utils.d.ts +1 -1
- package/package.json +10 -10
package/dist/MultiSelect.d.ts
CHANGED
|
@@ -55,7 +55,7 @@ export type MultiSelectProps<ValueType> = Omit<DropdownProps<ValueType>, 'select
|
|
|
55
55
|
/** Callback som kalles når brukeren går ut av input-feltet */
|
|
56
56
|
onBlur?: (event: React.FocusEvent<HTMLInputElement>) => void;
|
|
57
57
|
/** Callback når komponenten klikkes */
|
|
58
|
-
onClick?: (event: React.MouseEvent<
|
|
58
|
+
onClick?: (event: React.MouseEvent<HTMLElement>) => void;
|
|
59
59
|
/** Callback når en tast trykkes */
|
|
60
60
|
onKeyDown?: (event: React.KeyboardEvent<HTMLDivElement>) => void;
|
|
61
61
|
/** Callback når komponenten får fokus */
|
|
@@ -115,7 +115,7 @@ export declare const MultiSelect: <ValueType extends unknown>(props: Omit<Dropdo
|
|
|
115
115
|
/** Callback som kalles når brukeren går ut av input-feltet */
|
|
116
116
|
onBlur?: (event: React.FocusEvent<HTMLInputElement>) => void;
|
|
117
117
|
/** Callback når komponenten klikkes */
|
|
118
|
-
onClick?: (event: React.MouseEvent<
|
|
118
|
+
onClick?: (event: React.MouseEvent<HTMLElement>) => void;
|
|
119
119
|
/** Callback når en tast trykkes */
|
|
120
120
|
onKeyDown?: (event: React.KeyboardEvent<HTMLDivElement>) => void;
|
|
121
121
|
/** Callback når komponenten får fokus */
|
|
@@ -17,7 +17,7 @@ export type SearchableDropdownProps<ValueType> = DropdownProps<ValueType> & {
|
|
|
17
17
|
/** Callback som kalles når brukeren går ut av input-feltet */
|
|
18
18
|
onBlur?: (event: React.FocusEvent<HTMLInputElement>) => void;
|
|
19
19
|
/** Callback når komponenten klikkes */
|
|
20
|
-
onClick?: (event: React.MouseEvent<
|
|
20
|
+
onClick?: (event: React.MouseEvent<HTMLElement>) => void;
|
|
21
21
|
/** Callback når en tast trykkes */
|
|
22
22
|
onKeyDown?: (event: React.KeyboardEvent<HTMLDivElement>) => void;
|
|
23
23
|
/** Callback når komponenten får fokus */
|
|
@@ -39,7 +39,7 @@ export declare const SearchableDropdown: <ValueType extends unknown>(props: Drop
|
|
|
39
39
|
/** Callback som kalles når brukeren går ut av input-feltet */
|
|
40
40
|
onBlur?: (event: React.FocusEvent<HTMLInputElement>) => void;
|
|
41
41
|
/** Callback når komponenten klikkes */
|
|
42
|
-
onClick?: (event: React.MouseEvent<
|
|
42
|
+
onClick?: (event: React.MouseEvent<HTMLElement>) => void;
|
|
43
43
|
/** Callback når en tast trykkes */
|
|
44
44
|
onKeyDown?: (event: React.KeyboardEvent<HTMLDivElement>) => void;
|
|
45
45
|
/** Callback når komponenten får fokus */
|
|
@@ -1,10 +1,9 @@
|
|
|
1
|
-
import { default as React } from 'react';
|
|
1
|
+
import { default as React, MutableRefObject } from 'react';
|
|
2
2
|
import { UseComboboxPropGetters, UseSelectPropGetters } from 'downshift';
|
|
3
3
|
import { NormalizedDropdownItemType } from '../types';
|
|
4
4
|
type DropdownListProps<ValueType> = {
|
|
5
5
|
ariaLabelChosenSingular?: string;
|
|
6
6
|
ariaLabelSelectedItem?: string;
|
|
7
|
-
getMenuProps: UseComboboxPropGetters<ValueType>['getMenuProps'] | UseSelectPropGetters<ValueType>['getMenuProps'];
|
|
8
7
|
getItemProps: UseComboboxPropGetters<ValueType>['getItemProps'] | UseSelectPropGetters<ValueType>['getItemProps'];
|
|
9
8
|
highlightedIndex: number;
|
|
10
9
|
isOpen: boolean;
|
|
@@ -12,15 +11,15 @@ type DropdownListProps<ValueType> = {
|
|
|
12
11
|
floatingStyles: {
|
|
13
12
|
[key: string]: any;
|
|
14
13
|
} | undefined;
|
|
15
|
-
|
|
14
|
+
innerRef?: MutableRefObject<HTMLUListElement> | ((node: HTMLElement | null) => void);
|
|
16
15
|
loading?: boolean;
|
|
17
16
|
loadingText?: string;
|
|
18
17
|
noMatchesText?: string;
|
|
19
|
-
selectAllCheckboxState?:
|
|
18
|
+
selectAllCheckboxState?: boolean | 'indeterminate';
|
|
20
19
|
selectAllItem?: NormalizedDropdownItemType<string>;
|
|
21
20
|
selectedItems: NormalizedDropdownItemType<ValueType>[];
|
|
22
21
|
style?: React.CSSProperties;
|
|
23
22
|
readOnly?: boolean;
|
|
24
23
|
};
|
|
25
|
-
export declare const DropdownList: <ValueType extends unknown>({ ariaLabelChosenSingular, ariaLabelSelectedItem, getItemProps,
|
|
24
|
+
export declare const DropdownList: <ValueType extends unknown>({ ariaLabelChosenSingular, ariaLabelSelectedItem, getItemProps, isOpen, highlightedIndex, listItems, floatingStyles, innerRef, loading, loadingText, noMatchesText, readOnly, selectAllCheckboxState, selectAllItem, selectedItems, style, ...rest }: DropdownListProps<ValueType>) => React.JSX.Element;
|
|
26
25
|
export {};
|
package/dist/dropdown.cjs.js
CHANGED
|
@@ -18,28 +18,32 @@ const DropdownList = ({
|
|
|
18
18
|
ariaLabelChosenSingular = "valgt",
|
|
19
19
|
ariaLabelSelectedItem = ", valgt element, trykk for å fjerne",
|
|
20
20
|
getItemProps,
|
|
21
|
-
getMenuProps,
|
|
22
21
|
isOpen,
|
|
23
22
|
highlightedIndex,
|
|
24
23
|
listItems,
|
|
25
24
|
floatingStyles,
|
|
26
|
-
|
|
25
|
+
innerRef,
|
|
27
26
|
loading = false,
|
|
28
27
|
loadingText = "Laster inn …",
|
|
29
28
|
noMatchesText = "Ingen treff for søket",
|
|
29
|
+
readOnly = false,
|
|
30
30
|
selectAllCheckboxState,
|
|
31
31
|
selectAllItem,
|
|
32
32
|
selectedItems,
|
|
33
|
-
|
|
33
|
+
style,
|
|
34
34
|
...rest
|
|
35
35
|
}) => {
|
|
36
36
|
const isMultiselect = selectAllItem !== void 0;
|
|
37
37
|
const isNoMatches = !loading && (listItems.length === 0 || listItems?.length === 1 && listItems?.[0]?.value === selectAllItem?.value);
|
|
38
|
-
const isItemSelected = (item) => selectedItems.some(
|
|
39
|
-
(selectedItem
|
|
40
|
-
|
|
38
|
+
const isItemSelected = (item) => selectedItems.some((selectedItem) => {
|
|
39
|
+
if (selectedItem?.value !== item?.value) return false;
|
|
40
|
+
if (selectedItem?.label && item?.label) {
|
|
41
|
+
return selectedItem.label === item.label;
|
|
42
|
+
}
|
|
43
|
+
return true;
|
|
44
|
+
});
|
|
41
45
|
const ariaValuesSelectAll = () => {
|
|
42
|
-
switch (selectAllCheckboxState
|
|
46
|
+
switch (selectAllCheckboxState) {
|
|
43
47
|
case "indeterminate": {
|
|
44
48
|
return {
|
|
45
49
|
label: `${selectAllItem?.label}, delvis valgt`,
|
|
@@ -62,7 +66,7 @@ const DropdownList = ({
|
|
|
62
66
|
form.Checkbox,
|
|
63
67
|
{
|
|
64
68
|
"aria-hidden": "true",
|
|
65
|
-
checked: selectAllCheckboxState
|
|
69
|
+
checked: selectAllCheckboxState,
|
|
66
70
|
className: "eds-dropdown__list__item__checkbox",
|
|
67
71
|
tabIndex: -1,
|
|
68
72
|
onChange: () => void 0
|
|
@@ -109,75 +113,68 @@ const DropdownList = ({
|
|
|
109
113
|
}) : null
|
|
110
114
|
] });
|
|
111
115
|
};
|
|
112
|
-
return (
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
"
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
{
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
},
|
|
175
|
-
key
|
|
176
|
-
);
|
|
177
|
-
});
|
|
178
|
-
})()
|
|
179
|
-
}
|
|
180
|
-
)
|
|
116
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
117
|
+
"ul",
|
|
118
|
+
{
|
|
119
|
+
className: "eds-dropdown__list",
|
|
120
|
+
ref: innerRef,
|
|
121
|
+
style: {
|
|
122
|
+
display: isOpen && !readOnly ? void 0 : "none",
|
|
123
|
+
...floatingStyles,
|
|
124
|
+
...style
|
|
125
|
+
},
|
|
126
|
+
...rest,
|
|
127
|
+
children: (() => {
|
|
128
|
+
if (!isOpen || readOnly) return null;
|
|
129
|
+
if (loading) {
|
|
130
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
131
|
+
"li",
|
|
132
|
+
{
|
|
133
|
+
className: "eds-dropdown__list__item",
|
|
134
|
+
children: loadingText
|
|
135
|
+
},
|
|
136
|
+
"dropdown-list-loading"
|
|
137
|
+
);
|
|
138
|
+
}
|
|
139
|
+
if (isNoMatches) {
|
|
140
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
141
|
+
"li",
|
|
142
|
+
{
|
|
143
|
+
className: "eds-dropdown__list__item",
|
|
144
|
+
children: noMatchesText
|
|
145
|
+
},
|
|
146
|
+
"dropdown-list-no-match"
|
|
147
|
+
);
|
|
148
|
+
}
|
|
149
|
+
return listItems.map((item, index) => {
|
|
150
|
+
const key = item.itemKey ?? `${item.label ?? ""}-${item.value ?? ""}-${(item.icons ?? []).map((icon) => icon?.displayName ?? icon?.name ?? "unknown").join("-")}`;
|
|
151
|
+
const itemIsSelectAll = item.value === selectAllItem?.value;
|
|
152
|
+
if (itemIsSelectAll && listItems.length <= 2) return null;
|
|
153
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
154
|
+
"li",
|
|
155
|
+
{
|
|
156
|
+
className: classNames("eds-dropdown__list__item", {
|
|
157
|
+
"eds-dropdown__list__item--select-all": itemIsSelectAll,
|
|
158
|
+
"eds-dropdown__list__item--highlighted": highlightedIndex === index,
|
|
159
|
+
"eds-dropdown__list__item--selected": !isMultiselect && isItemSelected(item)
|
|
160
|
+
}),
|
|
161
|
+
...getItemProps({
|
|
162
|
+
// @ts-expect-error Since getItemProps expects the same item type
|
|
163
|
+
// here as items, it throws error when selectAllItem is a string.
|
|
164
|
+
// This does, however, not cause any functional issues.
|
|
165
|
+
item,
|
|
166
|
+
index,
|
|
167
|
+
"aria-selected": itemIsSelectAll ? ariaValuesSelectAll().selected : isItemSelected(item)
|
|
168
|
+
}),
|
|
169
|
+
children: itemIsSelectAll ? selectAllListItemContent() : listItemContent(
|
|
170
|
+
item
|
|
171
|
+
)
|
|
172
|
+
},
|
|
173
|
+
key
|
|
174
|
+
);
|
|
175
|
+
});
|
|
176
|
+
})()
|
|
177
|
+
}
|
|
181
178
|
);
|
|
182
179
|
};
|
|
183
180
|
const SelectedItemTag = ({
|
|
@@ -453,11 +450,11 @@ const useMultiselectUtils = ({
|
|
|
453
450
|
(selectedItem) => selectedItem.value !== clickedItem.value
|
|
454
451
|
)
|
|
455
452
|
);
|
|
456
|
-
const selectAllCheckboxState = () => {
|
|
453
|
+
const selectAllCheckboxState = React.useMemo(() => {
|
|
457
454
|
if (allListItemsAreSelected) return true;
|
|
458
455
|
if (someListItemsAreSelected) return "indeterminate";
|
|
459
456
|
return false;
|
|
460
|
-
};
|
|
457
|
+
}, [allListItemsAreSelected, someListItemsAreSelected]);
|
|
461
458
|
const selectAllUnselectedItemsInListItems = (onChange) => {
|
|
462
459
|
onChange([...selectedItems, ...unselectedItemsInListItems]);
|
|
463
460
|
};
|
|
@@ -551,7 +548,6 @@ const SearchableDropdown = React.forwardRef(
|
|
|
551
548
|
const resetInputState = ({
|
|
552
549
|
changes
|
|
553
550
|
}) => {
|
|
554
|
-
updateListItems({ inputValue: EMPTY_INPUT });
|
|
555
551
|
return {
|
|
556
552
|
...changes,
|
|
557
553
|
inputValue: EMPTY_INPUT
|
|
@@ -580,11 +576,12 @@ const SearchableDropdown = React.forwardRef(
|
|
|
580
576
|
// empty input to show selected item and reset dropdown list on item selection
|
|
581
577
|
case downshift.useCombobox.stateChangeTypes.ItemClick:
|
|
582
578
|
case downshift.useCombobox.stateChangeTypes.InputKeyDownEnter:
|
|
583
|
-
case downshift.useCombobox.stateChangeTypes.InputBlur:
|
|
584
579
|
return resetInputState({ changes });
|
|
580
|
+
case downshift.useCombobox.stateChangeTypes.InputBlur:
|
|
581
|
+
return resetInputState({
|
|
582
|
+
changes: { ...changes, selectedItem: value }
|
|
583
|
+
});
|
|
585
584
|
case downshift.useCombobox.stateChangeTypes.ControlledPropUpdatedSelectedItem:
|
|
586
|
-
if (changes.selectedItem !== null && !inputHasFocus)
|
|
587
|
-
setShowSelectedItem(true);
|
|
588
585
|
return resetInputState({ changes });
|
|
589
586
|
// remove leading whitespace, select element with spacebar on empty input
|
|
590
587
|
case downshift.useCombobox.stateChangeTypes.InputChange: {
|
|
@@ -655,19 +652,17 @@ const SearchableDropdown = React.forwardRef(
|
|
|
655
652
|
reactDom.offset(tokens.space.extraSmall2),
|
|
656
653
|
reactDom.shift({ padding: tokens.space.extraSmall }),
|
|
657
654
|
reactDom.size({
|
|
658
|
-
apply({
|
|
659
|
-
|
|
660
|
-
|
|
661
|
-
|
|
662
|
-
|
|
663
|
-
maxHeight: `${clamp(10 * 16, availableHeight, 20 * 16)}px`
|
|
664
|
-
});
|
|
655
|
+
apply({ elements, availableHeight }) {
|
|
656
|
+
elements.floating.style.setProperty(
|
|
657
|
+
"--list-max-height",
|
|
658
|
+
`${clamp(10 * 16, availableHeight, 20 * 16)}px`
|
|
659
|
+
);
|
|
665
660
|
}
|
|
666
661
|
}),
|
|
667
662
|
reactDom.flip({ fallbackStrategy: "initialPlacement" })
|
|
668
663
|
]
|
|
669
664
|
});
|
|
670
|
-
React.
|
|
665
|
+
React.useLayoutEffect(() => {
|
|
671
666
|
if (isOpen && refs.reference.current && refs.floating.current) {
|
|
672
667
|
return reactDom.autoUpdate(
|
|
673
668
|
refs.reference.current,
|
|
@@ -698,9 +693,7 @@ const SearchableDropdown = React.forwardRef(
|
|
|
698
693
|
labelProps: getLabelProps(),
|
|
699
694
|
labelTooltip,
|
|
700
695
|
onClick: (e) => {
|
|
701
|
-
if (e.target === e.currentTarget)
|
|
702
|
-
getInputProps()?.onClick?.(e);
|
|
703
|
-
}
|
|
696
|
+
if (e.target === e.currentTarget) getInputProps()?.onClick?.(e);
|
|
704
697
|
onClick?.(e);
|
|
705
698
|
},
|
|
706
699
|
onKeyDown,
|
|
@@ -718,17 +711,19 @@ const SearchableDropdown = React.forwardRef(
|
|
|
718
711
|
ariaLabelSelectedItem,
|
|
719
712
|
floatingStyles,
|
|
720
713
|
getItemProps,
|
|
721
|
-
getMenuProps,
|
|
722
714
|
highlightedIndex,
|
|
723
715
|
isOpen,
|
|
724
716
|
listItems,
|
|
725
|
-
style: listStyle,
|
|
726
|
-
setListRef: refs.setFloating,
|
|
727
717
|
loading: loading ?? resolvedItemsLoading,
|
|
728
718
|
loadingText,
|
|
729
719
|
noMatchesText,
|
|
730
720
|
selectedItems: selectedItem !== null ? [selectedItem] : [],
|
|
731
|
-
readOnly
|
|
721
|
+
readOnly,
|
|
722
|
+
...getMenuProps({
|
|
723
|
+
refKey: "innerRef",
|
|
724
|
+
ref: refs.setFloating,
|
|
725
|
+
style: listStyle
|
|
726
|
+
})
|
|
732
727
|
}
|
|
733
728
|
),
|
|
734
729
|
...rest,
|
|
@@ -760,8 +755,9 @@ const SearchableDropdown = React.forwardRef(
|
|
|
760
755
|
onKeyDown(e) {
|
|
761
756
|
if (isOpen && e.key === "Tab") {
|
|
762
757
|
const highlitedItem = listItems[highlightedIndex];
|
|
763
|
-
if ((selectOnTab || selectOnBlur) && highlitedItem
|
|
758
|
+
if ((selectOnTab || selectOnBlur) && highlitedItem) {
|
|
764
759
|
selectItem(highlitedItem);
|
|
760
|
+
setShowSelectedItem(true);
|
|
765
761
|
}
|
|
766
762
|
}
|
|
767
763
|
},
|
|
@@ -883,15 +879,21 @@ const MultiSelect = React.forwardRef(
|
|
|
883
879
|
...!hideSelectAll ? [selectAll] : [],
|
|
884
880
|
...normalizedItems
|
|
885
881
|
]);
|
|
886
|
-
const filterListItems = (
|
|
887
|
-
|
|
888
|
-
|
|
889
|
-
|
|
890
|
-
|
|
891
|
-
|
|
892
|
-
|
|
893
|
-
|
|
894
|
-
|
|
882
|
+
const filterListItems = React.useCallback(
|
|
883
|
+
({ inputValue: inputValue2 }) => setListItems([
|
|
884
|
+
...!hideSelectAll ? [selectAll] : [],
|
|
885
|
+
...normalizedItems.filter((item) => itemFilter(item, inputValue2))
|
|
886
|
+
]),
|
|
887
|
+
[hideSelectAll, selectAll, normalizedItems, itemFilter]
|
|
888
|
+
);
|
|
889
|
+
const updateListItems = React.useCallback(
|
|
890
|
+
({ inputValue: inputValue2 }) => {
|
|
891
|
+
const shouldRefetchItems = isFunctionWithQueryArgument(initialItems);
|
|
892
|
+
if (shouldRefetchItems) fetchItems(inputValue2 ?? EMPTY_INPUT);
|
|
893
|
+
filterListItems({ inputValue: inputValue2 ?? EMPTY_INPUT });
|
|
894
|
+
},
|
|
895
|
+
[filterListItems, initialItems, fetchItems]
|
|
896
|
+
);
|
|
895
897
|
React.useEffect(() => {
|
|
896
898
|
filterListItems({ inputValue });
|
|
897
899
|
}, [normalizedItems]);
|
|
@@ -956,6 +958,8 @@ const MultiSelect = React.forwardRef(
|
|
|
956
958
|
case downshift.useCombobox.stateChangeTypes.InputChange: {
|
|
957
959
|
const leadingWhitespaceTest = /^\s+/g;
|
|
958
960
|
const isSpacePressedOnEmptyInput = changes.inputValue === " ";
|
|
961
|
+
if (!isSpacePressedOnEmptyInput)
|
|
962
|
+
setLastHighlightedIndex(hideSelectAll ? 0 : 1);
|
|
959
963
|
if (changes.inputValue?.match(leadingWhitespaceTest)) {
|
|
960
964
|
const sanitizedInputValue = changes.inputValue.replace(
|
|
961
965
|
leadingWhitespaceTest,
|
|
@@ -977,13 +981,13 @@ const MultiSelect = React.forwardRef(
|
|
|
977
981
|
}
|
|
978
982
|
}
|
|
979
983
|
}
|
|
980
|
-
return changes;
|
|
984
|
+
return { ...changes, highlightedIndex: hideSelectAll ? 0 : 1 };
|
|
981
985
|
}
|
|
982
986
|
default:
|
|
983
987
|
return changes;
|
|
984
988
|
}
|
|
985
989
|
},
|
|
986
|
-
[hideSelectAll, normalizedItems,
|
|
990
|
+
[hideSelectAll, normalizedItems, initialItems]
|
|
987
991
|
);
|
|
988
992
|
const {
|
|
989
993
|
getInputProps,
|
|
@@ -992,7 +996,6 @@ const MultiSelect = React.forwardRef(
|
|
|
992
996
|
getMenuProps,
|
|
993
997
|
getToggleButtonProps,
|
|
994
998
|
highlightedIndex,
|
|
995
|
-
setHighlightedIndex,
|
|
996
999
|
inputValue,
|
|
997
1000
|
isOpen,
|
|
998
1001
|
setInputValue
|
|
@@ -1005,8 +1008,6 @@ const MultiSelect = React.forwardRef(
|
|
|
1005
1008
|
stateReducer,
|
|
1006
1009
|
onInputValueChange(changes) {
|
|
1007
1010
|
updateListItems({ inputValue: changes.inputValue });
|
|
1008
|
-
setHighlightedIndex(hideSelectAll ? 0 : 1);
|
|
1009
|
-
setLastHighlightedIndex(hideSelectAll ? 0 : 1);
|
|
1010
1011
|
},
|
|
1011
1012
|
onSelectedItemChange({ selectedItem: clickedItem }) {
|
|
1012
1013
|
if (!clickedItem) return;
|
|
@@ -1030,19 +1031,17 @@ const MultiSelect = React.forwardRef(
|
|
|
1030
1031
|
reactDom.offset(tokens.space.extraSmall2),
|
|
1031
1032
|
reactDom.shift({ padding: tokens.space.extraSmall }),
|
|
1032
1033
|
reactDom.size({
|
|
1033
|
-
apply({
|
|
1034
|
-
|
|
1035
|
-
|
|
1036
|
-
|
|
1037
|
-
|
|
1038
|
-
maxHeight: `${clamp(10 * 16, availableHeight, 20 * 16)}px`
|
|
1039
|
-
});
|
|
1034
|
+
apply({ elements, availableHeight }) {
|
|
1035
|
+
elements.floating.style.setProperty(
|
|
1036
|
+
"--list-max-height",
|
|
1037
|
+
`${clamp(10 * 16, availableHeight, 20 * 16)}px`
|
|
1038
|
+
);
|
|
1040
1039
|
}
|
|
1041
1040
|
}),
|
|
1042
1041
|
reactDom.flip({ fallbackStrategy: "initialPlacement" })
|
|
1043
1042
|
]
|
|
1044
1043
|
});
|
|
1045
|
-
React.
|
|
1044
|
+
React.useLayoutEffect(() => {
|
|
1046
1045
|
if (isOpen && refs.reference.current && refs.floating.current) {
|
|
1047
1046
|
return reactDom.autoUpdate(
|
|
1048
1047
|
refs.reference.current,
|
|
@@ -1072,14 +1071,8 @@ const MultiSelect = React.forwardRef(
|
|
|
1072
1071
|
labelId: getLabelProps().id,
|
|
1073
1072
|
labelProps: getLabelProps(),
|
|
1074
1073
|
labelTooltip,
|
|
1075
|
-
onBlur: (e) => {
|
|
1076
|
-
setInputValue("");
|
|
1077
|
-
onBlur?.(e);
|
|
1078
|
-
},
|
|
1079
1074
|
onClick: (e) => {
|
|
1080
|
-
if (e.target === e.currentTarget)
|
|
1081
|
-
getInputProps()?.onClick?.(e);
|
|
1082
|
-
}
|
|
1075
|
+
if (e.target === e.currentTarget) getInputProps()?.onClick?.(e);
|
|
1083
1076
|
onClick?.(e);
|
|
1084
1077
|
},
|
|
1085
1078
|
onKeyDown,
|
|
@@ -1095,19 +1088,22 @@ const MultiSelect = React.forwardRef(
|
|
|
1095
1088
|
ariaLabelSelectedItem,
|
|
1096
1089
|
floatingStyles,
|
|
1097
1090
|
getItemProps,
|
|
1098
|
-
getMenuProps,
|
|
1099
1091
|
highlightedIndex,
|
|
1100
1092
|
isOpen,
|
|
1101
1093
|
listItems,
|
|
1102
|
-
style: listStyle,
|
|
1103
|
-
setListRef: refs.setFloating,
|
|
1104
1094
|
loading: loading ?? resolvedItemsLoading,
|
|
1105
1095
|
loadingText,
|
|
1106
1096
|
noMatchesText,
|
|
1107
1097
|
selectAllCheckboxState,
|
|
1108
1098
|
selectAllItem: selectAll,
|
|
1109
1099
|
selectedItems,
|
|
1110
|
-
readOnly
|
|
1100
|
+
readOnly,
|
|
1101
|
+
...getMenuProps({
|
|
1102
|
+
"aria-multiselectable": true,
|
|
1103
|
+
refKey: "innerRef",
|
|
1104
|
+
ref: refs.setFloating,
|
|
1105
|
+
style: listStyle
|
|
1106
|
+
})
|
|
1111
1107
|
}
|
|
1112
1108
|
),
|
|
1113
1109
|
...rest,
|
|
@@ -1166,6 +1162,10 @@ const MultiSelect = React.forwardRef(
|
|
|
1166
1162
|
});
|
|
1167
1163
|
}
|
|
1168
1164
|
},
|
|
1165
|
+
onBlur: (e) => {
|
|
1166
|
+
setInputValue("");
|
|
1167
|
+
onBlur?.(e);
|
|
1168
|
+
},
|
|
1169
1169
|
...getDropdownProps({
|
|
1170
1170
|
preventKeyAction: isOpen,
|
|
1171
1171
|
value: inputValue ?? EMPTY_INPUT,
|
|
@@ -1276,19 +1276,17 @@ const Dropdown = React.forwardRef(
|
|
|
1276
1276
|
reactDom.offset(tokens.space.extraSmall2),
|
|
1277
1277
|
reactDom.shift({ padding: tokens.space.extraSmall }),
|
|
1278
1278
|
reactDom.size({
|
|
1279
|
-
apply({
|
|
1280
|
-
|
|
1281
|
-
|
|
1282
|
-
|
|
1283
|
-
|
|
1284
|
-
maxHeight: `${clamp(10 * 16, availableHeight, 20 * 16)}px`
|
|
1285
|
-
});
|
|
1279
|
+
apply({ elements, availableHeight }) {
|
|
1280
|
+
elements.floating.style.setProperty(
|
|
1281
|
+
"--list-max-height",
|
|
1282
|
+
`${clamp(10 * 16, availableHeight, 20 * 16)}px`
|
|
1283
|
+
);
|
|
1286
1284
|
}
|
|
1287
1285
|
}),
|
|
1288
1286
|
reactDom.flip({ fallbackStrategy: "initialPlacement" })
|
|
1289
1287
|
]
|
|
1290
1288
|
});
|
|
1291
|
-
React.
|
|
1289
|
+
React.useLayoutEffect(() => {
|
|
1292
1290
|
if (isOpen && refs.reference.current && refs.floating.current) {
|
|
1293
1291
|
return reactDom.autoUpdate(
|
|
1294
1292
|
refs.reference.current,
|
|
@@ -1341,17 +1339,19 @@ const Dropdown = React.forwardRef(
|
|
|
1341
1339
|
ariaLabelSelectedItem,
|
|
1342
1340
|
floatingStyles,
|
|
1343
1341
|
getItemProps,
|
|
1344
|
-
getMenuProps,
|
|
1345
1342
|
highlightedIndex,
|
|
1346
1343
|
isOpen,
|
|
1347
1344
|
listItems: normalizedItems,
|
|
1348
|
-
noMatchesText,
|
|
1349
|
-
style: listStyle,
|
|
1350
|
-
setListRef: refs.setFloating,
|
|
1351
1345
|
loading: loading ?? resolvedItemsLoading,
|
|
1352
1346
|
loadingText,
|
|
1347
|
+
noMatchesText,
|
|
1353
1348
|
selectedItems: selectedItem !== null ? [selectedItem] : [],
|
|
1354
|
-
readOnly
|
|
1349
|
+
readOnly,
|
|
1350
|
+
...getMenuProps({
|
|
1351
|
+
refKey: "innerRef",
|
|
1352
|
+
ref: refs.setFloating,
|
|
1353
|
+
style: listStyle
|
|
1354
|
+
})
|
|
1355
1355
|
}
|
|
1356
1356
|
),
|
|
1357
1357
|
...rest,
|