From 17c9b99208b3881e62275ef3e552a3c30e55939d Mon Sep 17 00:00:00 2001 From: Adam Soltys Date: Thu, 22 Dec 2022 12:18:05 -0800 Subject: add message field to user profile pages --- src/components/Avatar.svelte | 24 +++++++------- src/components/Feed.svelte | 26 +++++++++------ src/lib/socket.js | 10 ++++-- src/lib/store.js | 2 +- src/lib/utils.js | 2 +- src/routes/(app)/[username]/+layout.server.js | 2 +- src/routes/(app)/[username]/+page.server.js | 12 ++++--- src/routes/(app)/[username]/+page.svelte | 4 +-- src/routes/(app)/[username]/message/+page.svelte | 41 ++++++++++++++++++++++++ 9 files changed, 90 insertions(+), 33 deletions(-) create mode 100644 src/routes/(app)/[username]/message/+page.svelte (limited to 'src') diff --git a/src/components/Avatar.svelte b/src/components/Avatar.svelte index 7ee774bf..f0b9768f 100644 --- a/src/components/Avatar.svelte +++ b/src/components/Avatar.svelte @@ -1,30 +1,30 @@
- {#if user?.profile} - {user.username} - {:else if src} - Avatar - {:else} - - {/if} + {user.username}
diff --git a/src/components/Feed.svelte b/src/components/Feed.svelte index 973afa19..9f09630a 100644 --- a/src/components/Feed.svelte +++ b/src/components/Feed.svelte @@ -5,12 +5,18 @@ import { runner } from '$lib/utils'; export let events; - let distance = (d) => { - let diff = Math.round(Date.now() / 1000) - d; - return diff > 3600 - ? Math.round(diff / 3600) + 'd' - : diff > 60 - ? Math.round(diff / 60) + 'm' + let distance = (date) => { + let m = 60; + let h = 60 * m; + let d = 24 * h; + + let diff = Math.round(Date.now() / 1000) - date; + return diff > d + ? Math.round(diff / d) + 'd' + : diff > h + ? Math.round(diff / h) + 'h' + : diff > m + ? Math.round(diff / m) + 'm' : diff > 2 ? diff + 's' : 'now'; @@ -24,20 +30,20 @@ {#if browser}
- +
- +
-
{data.pubkey.substr(0, 6)}
+
{data.user.username}
 {distance(data.seen)}
diff --git a/src/lib/socket.js b/src/lib/socket.js index d43af082..4f5770d3 100644 --- a/src/lib/socket.js +++ b/src/lib/socket.js @@ -13,9 +13,11 @@ import { import { success, sat } from '$lib/utils'; import { PUBLIC_SOCKET } from '$env/static/public'; import { invalidate } from '$app/navigation'; +import { browser } from '$app/environment'; let socket, token; -let events = get($events); +let le = browser && localStorage.getItem('events'); +let events = le && le !== 'undefined' ? JSON.parse(le) : {}; delete events.q; events.q = Object.keys(events); @@ -40,7 +42,11 @@ export const messages = (data) => ({ events[data.id] = data; events.q.push(data.id); $events.set(events); - if (events.q.length > 500) delete events[events.q.shift()]; + while (events.q.length > 10000) delete events[events.q.shift()]; + localStorage.setItem( + 'events', + JSON.stringify(events.q.slice(-100).reduce((a, b) => (a = { ...a, [b]: events[b] }), {})) + ); }, rate() { diff --git a/src/lib/store.js b/src/lib/store.js index 34e8dcca..1a1a88c2 100644 --- a/src/lib/store.js +++ b/src/lib/store.js @@ -54,5 +54,5 @@ export const last = writable(); export const request = writable(); export const invoice = writable(); export const txns = persistLocal('transactions', []); -export const events = persistLocal('events', {}); +export const events = writable({}); export const password = writable(); diff --git a/src/lib/utils.js b/src/lib/utils.js index 14646ad0..82d5b9cf 100644 --- a/src/lib/utils.js +++ b/src/lib/utils.js @@ -11,7 +11,7 @@ export function scroll(section) { const base = browser ? '' : PUBLIC_COINOS_URL; export const runner = (k) => { - return Math.round(((parseInt(k[0], 16) - 1) / 15) * 7) + 1 + '.webp'; + return Math.ceil((parseInt(k.substr(0, 2), 16) / 256) * 20) + '.webp'; }; export const g = (url, fetch, headers) => diff --git a/src/routes/(app)/[username]/+layout.server.js b/src/routes/(app)/[username]/+layout.server.js index a907f7de..f5bf338e 100644 --- a/src/routes/(app)/[username]/+layout.server.js +++ b/src/routes/(app)/[username]/+layout.server.js @@ -5,7 +5,7 @@ export let load = async ({ params: { username } }) => { try { return { subject: await get(`/users/${username}`) }; } catch (e) { - if (username.length === 64) return { subject: { username } }; + if (username.length === 64) return { subject: { username, pubkey: username } }; throw error(500, 'Unable to retrieve user account data'); } }; diff --git a/src/routes/(app)/[username]/+page.server.js b/src/routes/(app)/[username]/+page.server.js index 547f754f..442b4eb5 100644 --- a/src/routes/(app)/[username]/+page.server.js +++ b/src/routes/(app)/[username]/+page.server.js @@ -2,10 +2,9 @@ import { get } from '$lib/utils'; import Qr from 'qrcode-base64'; export async function load({ params, parent, url }) { - let { user } = await parent(); - let pubkey; - if (user) ({ pubkey } = user); - else pubkey = params.username; + let { subject } = await parent(); + let { pubkey } = subject; + if (!pubkey) pubkey = params.username; let { username } = params; let text = `${encodeURI(username)}@${url.hostname}`; @@ -18,5 +17,10 @@ export async function load({ params, parent, url }) { console.log(e); } + events.map((e) => { + e.seen = e.created_at; + e.user = subject; + }); + return { events, src, text }; } diff --git a/src/routes/(app)/[username]/+page.svelte b/src/routes/(app)/[username]/+page.svelte index 837257ef..22e40a9c 100644 --- a/src/routes/(app)/[username]/+page.svelte +++ b/src/routes/(app)/[username]/+page.svelte @@ -116,7 +116,7 @@ @@ -126,7 +126,7 @@ {#if events.length} {:else} -
You haven't posted anything yet
+
Nothing here yet. Post your first nostr note!
{/if}
diff --git a/src/routes/(app)/[username]/message/+page.svelte b/src/routes/(app)/[username]/message/+page.svelte new file mode 100644 index 00000000..c8a57b79 --- /dev/null +++ b/src/routes/(app)/[username]/message/+page.svelte @@ -0,0 +1,41 @@ + + + + +
+

+ {$t('transactions.sendMessage')} +

+ +
+ + + +