fix(autocomplete): support isReadOnly for dynamic collections in Autocomplete (#2458)

This commit is contained in:
աӄա 2024-03-08 22:22:45 +08:00 committed by GitHub
parent e4b3c7d1a1
commit 7263daca08
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 16 additions and 4 deletions

View File

@ -0,0 +1,8 @@
---
"@nextui-org/autocomplete": patch
"@nextui-org/dropdown": patch
"@nextui-org/popover": patch
"@nextui-org/tooltip": patch
---
fix(autocomplete): support isReadOnly for dynamic collections in Autocomplete

View File

@ -163,15 +163,12 @@ export function useAutocomplete<T extends object>(originalProps: UseAutocomplete
// Setup filter function and state.
const {contains} = useFilter(filterOptions);
const state = useComboBoxState({
let state = useComboBoxState({
...originalProps,
children,
menuTrigger,
shouldCloseOnBlur,
allowsEmptyCollection,
...(isReadOnly && {
disabledKeys: (children as unknown as Record<string, any>[]).map((o) => o.key),
}),
defaultFilter: defaultFilter && typeof defaultFilter === "function" ? defaultFilter : contains,
onOpenChange: (open, menuTrigger) => {
onOpenChange?.(open, menuTrigger);
@ -181,6 +178,13 @@ export function useAutocomplete<T extends object>(originalProps: UseAutocomplete
},
});
state = {
...state,
...(isReadOnly && {
disabledKeys: new Set([...state.collection.getKeys()].map((k) => k)),
}),
};
// Setup refs and get props for child elements.
const buttonRef = useRef<HTMLButtonElement>(null);
const inputWrapperRef = useRef<HTMLDivElement>(null);