diff --git a/packages/ui/src/elements/DocumentDrawer/DrawerHeader/index.tsx b/packages/ui/src/elements/DocumentDrawer/DrawerHeader/index.tsx index d2bd9042a39..9e7143d20b9 100644 --- a/packages/ui/src/elements/DocumentDrawer/DrawerHeader/index.tsx +++ b/packages/ui/src/elements/DocumentDrawer/DrawerHeader/index.tsx @@ -1,6 +1,6 @@ 'use client' -import { useCallback } from 'react' +import { useCallback, useEffect } from 'react' import { Gutter } from '../../../elements/Gutter/index.js' import { useModal } from '../../../elements/Modal/index.js' @@ -22,7 +22,7 @@ export const DocumentDrawerHeader: React.FC<{ drawerSlug: string showDocumentID?: boolean }> = ({ AfterHeader, drawerSlug, showDocumentID = true }) => { - const { closeModal, openModal } = useModal() + const { closeModal, isModalOpen, openModal } = useModal() const { t } = useTranslation() const isModified = useFormModified() @@ -34,6 +34,42 @@ export const DocumentDrawerHeader: React.FC<{ } }, [isModified, openModal, closeModal, drawerSlug]) + useEffect(() => { + if (!isModified) { + return + } + + const drawerCloseButton = document.getElementById(`close-drawer__${drawerSlug}`) + + const handleDrawerCloseClick = (event: MouseEvent) => { + if (isModalOpen(leaveWithoutSavingModalSlug)) { + return + } + + event.preventDefault() + event.stopPropagation() + handleOnClose() + } + + const handleKeyDown = (event: KeyboardEvent) => { + if (event.key !== 'Escape' || isModalOpen(leaveWithoutSavingModalSlug)) { + return + } + + event.preventDefault() + event.stopPropagation() + handleOnClose() + } + + drawerCloseButton?.addEventListener('click', handleDrawerCloseClick, true) + document.addEventListener('keydown', handleKeyDown, true) + + return () => { + drawerCloseButton?.removeEventListener('click', handleDrawerCloseClick, true) + document.removeEventListener('keydown', handleKeyDown, true) + } + }, [drawerSlug, handleOnClose, isModalOpen, isModified]) + return (
diff --git a/test/admin/e2e/document-view/e2e.spec.ts b/test/admin/e2e/document-view/e2e.spec.ts index 1e96c66693a..37b9635c94e 100644 --- a/test/admin/e2e/document-view/e2e.spec.ts +++ b/test/admin/e2e/document-view/e2e.spec.ts @@ -911,7 +911,16 @@ describe('Document View', () => { await expect(leaveModal).toBeVisible() await leaveModal.locator('#confirm-cancel').click() await expect(editModal).toBeVisible() - await closeButton.click() + + const gutterCloseButton = page.locator('.drawer--is-open > .drawer__close') + await gutterCloseButton.click() + await expect(leaveModal).toBeVisible() + await leaveModal.locator('#confirm-cancel').click() + await expect(editModal).toBeVisible() + + await page.keyboard.press('Escape') + await expect(leaveModal).toBeVisible() + await leaveModal.locator('#confirm-action').click() await expect(editModal).toBeHidden() })