From 9c3002f9c7ee8fe6a15c624fb738a341e32d643a Mon Sep 17 00:00:00 2001 From: Jose Olarte III Date: Fri, 31 Oct 2025 19:07:50 +0800 Subject: [PATCH] feat(EntityGrid): sort search results alphabetically Sort search results alphabetically while preserving original order for default list when no search term is present. --- src/components/EntityGrid.vue | 24 ++++++++++++++++-------- 1 file changed, 16 insertions(+), 8 deletions(-) diff --git a/src/components/EntityGrid.vue b/src/components/EntityGrid.vue index f2c8a6f5..2aa7bd0d 100644 --- a/src/components/EntityGrid.vue +++ b/src/components/EntityGrid.vue @@ -377,21 +377,29 @@ export default class EntityGrid extends Vue { const searchLower = this.searchTerm.toLowerCase().trim(); if (this.entityType === "people") { - this.filteredEntities = (this.entities as Contact[]).filter( - (contact: Contact) => { + this.filteredEntities = (this.entities as Contact[]) + .filter((contact: Contact) => { const name = contact.name?.toLowerCase() || ""; const did = contact.did.toLowerCase(); return name.includes(searchLower) || did.includes(searchLower); - }, - ); + }) + .sort((a: Contact, b: Contact) => { + // Sort alphabetically by name, falling back to DID if name is missing + const nameA = (a.name || a.did).toLowerCase(); + const nameB = (b.name || b.did).toLowerCase(); + return nameA.localeCompare(nameB); + }); } else { - this.filteredEntities = (this.entities as PlanData[]).filter( - (project: PlanData) => { + this.filteredEntities = (this.entities as PlanData[]) + .filter((project: PlanData) => { const name = project.name?.toLowerCase() || ""; const handleId = project.handleId.toLowerCase(); return name.includes(searchLower) || handleId.includes(searchLower); - }, - ); + }) + .sort((a: PlanData, b: PlanData) => { + // Sort alphabetically by name + return a.name.toLowerCase().localeCompare(b.name.toLowerCase()); + }); } } finally { this.isSearching = false;