diff options
| author | Adrien Hopkins <[email protected]> | 2026-01-06 11:33:22 -0500 |
|---|---|---|
| committer | Adrien Hopkins <[email protected]> | 2026-01-06 11:33:22 -0500 |
| commit | 8b2179ca8cbda0dca18dd5a52a8b94514ba6160b (patch) | |
| tree | 34ccfd5fe3838cf4b7271797562d7e0e6625e000 | |
| parent | ff442a41f26b37832a67df760497bd7da742eb45 (diff) | |
| download | coinos-ui-8b2179ca8cbda0dca18dd5a52a8b94514ba6160b.tar.gz coinos-ui-8b2179ca8cbda0dca18dd5a52a8b94514ba6160b.zip | |
Add links to shared dm page
| -rw-r--r-- | src/components/Menu.svelte | 1 | ||||
| -rw-r--r-- | src/locales/en.json | 1 | ||||
| -rw-r--r-- | src/locales/fr.json | 1 | ||||
| -rw-r--r-- | src/routes/(app)/[username]/(profile)/+layout.svelte | 2 | ||||
| -rw-r--r-- | src/routes/(app)/dm/+page.svelte | 36 |
5 files changed, 30 insertions, 11 deletions
diff --git a/src/components/Menu.svelte b/src/components/Menu.svelte index e433fefb..49e477a1 100644 --- a/src/components/Menu.svelte +++ b/src/components/Menu.svelte @@ -16,6 +16,7 @@ // icon: "ph:storefront-bold", // href: `https://coinosmerch.com`, // }, + { key: "nav.dm", icon: "ph:chat-bold", href: `/dm` }, { key: "nav.dark", icon: "ph:moon-stars-bold", href: `/dark` }, { key: "nav.signOut", icon: "ph:sign-out-bold", href: `/logout` }, ]; diff --git a/src/locales/en.json b/src/locales/en.json index 03579132..670fa97b 100644 --- a/src/locales/en.json +++ b/src/locales/en.json @@ -227,6 +227,7 @@ "light": "Light", "about": "About", "docs": "Docs", + "dm": "Nostr Messages", "messages": "Messages", "funds": "Funds", "map": "Map", diff --git a/src/locales/fr.json b/src/locales/fr.json index c891293d..da56df68 100644 --- a/src/locales/fr.json +++ b/src/locales/fr.json @@ -150,6 +150,7 @@ "merch": "Marchandise", "about": "À Propos", "docs": "Documents", + "dm": "Messages Nostr", "messages": "Messages", "funds": "Fonds", "dark": "Sombre", diff --git a/src/routes/(app)/[username]/(profile)/+layout.svelte b/src/routes/(app)/[username]/(profile)/+layout.svelte index 8ce4150c..515dba5d 100644 --- a/src/routes/(app)/[username]/(profile)/+layout.svelte +++ b/src/routes/(app)/[username]/(profile)/+layout.svelte @@ -142,7 +142,7 @@ </a> {:else} <a - href="/dm/{subject.username}" + href="/dm?username={subject.username}" class="btn contents" aria-label="Direct Message" > diff --git a/src/routes/(app)/dm/+page.svelte b/src/routes/(app)/dm/+page.svelte index 171f9a62..7578c27c 100644 --- a/src/routes/(app)/dm/+page.svelte +++ b/src/routes/(app)/dm/+page.svelte @@ -1,5 +1,5 @@ <script lang="ts"> - import { tick } from "svelte"; + import { tick, onMount } from "svelte"; import Icon from "$comp/Icon.svelte"; import { isValid, queryProfile } from "nostr-tools/nip05"; @@ -143,30 +143,41 @@ updateEvents(); } - const newChatUsername = async (username: string) => { + const selectChatUsername = async (username: string) => { const response = await fetch(`/api/users/${username}`); if (!response.ok) { alert("Invalid username"); return; } const coinosUserInfo = await response.json(); - newChatPubkey(coinosUserInfo.pubkey); + selectChatPubkey(coinosUserInfo.pubkey); } - const newChatNip05 = async (nip05: string) => { + const selectChatNip05 = async (nip05: string) => { const response = await queryProfile(nip05); if (response == null) { alert("Invalid nip-05"); return; } - newChatPubkey(response.pubkey); + selectChatPubkey(response.pubkey); } - const newChatPubkey = async (pubkey: string) => { + const selectChatPubkey = async (pubkey: string) => { selectChat(await userInfo(pubkey)); creatingNewChat = false; } + onMount(() => { + const urlParams = new URLSearchParams(window.location.search); + if (urlParams.get('username')) { + selectChatUsername(urlParams.get('username')); + } else if (urlParams.get('nip05')) { + selectChatNip05(urlParams.get('nip05')); + } else if (urlParams.get('pubkey')) { + selectChatPubkey(urlParams.get('pubkey')); + } + }); + const appendMultimap = (map: Map, key: string, value: object) => { if (map.has(key)) { map.get(key).push(value); @@ -385,16 +396,16 @@ </button> {/each} {:else if searchQuery !== ""} - <button class={"chat-btn tall-btn " + ($theme === "light" ? "light-chat-btn" : "dark-chat-btn")} on:click={() => newChatUsername(searchQuery)}> + <button class={"chat-btn tall-btn " + ($theme === "light" ? "light-chat-btn" : "dark-chat-btn")} on:click={() => selectChatUsername(searchQuery)}> <span class="text-xl">Find by username</span> </button> {#if searchQuery.includes(".")} - <button class={"chat-btn tall-btn " + ($theme === "light" ? "light-chat-btn" : "dark-chat-btn")} on:click={() => newChatNip05(searchQuery)}> + <button class={"chat-btn tall-btn " + ($theme === "light" ? "light-chat-btn" : "dark-chat-btn")} on:click={() => selectChatNip05(searchQuery)}> <span class="text-xl">Find by NIP-05</span> </button> {/if} {#if searchQuery.length === 64 || searchQuery.slice(0, 4) === "npub"} - <button class={"chat-btn tall-btn " + ($theme === "light" ? "light-chat-btn" : "dark-chat-btn")} on:click={() => newChatPubkey(searchQuery)}> + <button class={"chat-btn tall-btn " + ($theme === "light" ? "light-chat-btn" : "dark-chat-btn")} on:click={() => selectChatPubkey(searchQuery)}> <span class="text-xl">Find by pubkey</span> </button> {/if} @@ -406,7 +417,12 @@ >{$t("dm.header")}</h1> {#if selectedChat} - <h1><a class="text-3xl" href="/{selectedChat.username}">{name(selectedChat)}</a> + <h1> + {#if selectedChat.coinosUsername} + <a class="text-3xl" href="/{selectedChat.coinosUsername}">{name(selectedChat)}</a> + {:else} + <span class="text-3xl">{name(selectedChat)}</span> + {/if} <span class={"secondary timestamp text-small" + (idValid(selectedChat) ? "" : " invalid")} title="{npubEncode(selectedChat.pubkey)}">{id(selectedChat)}</span> </h1> |
