diff options
| author | Adrien Hopkins <[email protected]> | 2026-02-27 17:46:43 -0500 |
|---|---|---|
| committer | Adrien Hopkins <[email protected]> | 2026-02-27 17:46:43 -0500 |
| commit | f4d1a8f7d0c51df69e1076c38fe642fc2cd9ac77 (patch) | |
| tree | 7cd480779ab52964fa3ce6b30ae8ed9bf9b1cec4 /src | |
| parent | 8ab48973812289c19f48d15b7a9771a89d35797a (diff) | |
| download | coinos-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.svelte | 16 |
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> |
