aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorAdrien Hopkins <[email protected]>2026-02-27 17:46:43 -0500
committerAdrien Hopkins <[email protected]>2026-02-27 17:46:43 -0500
commitf4d1a8f7d0c51df69e1076c38fe642fc2cd9ac77 (patch)
tree7cd480779ab52964fa3ce6b30ae8ed9bf9b1cec4 /src
parent8ab48973812289c19f48d15b7a9771a89d35797a (diff)
downloadcoinos-ui-f4d1a8f7d0c51df69e1076c38fe642fc2cd9ac77.tar.gz
coinos-ui-f4d1a8f7d0c51df69e1076c38fe642fc2cd9ac77.zip
Add basic search feature for chats
Diffstat (limited to 'src')
-rw-r--r--src/routes/(app)/dm/+page.svelte16
1 files changed, 12 insertions, 4 deletions
diff --git a/src/routes/(app)/dm/+page.svelte b/src/routes/(app)/dm/+page.svelte
index 8861aa9d..5152a179 100644
--- a/src/routes/(app)/dm/+page.svelte
+++ b/src/routes/(app)/dm/+page.svelte
@@ -292,6 +292,16 @@
}
muted = await mutedAccounts(user);
}
+
+ const searchMatches = (chat: object, query: string) => {
+ const lowerQuery = query.toLowerCase();
+ const chatName = name(chat).toLowerCase();
+ const chatNip05 = chat?.nip05;
+ return chatName.includes(lowerQuery) ||
+ chatNip05 && chatNip05.includes(lowerQuery) ||
+ chat.pubkey.includes(lowerQuery) ||
+ npubEncode(chat.pubkey).includes(lowerQuery);
+ }
</script>
<style>
@@ -448,12 +458,10 @@
{creatingNewChat ? $t("dm.newChatHeader") : $t("dm.chatHeader")}
<button class={"chat-btn push-right " + ($theme === "light" ? "light-chat-btn" : "dark-chat-btn") + (creatingNewChat ? ($theme === "light" ? " light-selected" : " dark-selected") : "")} on:click={() => {creatingNewChat = !creatingNewChat; selectChat(null); searchQuery = "";}}>+</button>
</h2>
- {#if creatingNewChat}
- <input type="text" class="short" bind:value={searchQuery} placeholder="{$t("dm.searchPrompt")}">
- {/if}
+ <input type="text" class="short" bind:value={searchQuery} placeholder="{$t("dm.searchPrompt")}">
{#if !creatingNewChat}
{#each chats as c}
- {#if (selectedChat && selectedChat.pubkey === c.pubkey) || !(muted && muted.has(c.pubkey))}
+ {#if ((selectedChat && selectedChat.pubkey === c.pubkey) || !(muted && muted.has(c.pubkey))) && (searchQuery === "" || searchMatches(c, searchQuery))}
<button class={"chat-btn tall-btn " + ($theme === "light" ? "light-chat-btn" : "dark-chat-btn") + (selectedChat && selectedChat.pubkey == c.pubkey ? ($theme === "light" ? " light-selected" : " dark-selected") : "")} on:click={() => selectChat(c)}>
<span class="{"text-xl" + (muted && muted.has(c.pubkey) ? " secondary" : "")}">{name(c)}</span> <span class={(idValid(c) ? "" : "invalid ") + "secondary text-xs"}>{id(c)}</span>
</button>