From 942c90c29f869ff0d21ea2b5d1b9f44965e9851b Mon Sep 17 00:00:00 2001 From: Cyril Date: Mon, 8 Sep 2025 16:40:36 +0200 Subject: [PATCH] =?UTF-8?q?=E2=9C=A8(frontend)=20enable=20enter=20key=20to?= =?UTF-8?q?=20open=20documents=20and=20subdocuments?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit added keyboard support to open docs and subdocs using the enter key Signed-off-by: Cyril --- CHANGELOG.md | 7 +- .../__tests__/app-impress/doc-tree.spec.ts | 40 ++++++++ .../components/SimpleDocItem.tsx | 4 + .../doc-tree/components/DocSubPageItem.tsx | 94 ++++++++++++------- .../docs/doc-tree/components/DocTree.tsx | 65 ++++++++++--- .../doc-tree/hooks/useKeyboardActivation.ts | 29 ++++++ 6 files changed, 190 insertions(+), 49 deletions(-) create mode 100644 src/frontend/apps/impress/src/features/docs/doc-tree/hooks/useKeyboardActivation.ts diff --git a/CHANGELOG.md b/CHANGELOG.md index 773a3b36..e0d596b9 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,9 +8,14 @@ and this project adheres to ## [Unreleased] +### Changed + +- ♿(frontend) improve accessibility: + - #1354 + ### Fixed -- 🐛(backend) duplicate sub docs as root for reader user +- 🐛(backend) duplicate sub docs as root for reader users ## [3.7.0] - 2025-09-12 diff --git a/src/frontend/apps/e2e/__tests__/app-impress/doc-tree.spec.ts b/src/frontend/apps/e2e/__tests__/app-impress/doc-tree.spec.ts index a0a155ff..ebf06a4e 100644 --- a/src/frontend/apps/e2e/__tests__/app-impress/doc-tree.spec.ts +++ b/src/frontend/apps/e2e/__tests__/app-impress/doc-tree.spec.ts @@ -252,6 +252,46 @@ test.describe('Doc Tree', () => { page.getByRole('menuitem', { name: 'Move to my docs' }), ).toHaveAttribute('aria-disabled', 'true'); }); + + test('keyboard navigation with Enter key opens documents', async ({ + page, + browserName, + }) => { + // Create a parent document + const [docParent] = await createDoc( + page, + 'doc-tree-keyboard-nav', + browserName, + 1, + ); + await verifyDocName(page, docParent); + + // Create a sub-document + const { name: docChild } = await createRootSubPage( + page, + browserName, + 'doc-tree-keyboard-child', + ); + + const docTree = page.getByTestId('doc-tree'); + await expect(docTree).toBeVisible(); + + // Test keyboard navigation on root document + const rootItem = page.getByTestId('doc-tree-root-item'); + await expect(rootItem).toBeVisible(); + + // Focus on the root item and press Enter + await rootItem.focus(); + await expect(rootItem).toBeFocused(); + await page.keyboard.press('Enter'); + + // Verify we navigated to the root document + await verifyDocName(page, docParent); + await expect(page).toHaveURL(/\/docs\/[^/]+\/?$/); + + // Now test keyboard navigation on sub-document + await expect(docTree.getByText(docChild)).toBeVisible(); + }); }); test.describe('Doc Tree: Inheritance', () => { diff --git a/src/frontend/apps/impress/src/features/docs/doc-management/components/SimpleDocItem.tsx b/src/frontend/apps/impress/src/features/docs/doc-management/components/SimpleDocItem.tsx index cdccc047..61306155 100644 --- a/src/frontend/apps/impress/src/features/docs/doc-management/components/SimpleDocItem.tsx +++ b/src/frontend/apps/impress/src/features/docs/doc-management/components/SimpleDocItem.tsx @@ -49,6 +49,8 @@ export const SimpleDocItem = ({ $overflow="auto" $width="100%" className="--docs--simple-doc-item" + role="presentation" + aria-label={`${t('Open document {{title}}', { title: doc.title || untitledDocument })}`} >