From 4be52897ec9afa24e37e47b8bfe7284de188c3f7 Mon Sep 17 00:00:00 2001 From: Bryan Helmkamp Date: Thu, 7 May 2026 09:06:57 -0700 Subject: [PATCH] feat(web): filter runs list by workflow Adds an "All workflows" dropdown to the /runs toolbar between the repo filter and the "Show archived" toggle, applied client-side. Co-Authored-By: Claude Opus 4.7 (1M context) --- apps/fabro-web/app/routes/runs.tsx | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/apps/fabro-web/app/routes/runs.tsx b/apps/fabro-web/app/routes/runs.tsx index 7e740ac87..38084cac3 100644 --- a/apps/fabro-web/app/routes/runs.tsx +++ b/apps/fabro-web/app/routes/runs.tsx @@ -807,8 +807,14 @@ export default function Runs() { initialColumns.flatMap((col: Column) => col.items.map((item: RunItem) => String(item.repo))), ), ].sort(); + const allWorkflows = [ + ...new Set( + initialColumns.flatMap((col: Column) => col.items.map((item: RunItem) => String(item.workflow))), + ), + ].sort(); const [query, setQuery] = useState(""); const [repoFilter, setRepoFilter] = useState("all"); + const [workflowFilter, setWorkflowFilter] = useState("all"); const [createdFilter, setCreatedFilter] = useState("all"); const [view, setView] = useState("columns"); const [columns, setColumns] = useState(initialColumns); @@ -846,6 +852,7 @@ export default function Runs() { items: col.items.filter( (item) => (repoFilter === "all" || item.repo === repoFilter) && + (workflowFilter === "all" || item.workflow === workflowFilter) && (createdCutoffMs == null || (item.createdAt != null && Date.parse(item.createdAt) >= createdCutoffMs)) && (!query || @@ -908,6 +915,21 @@ export default function Runs() { +
+ + +