Skip to content

Commit a53bb80

Browse files
Stop combobox esc propagation
1 parent 26c8266 commit a53bb80

2 files changed

Lines changed: 32 additions & 0 deletions

File tree

packages/combobox/__tests__/combobox.test.tsx

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ import {
1717
ComboboxPopover,
1818
useComboboxContext,
1919
} from "@reach/combobox";
20+
import { Dialog } from "@reach/dialog";
2021
import { matchSorter } from "match-sorter";
2122
import cities from "./cities";
2223
import { afterEach, describe, expect, it } from "vitest";
@@ -251,6 +252,22 @@ describe("<Combobox />", () => {
251252
// expect(queryByRole("listbox")).toBeFalsy();
252253
// });
253254
});
255+
256+
describe("Combobox inside dialog", () => {
257+
it("should not close the dialog when Esc key is pressed", () => {
258+
let { getByRole, queryByRole } = render(<BasicComboboxInDialog />);
259+
let input = getByRole("combobox");
260+
261+
expect(getByRole("dialog")).toBeInTheDocument();
262+
263+
userEvent.type(input, "e");
264+
expect(getByRole("listbox")).toBeInTheDocument();
265+
266+
userEvent.keyboard("{esc}");
267+
expect(queryByRole("listbox")).not.toBeInTheDocument();
268+
expect(queryByRole("dialog")).toBeInTheDocument();
269+
});
270+
});
254271
});
255272

256273
////////////////////////////////////////////////////////////////////////////////
@@ -343,6 +360,20 @@ function BasicCombobox() {
343360
// );
344361
// }
345362

363+
function BasicComboboxInDialog() {
364+
const [showDialog, setShowDialog] = React.useState(true);
365+
366+
return (
367+
<Dialog
368+
isOpen={showDialog}
369+
onDismiss={() => setShowDialog(false)}
370+
aria-label="dialog with combobox"
371+
>
372+
<BasicCombobox />
373+
</Dialog>
374+
);
375+
}
376+
346377
function useCityMatch(term: string) {
347378
return term.trim() === ""
348379
? null

packages/combobox/src/combobox.tsx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1167,6 +1167,7 @@ function useKeyDown() {
11671167
case "Escape":
11681168
if (state !== IDLE) {
11691169
transition(ESCAPE);
1170+
event.stopPropagation();
11701171
}
11711172
break;
11721173
case "Enter":

0 commit comments

Comments
 (0)