diff options
| author | Adam Soltys <[email protected]> | 2022-12-20 17:41:40 -0800 |
|---|---|---|
| committer | Adam Soltys <[email protected]> | 2022-12-20 17:41:40 -0800 |
| commit | 268d71cb57ff19382ff8834ca3406dda2f79343e (patch) | |
| tree | 2cb012b7f74f0947f9b03304d62c4604ab79fdfd /src/routes | |
| parent | 70208aaa216a147f2f1d43a42a5fc8e1f4be767f (diff) | |
| download | coinos-ui-268d71cb57ff19382ff8834ca3406dda2f79343e.tar.gz coinos-ui-268d71cb57ff19382ff8834ca3406dda2f79343e.zip | |
new profile page
Diffstat (limited to 'src/routes')
| -rw-r--r-- | src/routes/(app)/[username]/+layout.server.js | 1 | ||||
| -rw-r--r-- | src/routes/(app)/[username]/+page.server.js | 15 | ||||
| -rw-r--r-- | src/routes/(app)/[username]/+page.svelte | 105 | ||||
| -rw-r--r-- | src/routes/(app)/feed/+page.svelte | 42 |
4 files changed, 66 insertions, 97 deletions
diff --git a/src/routes/(app)/[username]/+layout.server.js b/src/routes/(app)/[username]/+layout.server.js index a352fe45..035536aa 100644 --- a/src/routes/(app)/[username]/+layout.server.js +++ b/src/routes/(app)/[username]/+layout.server.js @@ -5,6 +5,7 @@ export let load = async ({ params: { username } }) => { try { return { subject: await get(`/users/${username}`) }; } catch (e) { + if (username.length === 64) return { subject: { 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 1d07a1db..25835d8a 100644 --- a/src/routes/(app)/[username]/+page.server.js +++ b/src/routes/(app)/[username]/+page.server.js @@ -1,7 +1,18 @@ +import { get } from '$lib/utils'; import Qr from 'qrcode-base64'; export async function load({ params, url }) { - let text = `${encodeURI(params.username)}@${url.hostname}`; + let { username } = params; + let text = `${encodeURI(username)}@${url.hostname}`; let src = Qr.drawImg(text, { size: 300 }); - return { src, text }; + let events = []; + console.log("EV", events) + + try { + events = await get(`/${username}/events`); + } catch (e) { + console.log(e); + } + + return { events, src, text }; } diff --git a/src/routes/(app)/[username]/+page.svelte b/src/routes/(app)/[username]/+page.svelte index 42e3dd3a..e8cd2d10 100644 --- a/src/routes/(app)/[username]/+page.svelte +++ b/src/routes/(app)/[username]/+page.svelte @@ -1,83 +1,78 @@ <script> - import { browser } from '$app/environment'; - import { onMount } from 'svelte'; - import { Icon, PageNotFound } from '$comp'; - import { copy } from '$lib/utils'; + import { Feed, Icon, PageNotFound } from '$comp'; import { t } from '$lib/translations'; export let data; - let { user, subject, src, text } = data; + let { events, user, subject, src, text } = data; let followed = false; + + let { username: n } = subject; + $: username = n.length > 60 ? n.substr(0, 6) : n; </script> -<div class="container mx-auto w-full px-4 mb-4 flex flex-wrap"> - <div class="w-[240px] pt-20 space-y-5 lg:absolute left-20 mx-auto"> - <h1 class="text-3xl font-bold text-center mx-auto lg:text-left">{subject.username}</h1> +<div class="container mx-auto w-full px-4 mb-4 flex flex-wrap md:flex-nowrap"> + <div class="hidden lg:block w-[240px] md:mr-10" /> + <div class="w-[240px] lg:absolute pt-20 space-y-5 left-20 mx-auto md:mr-10"> + <h1 class="text-3xl font-bold text-center mx-auto lg:text-left">{username}</h1> <div class="text-secondary mx-auto text-center lg:text-left lg:mx-0"> {subject.address && subject.address !== 'null' ? subject.address : ''} </div> <div class="flex flex-wrap gap-2 w-full"> - <div class="w-full flex"> - <a href={`/${subject.username}/receive`} class="mx-auto"> - <button class="rounded-full border py-3 px-6 font-bold hover:opacity-80 flex w-60"> - <div class="mx-auto flex"> - <div style="mr-1">⚡️</div> - <div>{$t('user.lightning')} {$t('user.invoice')}</div> - </div> - </button> - </a> - </div> - - <div class="w-full flex"> - <a href={`/${subject.username}/receive/bitcoin`} class="mx-auto"> - <button class="rounded-full border py-3 px-6 font-bold hover:opacity-80 flex w-60"> - <div class="mx-auto flex"> - <img src="/images/bitcoin.svg" class="w-5 my-auto mr-1" /> - <div>{$t('user.bitcoin')} {$t('user.invoice')}</div> - </div> - </button> - </a> - </div> + {#if subject.username.length < 60} + <div class="w-full flex"> + <a href={`/${subject.username}/receive`} class="mx-auto"> + <button class="rounded-full border py-3 px-6 font-bold hover:opacity-80 flex w-60"> + <div class="mx-auto flex"> + <div style="mr-1">⚡️</div> + <div>{$t('user.lightning')} {$t('user.invoice')}</div> + </div> + </button> + </a> + </div> - {#if user?.username !== subject.username} <div class="w-full flex"> - <a href={`/${subject.username}/request`} class="mx-auto"> + <a href={`/${subject.username}/receive/bitcoin`} class="mx-auto"> <button class="rounded-full border py-3 px-6 font-bold hover:opacity-80 flex w-60"> <div class="mx-auto flex"> - <Icon icon="support" style="mr-1" /> - <div>{$t('transactions.requestAnInvoice')}</div> + <img src="/images/bitcoin.svg" class="w-5 my-auto mr-1" /> + <div>{$t('user.bitcoin')} {$t('user.invoice')}</div> </div> </button> </a> </div> + + {#if user?.username !== subject.username} + <div class="w-full flex"> + <a href={`/${subject.username}/request`} class="mx-auto"> + <button class="rounded-full border py-3 px-6 font-bold hover:opacity-80 flex w-60"> + <div class="mx-auto flex"> + <Icon icon="support" style="mr-1" /> + <div>{$t('transactions.requestAnInvoice')}</div> + </div> + </button> + </a> + </div> + {/if} + {:else} + <div class="w-full flex"> + <a href={`/${subject.username}/request`} class="mx-auto"> + <button class="rounded-full border py-3 px-6 font-bold hover:opacity-80 flex w-60"> + <div class="mx-auto flex"> + <Icon icon="support" style="mr-1" /> + <div>{$t('transactions.sendMessage')}</div> + </div> + </button> + </a> + </div> {/if} </div> </div> - <div class="w-full flex"> - <div class="space-y-5 mt-5 lg:pt-20 mx-auto max-w-lg"> - <div class="border-2 rounded-[20%] w-[380px] py-6 mx-auto"> - <img {src} class="mx-auto" on:click={() => copy(text)} alt="Lightning address" /> - </div> - - <div class="bg-primary font-semibold rounded-3xl text-sm p-3 flex"> - <div class="my-auto font-semibold text-lg w-full text-center">{text}</div> - <button class="ml-auto hover:opacity-80" on:click={() => copy(text)}> - <Icon icon="copy" /> - </button> - </div> - - {#if user?.username === subject.username} - <p class="text-secondary mb-1"> - {$t('user.this')} - <a href="https://lightningaddress.com" class="underline" target="_blank" rel="noreferrer" - >{$t('user.lightningAddress')}</a - > - {$t('user.likeAnEmail')} - </p> - {/if} + <div class="w-full flex md:pt-12 lg:pt-0"> + <div class="mx-auto space-y-5 mt-5 lg:max-w-lg xl:max-w-2xl"> + <Feed {events} /> </div> </div> </div> diff --git a/src/routes/(app)/feed/+page.svelte b/src/routes/(app)/feed/+page.svelte index 3269e0d2..2bbadc64 100644 --- a/src/routes/(app)/feed/+page.svelte +++ b/src/routes/(app)/feed/+page.svelte @@ -1,15 +1,9 @@ <script> - import { fade } from 'svelte/transition'; - import { Avatar, Icon } from '$comp'; - import { t } from '$lib/translations'; + import { Feed } from '$comp'; import { events } from '$lib/store'; - import VirtualScroll from 'svelte-virtual-scroll-list'; - import { browser } from '$app/environment'; - import runners from '$lib/runners'; export let data; let { user } = data; - let runner = () => runners[Math.floor(Math.random() * runners.length)]; $: length = $events?.q?.length; $: sorted = Object.values($events) @@ -17,44 +11,12 @@ .sort((a, b) => b.seen - a.seen); let w; - - 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' - : diff > 2 ? diff + 's' : 'now'; - }; </script> <svelte:window bind:innerWidth={w} /> <div class="mb-20"> <div class="container w-full mx-auto text-lg px-4 md:max-w-2xl space-y-5"> - {#if browser} - <VirtualScroll data={sorted} key="id" let:data pageMode={true} estimateSize={200}> - <div class="flex border-b py-4 text-sm text-secondary" :key={data.id} use:fade> - <div class="mb-auto mr-2"> - <div class="md:hidden"> - <Avatar size={12} src={`/api/public/runners/${runner()}`} /> - </div> - <div class="hidden md:block"> - <Avatar size={20} src={`/api/public/runners/${runner()}`} /> - </div> - </div> - - <div class="grow" style={`max-width: ${w - 100}px`}> - <div class="w-full flex pb-1 text-black"> - <div>{data.pubkey.substr(0, 6)}</div> - <div class="text-secondary"> {distance(data.seen)}</div> - </div> - <div class="break-words"> - {data.content} - </div> - </div> - </div> - </VirtualScroll> - {/if} + <Feed events={sorted} /> </div> </div> |
