fix(ui): resolve nested tab routes to their sidebar item

legacyKeyForPathname matched the full relative path against a single
route segment, so a nested tab route like /logs/audit resolved to no key
and the shell fell back to the default page, leaving the Logs nav item
unhighlighted. Match on the first path segment instead, which fixes every
migrated page with nested tab routes.
This commit is contained in:
ryan-crabbe-berri 2026-07-23 14:19:00 -07:00
parent 1211259a97
commit fcbdb3b655
2 changed files with 12 additions and 1 deletions

View file

@ -236,4 +236,13 @@ describe("legacyKeyForPathname", () => {
expect(legacyKeyForPathname("/team-x/ui/api-reference")).toBe("api_ref");
expect(legacyKeyForPathname("/ui/api-reference")).toBeNull();
});
it("resolves a nested tab route to its sidebar key via the first path segment", async () => {
vi.doMock("@/components/networking", () => ({ serverRootPath: "/" }));
const { legacyKeyForPathname } = await import("./migratedPages");
expect(legacyKeyForPathname("/ui/logs/audit")).toBe("logs");
expect(legacyKeyForPathname("/ui/logs/deleted-keys/")).toBe("logs");
expect(legacyKeyForPathname("/ui/some-legacy-page/nested")).toBeNull();
});
});

View file

@ -76,8 +76,10 @@ export function legacyPageHref(pageKey: string): string {
export function legacyKeyForPathname(pathname: string): string | null {
const base = uiBase();
const rel = (pathname.startsWith(base) ? pathname.slice(base.length) : pathname).replace(/^\/+|\/+$/g, "");
const firstSegment = rel.split("/")[0] ?? "";
if (!firstSegment) return null;
for (const [key, segment] of Object.entries(MIGRATED_PAGES)) {
if (rel === segment) return key;
if (firstSegment === segment) return key;
}
return null;
}