From e58799c21b44f5d08f3de622d3df526b337b3d0a Mon Sep 17 00:00:00 2001 From: Adam Soltys Date: Fri, 9 Feb 2024 22:29:14 -0800 Subject: separate messages page --- src/components/AppHeader.svelte | 1 + src/locales/en.json | 1 + .../(app)/[username]/(profile)/+page.server.js | 35 --- src/routes/(app)/[username]/(profile)/+page.svelte | 184 +--------------- .../(app)/[username]/messages/+page.server.js | 38 ++-- src/routes/(app)/[username]/messages/+page.svelte | 234 +++++++-------------- .../messages/[recipient]/+page.server.js | 25 +++ .../[username]/messages/[recipient]/+page.svelte | 191 +++++++++++++++++ src/routes/(app)/send/[...text]/+page.svelte | 46 ++-- 9 files changed, 333 insertions(+), 422 deletions(-) delete mode 100644 src/routes/(app)/[username]/(profile)/+page.server.js create mode 100644 src/routes/(app)/[username]/messages/[recipient]/+page.server.js create mode 100644 src/routes/(app)/[username]/messages/[recipient]/+page.svelte (limited to 'src') diff --git a/src/components/AppHeader.svelte b/src/components/AppHeader.svelte index 57892b18..a2103cf5 100644 --- a/src/components/AppHeader.svelte +++ b/src/components/AppHeader.svelte @@ -23,6 +23,7 @@ }, { key: "nav.support", icon: "support", href: `/support` }, { key: "nav.map", icon: "map", href: `/${user.username}/map` }, + { key: "nav.messages", icon: "message", href: `/${user.username}/messages` }, { key: "nav.merch", icon: "shop", href: `https://coinosmerch.com` }, { key: "nav.signOut", icon: "logout", href: `/logout` }, ]; diff --git a/src/locales/en.json b/src/locales/en.json index 84f58ced..c4a272b6 100644 --- a/src/locales/en.json +++ b/src/locales/en.json @@ -154,6 +154,7 @@ "subheader": "Latest Updates" }, "user": { + "noMessages": "You have not sent or received any messages yet", "profilePage": "Profile page", "nostrPubkey": "Nostr pubkey", "requestPayment": "Request Payment", diff --git a/src/routes/(app)/[username]/(profile)/+page.server.js b/src/routes/(app)/[username]/(profile)/+page.server.js deleted file mode 100644 index 3110ec40..00000000 --- a/src/routes/(app)/[username]/(profile)/+page.server.js +++ /dev/null @@ -1,35 +0,0 @@ -import { auth, get } from "$lib/utils"; - -export async function load({ cookies, params, parent, url }) { - let { user, subject } = await parent(); - let { pubkey } = subject; - let { since = 0 } = params; - - let messages, invoices, sent, received, notes; - messages = invoices = sent = received = notes = []; - - if (pubkey) { - if (user) { - try { - messages = await get(`/${user.pubkey}/${since}/messages`); - messages = messages.sort((a, b) => b.created_at - a.created_at); - } catch (e) { - console.log(`failed to fetch nostr messages`, e); - } - - ({ invoices, sent, received } = await get("/requests", auth(cookies))); - } - - try { - notes = await get(`/${pubkey}/notes`); - } catch (e) { - console.log(`failed to fetch nostr notes for ${pubkey}`, e); - } - - notes.map((e) => { - e.seen = e.created_at; - }); - } - - return { invoices, messages, notes, sent, received }; -} diff --git a/src/routes/(app)/[username]/(profile)/+page.svelte b/src/routes/(app)/[username]/(profile)/+page.svelte index 9dd968b6..420cc5fa 100644 --- a/src/routes/(app)/[username]/(profile)/+page.svelte +++ b/src/routes/(app)/[username]/(profile)/+page.svelte @@ -1,70 +1,13 @@
@@ -82,10 +25,10 @@
{/if} -
+
{/if} - - {#if invoices.length} -
-

Invoices

- {#each invoices as { amount, currency, rate, request: { requester, recipient }, hash }} - {@const requested = user.username === requester?.username} - -
-
-
- {#if requested} -
- -
-

{$t("payments.invoiceFrom")}

-

- {recipient.username} -

-
-
- {:else} -
- -
-

{$t("payments.awaiting")}

-

- {requester.username} -

-
-
- {/if} -
-
-
- {f(amount * (rate / sats), currency)} -
- -
{sat(amount)}
-
-
-
-
- {/each} -
- {/if} - {#if received.length} -
-

Requests

- - {#each received as { id, invoice, memo, requester: r }} - -
-
-
-
- -
-

{r.username}

-

{memo}

-
-
-
-
- -
-
-
-
- {/each} -
- {/if} - - {#if latest.length && user?.id === subject.id} -
- {#each latest as { content, pubkey, author, recipient }} - {@const user = author.id === user.id ? recipient : author} - -
-
- -
-
-
{user.username}
-
- {content} -
-
-
-
- {/each} -
- {/if} diff --git a/src/routes/(app)/[username]/messages/+page.server.js b/src/routes/(app)/[username]/messages/+page.server.js index f0148be7..eeb883ee 100644 --- a/src/routes/(app)/[username]/messages/+page.server.js +++ b/src/routes/(app)/[username]/messages/+page.server.js @@ -1,25 +1,33 @@ -import { get } from "$lib/utils"; +import { auth, get } from "$lib/utils"; -export async function load({ params, parent, url }) { +export async function load({ cookies, params, parent, url }) { let { user, subject } = await parent(); + let { pubkey } = subject; let { since = 0 } = params; - let messages = []; + let messages = [], + notes = []; - try { - messages = await get(`/${user.pubkey}/${since}/messages`); + if (pubkey) { + if (user) { + try { + messages = await get(`/${user.pubkey}/${since}/messages`); + messages = messages.sort((a, b) => b.created_at - a.created_at); + } catch (e) { + console.log(`failed to fetch nostr messages`, e); + } + } - messages = messages - .filter( - (m) => m.recipient?.id === subject.id || m.author?.id === subject.id - ) - .sort((a, b) => a.created_at - b.created_at); + try { + notes = await get(`/${pubkey}/notes`); + } catch (e) { + console.log(`failed to fetch nostr notes for ${pubkey}`, e); + } - if (user.id === subject.id) - messages = messages.filter((m) => m.recipient.id === m.author.id); - } catch (e) { - console.log(`failed to fetch nostr messages`, e); + notes.map((e) => { + e.seen = e.created_at; + }); } - return { messages, user }; + return { messages, notes } } diff --git a/src/routes/(app)/[username]/messages/+page.svelte b/src/routes/(app)/[username]/messages/+page.svelte index 48855a26..4738ea2c 100644 --- a/src/routes/(app)/[username]/messages/+page.svelte +++ b/src/routes/(app)/[username]/messages/+page.svelte @@ -1,182 +1,92 @@ -
-
- {#each messages as { id, author, message, created_at, pubkey }} - {@const ours = pubkey === user.pubkey} - {@const theirs = !ours} - - {#if message} -
-
- {message} -
-
- +
+

+ {$t("user.messages")} +

+ {#if latest.length && user?.id === subject.id} +
+ {#each latest as { content, pubkey, author, recipient }} + {@const user = author.id === user.id ? recipient : author} + +
+
+ +
+
+
{user.username}
+
+ {content} +
+
-
-
- {format(new Date(created_at * 1000), "MMM d")}, - {format(new Date(created_at * 1000), "h:mm aa")} -
- {/if} - {/each} -
- -
- - - -
- - + + {/each} +
+ {:else} +
{$t("user.noMessages")}
+ {/if}
- - diff --git a/src/routes/(app)/[username]/messages/[recipient]/+page.server.js b/src/routes/(app)/[username]/messages/[recipient]/+page.server.js new file mode 100644 index 00000000..f0148be7 --- /dev/null +++ b/src/routes/(app)/[username]/messages/[recipient]/+page.server.js @@ -0,0 +1,25 @@ +import { get } from "$lib/utils"; + +export async function load({ params, parent, url }) { + let { user, subject } = await parent(); + let { since = 0 } = params; + + let messages = []; + + try { + messages = await get(`/${user.pubkey}/${since}/messages`); + + messages = messages + .filter( + (m) => m.recipient?.id === subject.id || m.author?.id === subject.id + ) + .sort((a, b) => a.created_at - b.created_at); + + if (user.id === subject.id) + messages = messages.filter((m) => m.recipient.id === m.author.id); + } catch (e) { + console.log(`failed to fetch nostr messages`, e); + } + + return { messages, user }; +} diff --git a/src/routes/(app)/[username]/messages/[recipient]/+page.svelte b/src/routes/(app)/[username]/messages/[recipient]/+page.svelte new file mode 100644 index 00000000..dfff6ed2 --- /dev/null +++ b/src/routes/(app)/[username]/messages/[recipient]/+page.svelte @@ -0,0 +1,191 @@ + + +
+ + +
+ {#each messages as { id, author, message, created_at, pubkey }} + {@const ours = pubkey === user.pubkey} + {@const theirs = !ours} + + {#if message} +
+
+ {message} +
+
+ +
+
+
+ {format(new Date(created_at * 1000), "MMM d")}, + {format(new Date(created_at * 1000), "h:mm aa")} +
+ {/if} + {/each} +
+ +
+ + + +
+ + +
+ + diff --git a/src/routes/(app)/send/[...text]/+page.svelte b/src/routes/(app)/send/[...text]/+page.svelte index 489650a5..e7490d63 100644 --- a/src/routes/(app)/send/[...text]/+page.svelte +++ b/src/routes/(app)/send/[...text]/+page.svelte @@ -20,7 +20,6 @@ let el, text; - let keypress = (e) => e.key === "Enter" && (e.preventDefault() || el.click()); let paste = async () => { @@ -36,7 +35,7 @@ {$t("payments.send")} -
+ {#if form?.error}
@@ -49,31 +48,18 @@