From dbf9392f249b49eafbe4b9f605899e7194147793 Mon Sep 17 00:00:00 2001 From: ryan-crabbe-berri Date: Wed, 5 Aug 2026 15:26:54 -0700 Subject: [PATCH] fix(ui): project detail close replaces history to match the other detail pages Adopts the close semantics from PR #36013 so browser Back after an in-page close leaves the Projects page instead of reopening the dismissed detail; the close test now pins the replace mode --- .../(dashboard)/projects/_components/ProjectsPage.test.tsx | 1 + .../app/(dashboard)/projects/_components/ProjectsPage.tsx | 7 ++++++- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/ui/litellm-dashboard/src/app/(dashboard)/projects/_components/ProjectsPage.test.tsx b/ui/litellm-dashboard/src/app/(dashboard)/projects/_components/ProjectsPage.test.tsx index 005cd8dc69b..0bba9d49fd3 100644 --- a/ui/litellm-dashboard/src/app/(dashboard)/projects/_components/ProjectsPage.test.tsx +++ b/ui/litellm-dashboard/src/app/(dashboard)/projects/_components/ProjectsPage.test.tsx @@ -243,6 +243,7 @@ describe("ProjectsPage", () => { await waitFor(() => { expect(onUrlUpdate).toHaveBeenLastCalledWith(expect.objectContaining({ queryString: "" })); }); + expect(onUrlUpdate.mock.calls.at(-1)?.[0].options.history).toBe("replace"); expect(screen.queryByTestId("project-detail")).not.toBeInTheDocument(); expect(screen.getByText("Alpha Project")).toBeInTheDocument(); }); diff --git a/ui/litellm-dashboard/src/app/(dashboard)/projects/_components/ProjectsPage.tsx b/ui/litellm-dashboard/src/app/(dashboard)/projects/_components/ProjectsPage.tsx index a8419874000..a7e2f70198f 100644 --- a/ui/litellm-dashboard/src/app/(dashboard)/projects/_components/ProjectsPage.tsx +++ b/ui/litellm-dashboard/src/app/(dashboard)/projects/_components/ProjectsPage.tsx @@ -48,7 +48,12 @@ export function ProjectsPage() { }, [projects, searchText, teamAliasMap]); if (selectedProjectId) { - return void setSelectedProjectId(null)} />; + return ( + void setSelectedProjectId(null, { history: "replace" })} + /> + ); } return (