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 <noreply@paperclip.ing>
This commit is contained in:
dotta 2026-03-22 07:07:41 -05:00
parent e61f00d4c1
commit bdecb1bad2
2 changed files with 16 additions and 8 deletions

View file

@ -28,6 +28,10 @@ function sortByHierarchy(agents: Agent[]): Agent[] {
list.push(a); list.push(a);
childrenOf.set(parent, list); 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 sorted: Agent[] = [];
const queue = childrenOf.get(null) ?? []; const queue = childrenOf.get(null) ?? [];
while (queue.length > 0) { while (queue.length > 0) {

View file

@ -45,17 +45,21 @@ function matchesFilter(status: string, tab: FilterTab, showTerminated: boolean):
} }
function filterAgents(agents: Agent[], tab: FilterTab, showTerminated: boolean): Agent[] { 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[] { function filterOrgTree(nodes: OrgNode[], tab: FilterTab, showTerminated: boolean): OrgNode[] {
return nodes.reduce<OrgNode[]>((acc, node) => { return nodes
const filteredReports = filterOrgTree(node.reports, tab, showTerminated); .reduce<OrgNode[]>((acc, node) => {
if (matchesFilter(node.status, tab, showTerminated) || filteredReports.length > 0) { const filteredReports = filterOrgTree(node.reports, tab, showTerminated);
acc.push({ ...node, reports: filteredReports }); if (matchesFilter(node.status, tab, showTerminated) || filteredReports.length > 0) {
} acc.push({ ...node, reports: filteredReports });
return acc; }
}, []); return acc;
}, [])
.sort((a, b) => a.name.localeCompare(b.name));
} }
export function Agents() { export function Agents() {