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() {