From fb13e1f6a996ed3efa5ea67e0010aeed84f8542b Mon Sep 17 00:00:00 2001 From: Dotta Date: Thu, 4 Jun 2026 01:22:41 +0000 Subject: [PATCH] Hide archived routines from routines page --- ui/src/pages/Routines.test.tsx | 39 ++++++++++++++++++++++++++++++++++ ui/src/pages/Routines.tsx | 14 +++++++----- 2 files changed, 48 insertions(+), 5 deletions(-) diff --git a/ui/src/pages/Routines.test.tsx b/ui/src/pages/Routines.test.tsx index c32e23d1..22a38da4 100644 --- a/ui/src/pages/Routines.test.tsx +++ b/ui/src/pages/Routines.test.tsx @@ -501,6 +501,45 @@ describe("Routines page", () => { }); }); + it("hides archived routines from the routines list", async () => { + routinesListMock.mockResolvedValue([ + createRoutine({ id: "routine-1", title: "Morning sync", status: "active" }), + createRoutine({ id: "routine-2", title: "Archived cleanup", status: "archived" }), + ]); + issuesListMock.mockResolvedValue([]); + + const root = createRoot(container); + const queryClient = new QueryClient({ + defaultOptions: { + queries: { retry: false }, + }, + }); + + await act(async () => { + root.render( + + + , + ); + await flush(); + }); + + for (let attempts = 0; attempts < 5 && !container.textContent?.includes("Morning sync"); attempts += 1) { + await act(async () => { + await flush(); + }); + } + + const text = container.textContent ?? ""; + expect(text).toContain("1 routine"); + expect(text).toContain("Morning sync"); + expect(text).not.toContain("Archived cleanup"); + + await act(async () => { + root.unmount(); + }); + }); + it("shows an outlined row-level run now button on the routines table", async () => { routinesListMock.mockResolvedValue([createRoutine({ id: "routine-1", title: "Morning sync" })]); issuesListMock.mockResolvedValue([]); diff --git a/ui/src/pages/Routines.tsx b/ui/src/pages/Routines.tsx index af92fe02..b4f94c13 100644 --- a/ui/src/pages/Routines.tsx +++ b/ui/src/pages/Routines.tsx @@ -417,9 +417,13 @@ export function Routines() { [projects], ); const liveIssueIds = useMemo(() => collectLiveIssueIds(liveRuns), [liveRuns]); + const visibleRoutines = useMemo( + () => (routines ?? []).filter((routine) => routine.status !== "archived"), + [routines], + ); const sortedRoutines = useMemo( - () => sortRoutines(routines ?? [], routineViewState.sortField, routineViewState.sortDir), - [routineViewState.sortDir, routineViewState.sortField, routines], + () => sortRoutines(visibleRoutines, routineViewState.sortField, routineViewState.sortDir), + [routineViewState.sortDir, routineViewState.sortField, visibleRoutines], ); const routineGroups = useMemo( () => buildRoutineGroups(sortedRoutines, routineViewState.groupBy, projectById, agentById), @@ -516,7 +520,7 @@ export function Routines() {

- {(routines ?? []).length} routine{(routines ?? []).length === 1 ? "" : "s"} + {visibleRoutines.length} routine{visibleRoutines.length === 1 ? "" : "s"}

@@ -873,11 +877,11 @@ export function Routines() { {activeTab === "routines" ? (
- {(routines ?? []).length === 0 ? ( + {visibleRoutines.length === 0 ? (
) : (