From bdecb1bad2fe2a9f4049545d4ce1e83515fb6a0b Mon Sep 17 00:00:00 2001 From: dotta Date: Sun, 22 Mar 2026 07:07:41 -0500 Subject: [PATCH] Sort agents alphabetically by name in all views Sort the flat list view, org tree view, and sidebar agents list alphabetically by name using localeCompare. Co-Authored-By: Paperclip --- ui/src/components/SidebarAgents.tsx | 4 ++++ ui/src/pages/Agents.tsx | 20 ++++++++++++-------- 2 files changed, 16 insertions(+), 8 deletions(-) diff --git a/ui/src/components/SidebarAgents.tsx b/ui/src/components/SidebarAgents.tsx index 0a7e8c18..88433fd8 100644 --- a/ui/src/components/SidebarAgents.tsx +++ b/ui/src/components/SidebarAgents.tsx @@ -28,6 +28,10 @@ function sortByHierarchy(agents: Agent[]): Agent[] { list.push(a); childrenOf.set(parent, list); } + // Sort children at each level alphabetically by name + for (const [, list] of childrenOf) { + list.sort((a, b) => a.name.localeCompare(b.name)); + } const sorted: Agent[] = []; const queue = childrenOf.get(null) ?? []; while (queue.length > 0) { diff --git a/ui/src/pages/Agents.tsx b/ui/src/pages/Agents.tsx index 741d8449..b14112c4 100644 --- a/ui/src/pages/Agents.tsx +++ b/ui/src/pages/Agents.tsx @@ -45,17 +45,21 @@ function matchesFilter(status: string, tab: FilterTab, showTerminated: boolean): } function filterAgents(agents: Agent[], tab: FilterTab, showTerminated: boolean): Agent[] { - return agents.filter((a) => matchesFilter(a.status, tab, showTerminated)); + return agents + .filter((a) => matchesFilter(a.status, tab, showTerminated)) + .sort((a, b) => a.name.localeCompare(b.name)); } function filterOrgTree(nodes: OrgNode[], tab: FilterTab, showTerminated: boolean): OrgNode[] { - return nodes.reduce((acc, node) => { - const filteredReports = filterOrgTree(node.reports, tab, showTerminated); - if (matchesFilter(node.status, tab, showTerminated) || filteredReports.length > 0) { - acc.push({ ...node, reports: filteredReports }); - } - return acc; - }, []); + return nodes + .reduce((acc, node) => { + const filteredReports = filterOrgTree(node.reports, tab, showTerminated); + if (matchesFilter(node.status, tab, showTerminated) || filteredReports.length > 0) { + acc.push({ ...node, reports: filteredReports }); + } + return acc; + }, []) + .sort((a, b) => a.name.localeCompare(b.name)); } export function Agents() {