From c0e5b5ed7f060febd3b0b6fd0567ac9018c9e109 Mon Sep 17 00:00:00 2001 From: Oier Bravo Urtasun Date: Mon, 18 May 2026 14:47:03 +0200 Subject: [PATCH] feat(sidebar): manage-collective link as last nav entry with spacer MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The DesktopSidebar previously had no entry point for /collective/manage, making member-management and the new common-items / tags subsections unreachable from the chrome on desktop. The MobileDrawer already linked it from inside the collective switcher block; desktop didn't. - Adds a `
` divider with `my-2 border-t` to separate the section nav (lists / tasks / notes / search) from the manage entry. - Adds a `Users`-iconed link to `/collective/manage` as the last nav item, with the same active-state styling as the other entries. - Not gated by `$enabledSections` (membership management is orthogonal to feature toggles — same call as the Admin entry in the footer). - Reuses the existing `m.manage_title()` Paraglide string; no new strings. Tests: tests/e2e/sidebar-manage-link.test.ts adds SBM-01 (link visible and navigates) + SBM-02 (divider present in
diff --git a/apps/web/tests/e2e/sidebar-manage-link.test.ts b/apps/web/tests/e2e/sidebar-manage-link.test.ts new file mode 100644 index 0000000..829c6e5 --- /dev/null +++ b/apps/web/tests/e2e/sidebar-manage-link.test.ts @@ -0,0 +1,40 @@ +/** + * SBM-series — desktop sidebar manage-collective entry + * + * The DesktopSidebar gained a last-position link to /collective/manage + * after the nav loop, preceded by a visual spacer (divider). The mobile + * drawer already had this link; desktop did not, leaving the page + * unreachable from the chrome. + */ +import { test, expect } from '@playwright/test'; +import { USERS } from '../fixtures/users.js'; +import { loginAs } from '../fixtures/login.js'; + +const DESKTOP = { width: 1280, height: 800 }; + +test.describe('Desktop sidebar — manage collective link', () => { + test('SBM-01: the manage link is the last nav entry and navigates to /collective/manage', async ({ page }) => { + await page.setViewportSize(DESKTOP); + await loginAs(page, USERS.ana); + await page.goto('/lists'); + + const link = page.getByTestId('sidebar-manage-link'); + await expect(link).toBeVisible({ timeout: 10_000 }); + + await link.click(); + await expect(page).toHaveURL(/\/collective\/manage/); + }); + + test('SBM-02: a horizontal divider separates the manage link from the section nav', async ({ page }) => { + await page.setViewportSize(DESKTOP); + await loginAs(page, USERS.ana); + await page.goto('/lists'); + + // The divider sits inside the same