Skip to content

Commit

Permalink
fix(autocomplete): clear autocomplete value when pressing clear button
Browse files Browse the repository at this point in the history
  • Loading branch information
wingkwong committed Dec 29, 2024
1 parent 4f0ef58 commit 117310c
Show file tree
Hide file tree
Showing 3 changed files with 49 additions and 5 deletions.
5 changes: 5 additions & 0 deletions .changeset/nice-books-yell.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
"@nextui-org/autocomplete": patch
---

clear autocomplete value when pressing clear button (#4402)
43 changes: 43 additions & 0 deletions packages/components/autocomplete/__tests__/autocomplete.test.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -235,6 +235,49 @@ describe("Autocomplete", () => {
expect(autocomplete).toHaveFocus();
});

it("should clear arbitrary value after clicking clear button", async () => {
const wrapper = render(
<Autocomplete aria-label="Favorite Animal" data-testid="autocomplete" label="Favorite Animal">
<AutocompleteItem key="penguin" value="penguin">
Penguin
</AutocompleteItem>
<AutocompleteItem key="zebra" value="zebra">
Zebra
</AutocompleteItem>
<AutocompleteItem key="shark" value="shark">
Shark
</AutocompleteItem>
</Autocomplete>,
);

const autocomplete = wrapper.getByTestId("autocomplete");

// open the select listbox
await user.click(autocomplete);

// assert that the autocomplete listbox is open
expect(autocomplete).toHaveAttribute("aria-expanded", "true");

await user.keyboard("pe");

const {container} = wrapper;

const clearButton = container.querySelector(
"[data-slot='inner-wrapper'] button:nth-of-type(1)",
)!;

expect(clearButton).not.toBeNull();

// click the clear button
await user.click(clearButton);

// assert that the input has empty value
expect(autocomplete).toHaveValue("");

// assert that input is focused
expect(autocomplete).toHaveFocus();
});

it("should keep the ListBox open after clicking clear button", async () => {
const wrapper = render(
<Autocomplete aria-label="Favorite Animal" data-testid="autocomplete" label="Favorite Animal">
Expand Down
6 changes: 1 addition & 5 deletions packages/components/autocomplete/src/use-autocomplete.ts
Original file line number Diff line number Diff line change
Expand Up @@ -418,13 +418,9 @@ export function useAutocomplete<T extends object>(originalProps: UseAutocomplete
onPress: (e: PressEvent) => {
slotsProps.clearButtonProps?.onPress?.(e);
if (state.selectedItem) {
state.setInputValue("");
state.setSelectedKey(null);
} else {
if (allowsCustomValue) {
state.setInputValue("");
}
}
state.setInputValue("");
state.open();
},
"data-visible": !!state.selectedItem || state.inputValue?.length > 0,
Expand Down

0 comments on commit 117310c

Please sign in to comment.