From 7ab556b6bd00a58dec8e16c2612082194585f1c1 Mon Sep 17 00:00:00 2001 From: Adrien Hopkins Date: Sat, 7 Mar 2026 14:19:01 -0500 Subject: Sort chats according to search match Name matches are first, then NIP-05, then pubkey --- src/routes/(app)/dm/+page.svelte | 36 +++++++++++++++++++++++++++++++++++- 1 file changed, 35 insertions(+), 1 deletion(-) (limited to 'src') diff --git a/src/routes/(app)/dm/+page.svelte b/src/routes/(app)/dm/+page.svelte index e82e6351..caf74d2c 100644 --- a/src/routes/(app)/dm/+page.svelte +++ b/src/routes/(app)/dm/+page.svelte @@ -314,6 +314,40 @@ const searchMatches = (chat: object, query: string) => nameMatches(chat, query) || nip05Matches(chat, query) || pubkeyMatches(chat, query); + + const searchSort = (chats: object[], query: string) => { + if (query === "") + return chats; + return chats.toSorted(searchCompare(query)); + } + + // Generates and returns a comparator based on a search query + const searchCompare = (query: string) => + (a, b) => { + const aNameMatches = nameMatches(a, query); + const bNameMatches = nameMatches(b, query); + if (aNameMatches && !bNameMatches) { + return -1; + } else if (!aNameMatches && bNameMatches) { + return 1; + } + + const aNip05Matches = nip05Matches(a, query); + const bNip05Matches = nip05Matches(b, query); + if (aNip05Matches && !bNip05Matches) { + return -1; + } else if (!aNip05Matches && bNip05Matches) { + return 1; + } + + const aPubkeyMatches = pubkeyMatches(a, query); + const bPubkeyMatches = pubkeyMatches(b, query); + if (aPubkeyMatches && !bPubkeyMatches) { + return -1; + } else if (!aPubkeyMatches && bPubkeyMatches) { + return 1; + } + }