diff options
| author | Adam Soltys <[email protected]> | 2023-01-18 19:44:27 -0800 |
|---|---|---|
| committer | Adam Soltys <[email protected]> | 2023-01-18 19:44:27 -0800 |
| commit | 67c4af186fec0423664b18847921eb9696a1eeef (patch) | |
| tree | 85e0fb00f3aa89fdde1cbb667bf801564bff7610 /src | |
| parent | b1ad12734eeafc36a07bd76f649a98ae9ade5723 (diff) | |
| download | coinos-ui-67c4af186fec0423664b18847921eb9696a1eeef.tar.gz coinos-ui-67c4af186fec0423664b18847921eb9696a1eeef.zip | |
pots
Diffstat (limited to 'src')
36 files changed, 262 insertions, 147 deletions
diff --git a/src/components/Event.svelte b/src/components/Event.svelte index 704a0636..68f44589 100644 --- a/src/components/Event.svelte +++ b/src/components/Event.svelte @@ -1,8 +1,8 @@ <script> - import { Avatar, Icon } from "$comp"; - export let event; + import { Avatar, Icon } from '$comp'; + export let event; - let { id, user, seen, content } = event; + let { id, user, seen, content } = event; let distance = (date) => { let m = 60; @@ -30,10 +30,10 @@ <a href={`/${user.pubkey}`}> <div class="mb-auto mr-2"> <div class="md:hidden"> - <Avatar size={12} user={user} disabled={true} /> + <Avatar size={12} {user} disabled={true} /> </div> <div class="hidden md:block"> - <Avatar size={20} user={user} disabled={true} /> + <Avatar size={20} {user} disabled={true} /> </div> </div> </a> diff --git a/src/components/Feed.svelte b/src/components/Feed.svelte index a552be67..ab757fa1 100644 --- a/src/components/Feed.svelte +++ b/src/components/Feed.svelte @@ -60,8 +60,8 @@ {#if browser} {#if sorted.length} <VirtualScroll data={sorted} key="id" let:data pageMode={true} estimateSize={200}> - <a href={`/${data.user.pubkey}/event/${data.id}`}> - <Event event={data} /> + <a href={`/${data.user.pubkey}/event/${data.id}`}> + <Event event={data} /> </a> </VirtualScroll> {:else} diff --git a/src/components/RegisterOrLogin.svelte b/src/components/RegisterOrLogin.svelte index 23a045a0..7ac2fbb3 100644 --- a/src/components/RegisterOrLogin.svelte +++ b/src/components/RegisterOrLogin.svelte @@ -6,7 +6,7 @@ import { enhance } from '$app/forms'; import { Icon, Spinner } from '$comp'; import { focus } from '$lib/utils'; - import { password } from '$lib/store'; + import { password, loginRedirect } from '$lib/store'; import { t } from '$lib/translations'; import { page } from '$app/stores'; import { generate } from '$lib/nostr'; @@ -114,6 +114,8 @@ {/if} <form class="space-y-5" on:submit|preventDefault={handleSubmit} method="POST"> + <input type="hidden" name="loginRedirect" value={$loginRedirect} /> + <div> <label for="username" class="font-semibold">{$t('login.username')}</label> <input diff --git a/src/lib/invoice.js b/src/lib/invoice.js index c81b4061..fa29130e 100644 --- a/src/lib/invoice.js +++ b/src/lib/invoice.js @@ -19,19 +19,19 @@ export default async ({ cookies, request, url }) => { let user = { username: form.get('username'), currency: form.get('currency') }; - let { id } = await post('/invoice', { invoice, user }, auth(cookies)); + let { hash } = await post('/invoice', { invoice, user }, auth(cookies)); if (request_id) { if (url.pathname.endsWith('tip')) { - throw redirect(307, `/send/${id}`); + throw redirect(307, `/send/${hash}`); } throw redirect(307, `/${user.username}/request/${request_id}`); } if (invoice.prompt) { - throw redirect(307, `/invoice/${id}/tip`); + throw redirect(307, `/invoice/${hash}/tip`); } else { - throw redirect(307, `/invoice/${id}`); + throw redirect(307, `/invoice/${hash}`); } }; diff --git a/src/lib/socket.js b/src/lib/socket.js index 755c87e4..86083974 100644 --- a/src/lib/socket.js +++ b/src/lib/socket.js @@ -58,8 +58,7 @@ export const messages = (data) => ({ async payment() { let { amount, invoice } = data; - - if (invoice) invalidate('app:invoice'); + invalidate('app:invoice'); let payments = get(txns); let i = payments.findIndex((p) => p.id === data.id); @@ -118,5 +117,5 @@ function reconnectToWebsocket() { if (currentReconnectDelay < maxReconnectDelay) { currentReconnectDelay *= 2; } - connect(); + connect(token); } diff --git a/src/locales/en.json b/src/locales/en.json index 86504df5..b7f4c316 100644 --- a/src/locales/en.json +++ b/src/locales/en.json @@ -258,12 +258,12 @@ } }, "payments": { - "amount": "Amount", - "date": "Date", - "id": "Transaction ID", + "amount": "Amount", + "date": "Date", + "id": "Transaction ID", "details": "Transaction Details", "header": "Payments", - "preimage": "Preimage", + "preimage": "Preimage", "type": "Type", "time": "Time", "sent": "Sent", diff --git a/src/routes/(app)/+layout.server.js b/src/routes/(app)/+layout.server.js index f69c914f..63a01df6 100644 --- a/src/routes/(app)/+layout.server.js +++ b/src/routes/(app)/+layout.server.js @@ -29,8 +29,8 @@ export async function load({ cookies, request, url, params }) { rate = await get('/rate'); rates = await get('/rates'); } catch (e) { - console.log(e) - } + console.log(e); + } return { user, token, rate, rates }; } diff --git a/src/routes/(app)/[username]/(profile)/event/[id]/+page.server.js b/src/routes/(app)/[username]/(profile)/event/[id]/+page.server.js index f31b4902..6182de17 100644 --- a/src/routes/(app)/[username]/(profile)/event/[id]/+page.server.js +++ b/src/routes/(app)/[username]/(profile)/event/[id]/+page.server.js @@ -5,9 +5,8 @@ export async function load({ params: { id } }) { try { let event = await get(`/event/${id}`); if (!event) throw error(500, 'Event not found'); - return { event }; + return { event }; } catch (e) { throw error(500, e.message); } - } diff --git a/src/routes/(app)/[username]/(profile)/event/[id]/+page.svelte b/src/routes/(app)/[username]/(profile)/event/[id]/+page.svelte index 1347947f..85fc815a 100644 --- a/src/routes/(app)/[username]/(profile)/event/[id]/+page.svelte +++ b/src/routes/(app)/[username]/(profile)/event/[id]/+page.svelte @@ -1,7 +1,7 @@ <script> - import { Event } from "$comp"; - export let data; - let { event } = data; + import { Event } from '$comp'; + export let data; + let { event } = data; </script> <Event {event} /> diff --git a/src/routes/(app)/[username]/dashboard/+page.svelte b/src/routes/(app)/[username]/dashboard/+page.svelte index 3779ab2f..314e3577 100644 --- a/src/routes/(app)/[username]/dashboard/+page.svelte +++ b/src/routes/(app)/[username]/dashboard/+page.svelte @@ -121,7 +121,7 @@ <!-- <div class="font-bold"> --> <!-- {f(amount * (rate / sats), currency)} --> <!-- </div> --> - <!-- --> + <!-- --> <!-- <div class="text-secondary">{sat(amount)}</div> --> <!-- </div> --> <!-- </div> --> diff --git a/src/routes/(app)/[username]/payments/[...page]/+page.svelte b/src/routes/(app)/[username]/payments/[...page]/+page.svelte index 4348eb72..e37b3221 100644 --- a/src/routes/(app)/[username]/payments/[...page]/+page.svelte +++ b/src/routes/(app)/[username]/payments/[...page]/+page.svelte @@ -163,10 +163,10 @@ <div class="text-secondary text-right text-sm my-auto"> <div> - {format(new Date(tx.created_at), 'h:mm aaa')} + {format(new Date(tx.created), 'h:mm aaa')} </div> <div> - {format(new Date(tx.created_at), 'MMM d')} + {format(new Date(tx.created), 'MMM d')} </div> </div> </div> diff --git a/src/routes/(app)/invoice/+server.js b/src/routes/(app)/invoice/+server.js new file mode 100644 index 00000000..1321739e --- /dev/null +++ b/src/routes/(app)/invoice/+server.js @@ -0,0 +1,5 @@ +import { auth, post } from '$lib/utils'; +import { json } from '@sveltejs/kit'; + +export let POST = async ({ cookies: c, request: r }) => + json(await post('/invoice', await r.json(), auth(c))); diff --git a/src/routes/(app)/invoice/[id]/+layout.server.js b/src/routes/(app)/invoice/[hash]/+layout.server.js index 78d8481e..61a479ab 100644 --- a/src/routes/(app)/invoice/[id]/+layout.server.js +++ b/src/routes/(app)/invoice/[hash]/+layout.server.js @@ -5,15 +5,15 @@ import { redirect } from '@sveltejs/kit'; export async function load({ depends, params, url }) { depends('app:invoice'); - let { id } = params; - let invoice = await get(`/invoice?id=${id}`); + let { hash } = params; + let invoice = await get(`/invoice?hash=${hash}`); let { amount, received } = invoice; amount = parseInt(amount); let paid = (!amount && received) || (amount > 0 && received >= amount); - if (paid && !url.pathname.endsWith('paid')) throw redirect(307, `/invoice/${id}/paid`); + if (paid && !url.pathname.endsWith('paid')) throw redirect(307, `/invoice/${hash}/paid`); let sm = Qr.drawImg(invoice.text, { size: 300 }); - return { id, invoice, sm, lg: sm }; + return { hash, invoice, sm, lg: sm }; } diff --git a/src/routes/(app)/invoice/[id]/+layout.svelte b/src/routes/(app)/invoice/[hash]/+layout.svelte index 4fa864ce..4fa864ce 100644 --- a/src/routes/(app)/invoice/[id]/+layout.svelte +++ b/src/routes/(app)/invoice/[hash]/+layout.svelte diff --git a/src/routes/(app)/invoice/[id]/+page.server.js b/src/routes/(app)/invoice/[hash]/+page.server.js index 1068f273..1068f273 100644 --- a/src/routes/(app)/invoice/[id]/+page.server.js +++ b/src/routes/(app)/invoice/[hash]/+page.server.js diff --git a/src/routes/(app)/invoice/[id]/+page.svelte b/src/routes/(app)/invoice/[hash]/+page.svelte index 28ff27c0..28ff27c0 100644 --- a/src/routes/(app)/invoice/[id]/+page.svelte +++ b/src/routes/(app)/invoice/[hash]/+page.svelte diff --git a/src/routes/(app)/invoice/[id]/paid/+page.svelte b/src/routes/(app)/invoice/[hash]/paid/+page.svelte index 2ccbc971..2ccbc971 100644 --- a/src/routes/(app)/invoice/[id]/paid/+page.svelte +++ b/src/routes/(app)/invoice/[hash]/paid/+page.svelte diff --git a/src/routes/(app)/invoice/[id]/tip/+page.server.js b/src/routes/(app)/invoice/[hash]/tip/+page.server.js index c78e5020..c78e5020 100644 --- a/src/routes/(app)/invoice/[id]/tip/+page.server.js +++ b/src/routes/(app)/invoice/[hash]/tip/+page.server.js diff --git a/src/routes/(app)/invoice/[id]/tip/+page.svelte b/src/routes/(app)/invoice/[hash]/tip/+page.svelte index 308720ab..308720ab 100644 --- a/src/routes/(app)/invoice/[id]/tip/+page.svelte +++ b/src/routes/(app)/invoice/[hash]/tip/+page.svelte diff --git a/src/routes/(app)/login/+page.server.js b/src/routes/(app)/login/+page.server.js index 873b68d4..4c3c0897 100644 --- a/src/routes/(app)/login/+page.server.js +++ b/src/routes/(app)/login/+page.server.js @@ -14,7 +14,7 @@ export const actions = { try { let r = await login(user, cookies); - console.log("R", r) + console.log('R', r); } catch (e) { return invalid(400, { error: 'Login failed', message: e.message, ...form }); } diff --git a/src/routes/(app)/password/+server.js b/src/routes/(app)/password/+server.js index 9f2ab6b8..b4a81740 100644 --- a/src/routes/(app)/password/+server.js +++ b/src/routes/(app)/password/+server.js @@ -2,6 +2,6 @@ import { json } from '@sveltejs/kit'; import { auth, post } from '$lib/utils'; export async function POST({ cookies, request }) { - let result = await post('/checkPassword', await request.json(), auth(cookies)); + let result = await post('/password', await request.json(), auth(cookies)); return json(result); } diff --git a/src/routes/(app)/voucher/[redeemcode]/+page.server.js b/src/routes/(app)/pot/[name]/+page.server.js index fbbec7bc..8f8b9d8f 100644 --- a/src/routes/(app)/voucher/[redeemcode]/+page.server.js +++ b/src/routes/(app)/pot/[name]/+page.server.js @@ -2,12 +2,11 @@ import { error, redirect } from '@sveltejs/kit'; import { auth, get, post } from '$lib/utils'; import Qr from 'qrcode-base64'; -export let load = async ({ params: { redeemcode }, url }) => { - let payment = await get(`/voucher/${redeemcode}`); - console.log(payment); +export let load = async ({ params: { name }, url }) => { + let { amount, payments } = await get(`/pot/${name}`); let src = Qr.drawImg(url.href, { size: 300 }); - return { payment, src }; + return { amount, payments, src }; }; export const actions = { diff --git a/src/routes/(app)/pot/[name]/+page.svelte b/src/routes/(app)/pot/[name]/+page.svelte new file mode 100644 index 00000000..48dc9b31 --- /dev/null +++ b/src/routes/(app)/pot/[name]/+page.svelte @@ -0,0 +1,96 @@ +<script> + import { format } from 'date-fns'; + import { enhance } from '$app/forms'; + import { page } from '$app/stores'; + import { Avatar, Icon } from '$comp'; + import { toast } from '@zerodevx/svelte-toast'; + import { t } from '$lib/translations'; + import { copy, f, s, sat, sats } from '$lib/utils'; + import { loginRedirect, selectedRate } from '$lib/store'; + + export let data; + + let { amount, src, payments, rates, user } = data; + let { name } = $page.params; + + toast.pop(0); + + let currency = user ? user.currency : 'CAD'; + let rate = rates[currency]; + + $: amountFiat = parseFloat(((amount * rate) / sats).toFixed(2)); + $loginRedirect = $page.url.pathname; +</script> + +<div class="container px-4 max-w-xl mx-auto mt-10 space-y-5"> + <div class="w-full flex"> + <a href="/" class="mx-auto"> + <Icon icon="logo" /> + </a> + </div> + + <div class="flex justify-center items-center text-center"> + <div class="shadow-xl rounded-3xl px-10 pt-5 pb-10 space-y-5 w-full mx-5"> + <div class="relative"> + <!-- <p class="absolute right-0 top-1 underline"><Icon icon="settings" /></p> --> + <h1 class="text-2xl md:text-3xl font-semibold">Public Pot</h1> + </div> + <p class="text-secondary">Anyone who knows the URL for this pot can add or take out funds</p> + <div class="flex justify-center gap-4"> + <div class="my-auto"> + <h2 class="text-2xl md:text-3xl font-semibold"> + {f(amountFiat, currency)} + </h2> + <h3 class="text-secondary md:text-lg mt-1"> + {sat(amount)} + </h3> + </div> + </div> + <div class="mx-auto my-auto flex gap-2 justify-center" data-sveltekit-prefetch="off"> + <a href={`/send/pot/${name}`}> + <button class="text-lg rounded-full border py-3 px-7 font-bold hover:opacity-80"> + Chip in + </button> + </a> + <a href={`/pot/${name}/withdraw`}> + <button class="text-lg rounded-full border py-3 px-7 font-bold hover:opacity-80"> + Dip in + </button> + </a> + </div> + <div class="text-base"> + {#each payments as p} + <a href={`/${p.user.username}`}> + <div class="flex h-24 hover:bg-gray-100 px-4"> + <div class="flex grow"> + <div class="flex my-auto"> + <div class="my-auto"> + <Avatar user={p.user} size={12} /> + </div> + <div class="ml-1 text-secondary my-auto"> + {p.user.username} + {p.amount > 0 ? 'took out' : 'threw in'} + </div> + </div> + <div class="text-secondary my-auto"> + {sat(p.amount)} + </div> + </div> + + <div class="text-secondary text-right text-sm my-auto"> + <div> + {format(new Date(p.created), 'h:mm aaa')} + </div> + <div> + {format(new Date(p.created), 'MMM d')} + </div> + </div> + </div> + </a> + {:else} + <p class="text-secondary text-lg text-center">{$t('payments.empty')}</p> + {/each} + </div> + </div> + </div> +</div> diff --git a/src/routes/(app)/pot/[name]/withdraw/+page.server.js b/src/routes/(app)/pot/[name]/withdraw/+page.server.js new file mode 100644 index 00000000..6534e07b --- /dev/null +++ b/src/routes/(app)/pot/[name]/withdraw/+page.server.js @@ -0,0 +1,21 @@ +import { invalid, redirect } from '@sveltejs/kit'; +import { auth, post } from '$lib/utils'; + +export async function load({ parent }) { + let { user } = await parent(); + if (!user) throw redirect(307, '/register'); +} + +export const actions = { + default: async ({ cookies, request }) => { + let body = Object.fromEntries(await request.formData()); + + try { + await post('/withdraw', body, auth(cookies)); + } catch (e) { + return invalid(400, { message: e.message }); + } + + throw redirect(307, `/pot/${body.name}`); + } +}; diff --git a/src/routes/(app)/send/voucher/+page.svelte b/src/routes/(app)/pot/[name]/withdraw/+page.svelte index 0020adc3..bb11ddde 100644 --- a/src/routes/(app)/send/voucher/+page.svelte +++ b/src/routes/(app)/pot/[name]/withdraw/+page.svelte @@ -9,7 +9,7 @@ export let data; export let form; - let { address, amount } = $page.params; + let { amount, name } = $page.params; let { currency } = data.user; let loading; @@ -35,6 +35,7 @@ <Numpad bind:amount {currency} /> <form method="POST" use:enhance on:submit={submit}> + <input name="name" value={name} type="hidden" /> <input name="amount" value={amount} type="hidden" /> <input name="pin" value={$pin} type="hidden" /> diff --git a/src/routes/(app)/register/+page.server.js b/src/routes/(app)/register/+page.server.js index 793bd7f6..58b62ba2 100644 --- a/src/routes/(app)/register/+page.server.js +++ b/src/routes/(app)/register/+page.server.js @@ -9,10 +9,12 @@ export const load = async ({ parent }) => { export const actions = { default: async ({ cookies, request }) => { let form = Object.fromEntries(await request.formData()); - let { username, password, cipher, salt, pubkey } = form; + let { username, password, cipher, salt, pubkey, loginRedirect } = form; let user = { username, password, cipher, salt, pubkey }; let error; + console.log('LR', loginRedirect); + try { await post('/register', { user }); } catch (e) { @@ -27,6 +29,6 @@ export const actions = { } if (error) return invalid(400, { error }); - throw redirect(307, `/${user.username}/dashboard`); + throw redirect(307, loginRedirect || `/${user.username}/dashboard`); } }; diff --git a/src/routes/(app)/send/[...text]/+page.server.js b/src/routes/(app)/send/[...text]/+page.server.js index eab57d64..f0c8b892 100644 --- a/src/routes/(app)/send/[...text]/+page.server.js +++ b/src/routes/(app)/send/[...text]/+page.server.js @@ -73,8 +73,8 @@ export async function load({ cookies, params, request, url }) { export const actions = { default: async ({ request, url }) => { const form = await request.formData(); - await parse(form.get('text'), url.host); - - return invalid(403, { error: 'Does not compute, try again' }); + let t = form.get('text'); + await parse(t, url.host); + throw redirect(307, `/send/pot/${t}`); } }; diff --git a/src/routes/(app)/send/voucher/+page.server.js b/src/routes/(app)/send/pot/[name]/[...amount]/+page.server.js index d479c76a..f25fcb6d 100644 --- a/src/routes/(app)/send/voucher/+page.server.js +++ b/src/routes/(app)/send/pot/[name]/[...amount]/+page.server.js @@ -3,14 +3,15 @@ import { auth, post } from '$lib/utils'; export const actions = { default: async ({ cookies, request }) => { + let body = Object.fromEntries(await request.formData()); let p; + try { - let body = Object.fromEntries(await request.formData()); p = await post('/send', body, auth(cookies)); } catch (e) { return invalid(400, { message: e.message }); } - if (p) throw redirect(307, `/voucher/${p.redeemcode}`); + if (p) throw redirect(307, `/pot/${body.name}`); } }; diff --git a/src/routes/(app)/send/pot/[name]/[...amount]/+page.svelte b/src/routes/(app)/send/pot/[name]/[...amount]/+page.svelte new file mode 100644 index 00000000..bb11ddde --- /dev/null +++ b/src/routes/(app)/send/pot/[name]/[...amount]/+page.svelte @@ -0,0 +1,55 @@ +<script> + import { t } from '$lib/translations'; + import { enhance } from '$app/forms'; + import { Icon, Numpad, Spinner } from '$comp'; + import { page } from '$app/stores'; + import { back } from '$lib/utils'; + import { pin } from '$lib/store'; + + export let data; + export let form; + + let { amount, name } = $page.params; + let { currency } = data.user; + let loading; + + let submit = () => (loading = true); + $: update(form); + let update = () => { + if (form?.message.includes('pin')) $pin = undefined; + loading = false; + }; +</script> + +<button class="ml-5 md:ml-20 mt-5 md:mt-10 hover:opacity-80" on:click={back}> + <Icon icon="arrow-left" style="w-10" /> +</button> + +{#if form?.message} + <div class="text-red-600 text-center"> + {form.message} + </div> +{/if} + +<div class="container px-4 mt-20 max-w-xl mx-auto"> + <Numpad bind:amount {currency} /> + + <form method="POST" use:enhance on:submit={submit}> + <input name="name" value={name} type="hidden" /> + <input name="amount" value={amount} type="hidden" /> + <input name="pin" value={$pin} type="hidden" /> + + <div class="flex w-full"> + <button + type="submit" + class="opacity-100 hover:opacity-80'} rounded-2xl border py-3 font-bold mx-auto mt-2 bg-black text-white px-4 w-24" + > + {#if loading} + <Spinner /> + {:else} + {$t('payments.send')} + {/if} + </button> + </div> + </form> +</div> diff --git a/src/routes/(app)/send/user/[username]/[...amount]/+page.server.js b/src/routes/(app)/send/user/[username]/[...amount]/+page.server.js index a659eef3..e670320c 100644 --- a/src/routes/(app)/send/user/[username]/[...amount]/+page.server.js +++ b/src/routes/(app)/send/user/[username]/[...amount]/+page.server.js @@ -14,6 +14,7 @@ export const actions = { try { let body = Object.fromEntries(await request.formData()); let { amount, confirmed } = body; + amount = parseInt(amount); if (!confirmed) { return invalid(403, { amount, confirm: true }); @@ -21,6 +22,7 @@ export const actions = { await post('/send', body, auth(cookies)); } catch (e) { + console.log(e); return invalid(400, { message: e.message }); } diff --git a/src/routes/(app)/send/user/[username]/[...amount]/+page.svelte b/src/routes/(app)/send/user/[username]/[...amount]/+page.svelte index 4cb8cfce..07e29f44 100644 --- a/src/routes/(app)/send/user/[username]/[...amount]/+page.svelte +++ b/src/routes/(app)/send/user/[username]/[...amount]/+page.svelte @@ -5,23 +5,32 @@ import { enhance } from '$app/forms'; import { Avatar, Icon, Numpad, Spinner } from '$comp'; import { page } from '$app/stores'; - import { back, f, s, sats } from '$lib/utils'; + import { back, f, post, s, sats } from '$lib/utils'; export let data; export let form; - let { recipient, user } = data; + let { recipient, rates, user } = data; let currency = user?.currency || 'USD'; let amount = form?.amount || data.amount; let a, af, amountFiat = amount * ($selectedRate / sats), - fiat = !amount; + fiat = !amount, + hash; - let setAmount = () => { + let setAmount = async () => { amount = a; amountFiat = af; + + ({ hash } = await post('/invoice', { + invoice: { + amount, + rate: rates[recipient.currency] + }, + user: recipient + })); }; let handleBack = () => { @@ -77,6 +86,7 @@ <input name="username" value={recipient.username} type="hidden" /> <input name="confirmed" value={form?.confirm} type="hidden" /> <input name="pin" value={$pin} type="hidden" /> + <input name="hash" value={hash} type="hidden" /> <div class="flex w-full"> {#if amount} diff --git a/src/routes/(app)/sent/+page.server.js b/src/routes/(app)/sent/+page.server.js index fb35e367..381ff32f 100644 --- a/src/routes/(app)/sent/+page.server.js +++ b/src/routes/(app)/sent/+page.server.js @@ -1,6 +1,6 @@ import { get, auth } from '$lib/utils'; export let load = async ({ cookies }) => { - let { payments } = await get('/payments', auth(cookies)); - return { payments } -} + let { payments } = await get('/payments', auth(cookies)); + return { payments }; +}; diff --git a/src/routes/(app)/sent/+page.svelte b/src/routes/(app)/sent/+page.svelte index 2168a517..79a0aa6e 100644 --- a/src/routes/(app)/sent/+page.svelte +++ b/src/routes/(app)/sent/+page.svelte @@ -8,7 +8,7 @@ export let data; let { payments, user } = data; - let payment = payments[0] + let payment = payments[0]; let { amount, rate } = payment; amount = Math.abs(amount); diff --git a/src/routes/(app)/tx/[id]/+page.server.js b/src/routes/(app)/tx/[id]/+page.server.js index 7db5d4f1..cbd7355e 100644 --- a/src/routes/(app)/tx/[id]/+page.server.js +++ b/src/routes/(app)/tx/[id]/+page.server.js @@ -2,5 +2,5 @@ import { auth, get } from '$lib/utils'; export async function load({ cookies, params }) { let tx = await get(`/payments/${params.id}`, auth(cookies)); - return { tx }; + return { tx }; } diff --git a/src/routes/(app)/tx/[id]/+page.svelte b/src/routes/(app)/tx/[id]/+page.svelte index 63e45f17..a2bb1459 100644 --- a/src/routes/(app)/tx/[id]/+page.svelte +++ b/src/routes/(app)/tx/[id]/+page.svelte @@ -2,13 +2,15 @@ import { t } from '$lib/translations'; import { back, copy, f, s, sats } from '$lib/utils'; import { Avatar, Icon } from '$comp'; - import { format, parseISO } from 'date-fns'; + import { format } from 'date-fns'; import { PUBLIC_EXPLORER as expl } from '$env/static/public'; export let data; let { user, tx } = data; let { username } = user; - let { amount, hash, createdAt, rate, network, preimage, fee, currency } = tx; + let { amount, hash, created, rate, type, preimage, fee, currency } = tx; + fee = fee || 0; + let fiat = (Math.abs(amount) * rate) / sats; </script> @@ -32,12 +34,12 @@ <div> <div class="font-bold">{$t('payments.date')}</div> <div> - {format(parseISO(createdAt), 'MMMM d')}, - {format(parseISO(createdAt), 'h:mm aaa')} + {format(new Date(created), 'MMMM d')}, + {format(new Date(created), 'h:mm aaa')} </div> </div> - {#if network === 'lightning'} + {#if type === 'lightning'} <div> <div class="font-bold">{$t('payments.preimage')}</div> <div> @@ -47,16 +49,14 @@ {:else} <div> <div class="font-bold">{$t('payments.id')}</div> - <div class="flex"> - <div> - <a href={`${expl}/tx/${hash}`} target="_blank" class="text-blue-600">{hash}</a> + <div class="flex"> + <div> + <a href={`${expl}/tx/${hash}`} target="_blank" class="text-blue-600">{hash}</a> + </div> + <button class="flex font-bold hover:opacity-80 mb-auto" on:click={() => copy(hash)} + ><Icon icon="copy" style="mr-1" /> + </button> </div> - <button - class="flex font-bold hover:opacity-80 mb-auto" - on:click={() => copy(hash)} - ><Icon icon="copy" style="mr-1" /> - </button> - </div> </div> {/if} </div> diff --git a/src/routes/(app)/voucher/[redeemcode]/+page.svelte b/src/routes/(app)/voucher/[redeemcode]/+page.svelte deleted file mode 100644 index 9af67498..00000000 --- a/src/routes/(app)/voucher/[redeemcode]/+page.svelte +++ /dev/null @@ -1,77 +0,0 @@ -<script> - import { enhance } from '$app/forms'; - import { page } from '$app/stores'; - import { Avatar, Icon } from '$comp'; - import { toast } from '@zerodevx/svelte-toast'; - import { t } from '$lib/translations'; - import { copy, f, s, sat, sats } from '$lib/utils'; - import { loginRedirect, selectedRate } from '$lib/store'; - - export let data; - let { src } = data; - $: ({ amount, currency, rate, redeemed, redeemcode, user, redeemer } = data.payment); - - toast.pop(0); - - $: amountFiat = parseFloat(((-amount * rate) / sats).toFixed(2)); -</script> - -<div class="container px-4 max-w-lg mx-auto mt-10 space-y-5"> - <div class="w-full flex"> - <a href="/" class="mx-auto"> - <Icon icon="logo" /> - </a> - </div> - - <div class="flex justify-center items-center text-center"> - <div class="shadow-xl rounded-3xl px-10 pt-5 pb-10 space-y-5 w-full mx-5"> - {#if !redeemed} - <img - {src} - class="w-[300px] mx-auto cursor-pointer" - on:click={() => copy(redeemcode)} - alt="Redeem Code" - /> - {/if} - <div class="flex justify-center gap-4"> - <div class="my-auto"> - <h2 class="text-2xl md:text-3xl font-semibold"> - {f(amountFiat, currency)} - </h2> - <h3 class="text-secondary md:text-lg mt-1"> - {sat(amount)} - </h3> - </div> - <div class="my-auto">{$t('transactions.from')}</div> - <div class="flex"> - <Avatar {user} size={20} /> - <div class="my-auto">{user.username}</div> - </div> - </div> - <div class="mx-auto my-auto flex gap-2 justify-center" data-sveltekit-prefetch="off"> - {#if redeemer} - <div class="my-auto">{$t('transactions.redeemedBy')}</div> - <div class="flex"> - <Avatar user={redeemer} size={20} /> - <div class="my-auto">{redeemer.username}</div> - </div> - {:else} - <form - method="POST" - use:enhance - on:submit={() => ($loginRedirect = `/redeem/${redeemcode}`)} - > - <button - type="submit" - class="text-lg rounded-full border py-3 px-7 font-bold hover:opacity-80" - class:bg-gray-200={redeemed} - disabled={$loginRedirect || redeemed} - > - {redeemed ? $t('transactions.redeemed') : $t('transactions.redeem')} - </button> - </form> - {/if} - </div> - </div> - </div> -</div> |
