From ac088784eaf19e7ffd4601ad0d0ca42c37b7f563 Mon Sep 17 00:00:00 2001 From: Joshua Rush Date: Wed, 30 Aug 2023 17:28:12 +0000 Subject: [PATCH 1/2] Don't move focus on escape if dialog is closed --- src/__tests__/Dialog.test.tsx | 11 +++++++++++ src/hooks/useDialog.ts | 8 +++++--- 2 files changed, 16 insertions(+), 3 deletions(-) diff --git a/src/__tests__/Dialog.test.tsx b/src/__tests__/Dialog.test.tsx index 5d4e51078f6..3dcfd6d0d57 100644 --- a/src/__tests__/Dialog.test.tsx +++ b/src/__tests__/Dialog.test.tsx @@ -137,4 +137,15 @@ describe('Dialog', () => { const triggerButton = getByTestId('trigger-button') expect(document.activeElement).toEqual(triggerButton) }) + + it('Returns focus to returnFocusRef on escape', async () => { + const {getByTestId, queryByTestId} = HTMLRender() + + expect(getByTestId('inner')).toBeTruthy() + fireEvent.keyDown(document.body, {key: 'Escape'}) + + expect(queryByTestId('inner')).toBeNull() + const triggerButton = getByTestId('trigger-button') + expect(document.activeElement).toEqual(triggerButton) + }) }) diff --git a/src/hooks/useDialog.ts b/src/hooks/useDialog.ts index a679431d5b2..f744d3aa500 100644 --- a/src/hooks/useDialog.ts +++ b/src/hooks/useDialog.ts @@ -115,10 +115,12 @@ function useDialog({ useOnEscapePress( (event: KeyboardEvent) => { - onDismiss() - event.preventDefault() + if (isOpen) { + onDismiss() + event.preventDefault() + } }, - [onDismiss], + [isOpen, onDismiss], ) return {getDialogProps} From de2a59ee193cf746eb31909493c9f830bc78031e Mon Sep 17 00:00:00 2001 From: Joshua Rush Date: Wed, 30 Aug 2023 17:31:46 +0000 Subject: [PATCH 2/2] Adding changeset --- .changeset/long-walls-sparkle.md | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 .changeset/long-walls-sparkle.md diff --git a/.changeset/long-walls-sparkle.md b/.changeset/long-walls-sparkle.md new file mode 100644 index 00000000000..5d6f59339d9 --- /dev/null +++ b/.changeset/long-walls-sparkle.md @@ -0,0 +1,7 @@ +--- +'@primer/react': patch +--- + +Fix dialog bug where escape would move focus when dialog was closed + +