mirror of
https://github.com/nextui-org/nextui.git
synced 2025-12-08 19:26:11 +00:00
fix(select): disabled select shouldn't get update by keyboard (#2649)
* fix(select): disable all keys for isDisabled case * fix(select): add "disabled select shouldn't update by keyboard" test case * refactor(select): remove unnecessary map
This commit is contained in:
parent
c2ef4c0935
commit
e458432550
5
.changeset/nervous-geckos-visit.md
Normal file
5
.changeset/nervous-geckos-visit.md
Normal file
@ -0,0 +1,5 @@
|
||||
---
|
||||
"@nextui-org/select": patch
|
||||
---
|
||||
|
||||
Fixed Disabled Select Allows Changes Using Blur + Keyboard (#2345)
|
||||
@ -361,4 +361,39 @@ describe("Select", () => {
|
||||
// assert that the select is closed
|
||||
expect(select).toHaveAttribute("aria-expanded", "false");
|
||||
});
|
||||
|
||||
it("disabled select shouldn't update by keyboard", async () => {
|
||||
let onSelectionChange = jest.fn();
|
||||
|
||||
const wrapper = render(
|
||||
<Select
|
||||
isDisabled
|
||||
aria-label="Favorite Animal"
|
||||
data-testid="test-select"
|
||||
label="Favorite Animal"
|
||||
selectionMode="single"
|
||||
value="penguin"
|
||||
onSelectionChange={onSelectionChange}
|
||||
>
|
||||
<SelectItem key="penguin" value="penguin">
|
||||
Penguin
|
||||
</SelectItem>
|
||||
<SelectItem key="zebra" value="zebra">
|
||||
Zebra
|
||||
</SelectItem>
|
||||
<SelectItem key="shark" value="shark">
|
||||
Shark
|
||||
</SelectItem>
|
||||
</Select>,
|
||||
);
|
||||
const select = wrapper.getByTestId("test-select");
|
||||
|
||||
await act(async () => {
|
||||
await userEvent.click(document.body);
|
||||
await userEvent.tab();
|
||||
await userEvent.type(select, "z", {skipClick: true});
|
||||
|
||||
expect(onSelectionChange).toBeCalledTimes(0);
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
@ -204,7 +204,7 @@ export function useSelect<T extends object>(originalProps: UseSelectProps<T>) {
|
||||
const listBoxRef = useRef<HTMLUListElement>(null);
|
||||
const popoverRef = useRef<HTMLDivElement>(null);
|
||||
|
||||
const state = useMultiSelectState<T>({
|
||||
let state = useMultiSelectState<T>({
|
||||
...props,
|
||||
isOpen,
|
||||
selectionMode,
|
||||
@ -235,6 +235,13 @@ export function useSelect<T extends object>(originalProps: UseSelectProps<T>) {
|
||||
},
|
||||
});
|
||||
|
||||
state = {
|
||||
...state,
|
||||
...(originalProps?.isDisabled && {
|
||||
disabledKeys: new Set([...state.collection.getKeys()]),
|
||||
}),
|
||||
};
|
||||
|
||||
const {labelProps, triggerProps, valueProps, menuProps, descriptionProps, errorMessageProps} =
|
||||
useMultiSelect(
|
||||
{...props, disallowEmptySelection, isDisabled: originalProps?.isDisabled},
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user