diff options
| author | Adam Soltys <[email protected]> | 2023-02-01 10:04:29 -0800 |
|---|---|---|
| committer | Adam Soltys <[email protected]> | 2023-02-01 10:04:29 -0800 |
| commit | c26727b1bab7398f94520fa10a502957c99fcab7 (patch) | |
| tree | e822737fdda40b66da8653b65203ccfc5397e877 /src | |
| parent | 4514e5cf43069c552fed9f5f975d08664ca0d3b9 (diff) | |
| parent | 5085ef51412bc4d1e18bdabf29cd9fe3f7183e1c (diff) | |
| download | coinos-ui-c26727b1bab7398f94520fa10a502957c99fcab7.tar.gz coinos-ui-c26727b1bab7398f94520fa10a502957c99fcab7.zip | |
Merge branch 'master' into staging
Diffstat (limited to 'src')
23 files changed, 100 insertions, 40 deletions
diff --git a/src/components/Numpad.svelte b/src/components/Numpad.svelte index d74255e0..5ffaa2ea 100644 --- a/src/components/Numpad.svelte +++ b/src/components/Numpad.svelte @@ -94,7 +94,7 @@ let prev = ''; let input = (e) => { - if (prev === '0') { + if (prev === '0' && html !== '0.') { prev = ''; html = html.replace('0', ''); } @@ -102,7 +102,8 @@ let sel = getSelection(); let i = sel.focusOffset; - let clean = html.substr(0,15) + let clean = html + .substr(0, 15) .replace(/[^0-9.,]+/g, '') .replace('.', 'F') .replace(/\./g, '') @@ -138,7 +139,6 @@ let node = e.target.childNodes[0]; let range = document.createRange(); - console.log('NODE', node, i); if (node) { range.setStart(node, i); range.setEnd(node, i); diff --git a/src/components/Password.svelte b/src/components/Password.svelte index 95a52cac..fd39441c 100644 --- a/src/components/Password.svelte +++ b/src/components/Password.svelte @@ -35,7 +35,7 @@ class="bg-primary" bind:value={password} autocapitalize="none" - use:focus + use:focus /> {:else} <input @@ -45,7 +45,7 @@ class="bg-primary" bind:value={password} autocapitalize="none" - use:focus + use:focus /> {/if} <button diff --git a/src/components/Pin.svelte b/src/components/Pin.svelte index c7889aa9..7225ac37 100644 --- a/src/components/Pin.svelte +++ b/src/components/Pin.svelte @@ -1,5 +1,5 @@ <script> - import { focus } from "$lib/utils"; + import { focus } from '$lib/utils'; import { pin } from '$lib/store'; let pinCode = ''; diff --git a/src/components/Qr.svelte b/src/components/Qr.svelte index 5fea7cbd..c67d134e 100644 --- a/src/components/Qr.svelte +++ b/src/components/Qr.svelte @@ -10,5 +10,5 @@ on:click={() => screenfull.toggle(qr)} on:keydown={() => screenfull.toggle(qr)} > -<img {src} class="mx-auto" alt="QR Code" /> + <img {src} class="mx-auto" alt="QR Code" /> </div> diff --git a/src/lib/upload.js b/src/lib/upload.js index 899dbb0c..d8b27061 100644 --- a/src/lib/upload.js +++ b/src/lib/upload.js @@ -1,5 +1,5 @@ export const upload = async (file, type, progress, token) => { - console.log("TYPE", type) + console.log('TYPE', type); let url = `/api/upload/${type}`; let formData = new FormData(); formData.append('file', file); diff --git a/src/lib/utils.js b/src/lib/utils.js index e4b1194f..2b5dda90 100644 --- a/src/lib/utils.js +++ b/src/lib/utils.js @@ -137,7 +137,7 @@ export const login = async (user, cookies) => { let expires = new Date(); expires.setSeconds(expires.getSeconds() + maxAge); - let opts = { path: '/', expires } + let opts = { path: '/', expires }; cookies.set('username', user.username, opts); cookies.set('token', token, opts); }; diff --git a/src/routes/(app)/+layout.server.js b/src/routes/(app)/+layout.server.js index 4c09937c..11337c2a 100644 --- a/src/routes/(app)/+layout.server.js +++ b/src/routes/(app)/+layout.server.js @@ -15,9 +15,9 @@ export async function load({ cookies, request, url, params }) { } catch (e) {} } - if (user?.needsMigration) { - throw redirect(307, `/migrate`); - } + if (user?.needsMigration) { + throw redirect(307, `/migrate`); + } if (user && ['/', '/login', '/register'].includes(pathname) && request.method === 'GET') { throw redirect(307, `/${user.username}/dashboard`); diff --git a/src/routes/(app)/[username]/+layout.server.js b/src/routes/(app)/[username]/+layout.server.js index 8279698a..27502386 100644 --- a/src/routes/(app)/[username]/+layout.server.js +++ b/src/routes/(app)/[username]/+layout.server.js @@ -5,8 +5,8 @@ export let load = async ({ depends, params: { username } }) => { depends('app:user'); try { - let subject = await get(`/users/${username}`) - return { subject }; + let subject = await get(`/users/${username}`); + return { subject }; } catch (e) { console.log(e); throw error(500, 'Unable to retrieve user account data'); diff --git a/src/routes/(app)/[username]/payments/[...page]/+page.server.js b/src/routes/(app)/[username]/payments/[...page]/+page.server.js index 6ced265d..adc6dac8 100644 --- a/src/routes/(app)/[username]/payments/[...page]/+page.server.js +++ b/src/routes/(app)/[username]/payments/[...page]/+page.server.js @@ -14,7 +14,7 @@ export async function load({ cookies, params, request }) { let offset = (page - 1) * limit; if (!start) start = Date.now() / 1000 - 24 * 60 * 60; - let url = `/payments?v2=true&start=${start * 1000}&limit=${limit}&offset=${offset}`; + let url = `/payments?start=${start * 1000}&limit=${limit}&offset=${offset}`; if (end) url += `&end=${end * 1000}`; let { total, payments } = await get(url, auth(cookies)); diff --git a/src/routes/(app)/[username]/payments/[...page]/+page.svelte b/src/routes/(app)/[username]/payments/[...page]/+page.svelte index 551238cb..c9731299 100644 --- a/src/routes/(app)/[username]/payments/[...page]/+page.svelte +++ b/src/routes/(app)/[username]/payments/[...page]/+page.svelte @@ -4,7 +4,7 @@ import { format, parseISO } from 'date-fns'; import { newPayment, payments } from '$lib/store'; import { t } from '$lib/translations'; - import { f, s, sat, sats } from '$lib/utils'; + import { get, f, s, sat, sats } from '$lib/utils'; import { page } from '$app/stores'; import { differenceInDays, getUnixTime, sub } from 'date-fns'; import { goto, invalidate } from '$app/navigation'; @@ -49,14 +49,41 @@ ? $page.url.pathname.substring(0, $page.url.pathname.lastIndexOf('/')) : $page.url.pathname; - let csv = () => { - const keys = ['hash', 'updatedAt', 'rate', 'currency', 'amount', 'fee', 'tip']; - const csv = + let csv = async () => { + let url = `/${user.username}/payments`; + if (start) url += `/${start}`; + if (end) url += `/${end}`; + + let { payments } = await get(url); + + payments = payments.map((p) => ({ + ...p, + created: new Date(p.created), + amount_fiat: f((p.amount * p.rate) / sats, p.currency), + fee_fiat: p.fee ? f((p.fee * p.rate) / sats, p.currency) : null, + tip_fiat: p.tip ? f((p.tip * p.rate) / sats, p.currency) : null + })); + + let keys = [ + 'type', + 'id', + 'created', + 'rate', + 'currency', + 'amount', + 'fee', + 'tip', + 'amount_fiat', + 'fee_fiat', + 'tip_fiat' + ]; + + let csv = keys.map((k) => `"${k}"`).join(',') + '\n' + - $payments.map((r) => keys.map((k) => `"${r[k]}"`).join(',')).join('\n'); + payments.map((r) => keys.map((k) => `"${r[k] || ''}"`).join(',')).join('\n'); - const filename = 'payments.csv'; + let filename = 'payments.csv'; let blob = new Blob([csv], { type: 'text/csv;charset=utf-8;' }); if (navigator.msSaveBlob) { navigator.msSaveBlob(blob, filename); @@ -141,7 +168,11 @@ <a href={`/pot/${p.pot}`}> <div class="text-secondary flex"> <div class="my-auto mr-1"> - <img src="/icons/logo-symbol.svg" class="w-12 border-4 border-transparent" alt="Pot" /> + <img + src="/icons/logo-symbol.svg" + class="w-12 border-4 border-transparent" + alt="Pot" + /> </div> <div class="my-auto">Pot</div> @@ -160,9 +191,13 @@ <div class="text-secondary flex"> {#if p.type === types.lightning} <div class="text-3xl">⚡️</div> - {:else} + {:else if p.type === types.bitcoin} <div class="my-auto mr-1"> - <img src="/images/bitcoin.svg" class="w-12 border-4 border-transparent" alt="Bitcoin" /> + <img + src="/images/bitcoin.svg" + class="w-12 border-4 border-transparent" + alt="Bitcoin" + /> </div> {/if} diff --git a/src/routes/(app)/[username]/payments/[...page]/+server.js b/src/routes/(app)/[username]/payments/[...page]/+server.js new file mode 100644 index 00000000..c7c5222d --- /dev/null +++ b/src/routes/(app)/[username]/payments/[...page]/+server.js @@ -0,0 +1,18 @@ +import { get, auth } from '$lib/utils'; +import { json } from '@sveltejs/kit'; + +export async function GET({ cookies, params }) { + let parts = params.page.split('/'); + + let start, end; + if (parts.length === 1) [start] = parts; + if (parts.length === 2) [start, end] = parts; + + if (!start) start = Date.now() / 1000 - 24 * 60 * 60; + + let url = `/payments?start=${start * 1000}`; + if (end) url += `&end=${end * 1000}`; + + let { payments } = await get(url, auth(cookies)); + return json({ payments }); +} diff --git a/src/routes/(app)/[username]/receive/[...param]/+page.svelte b/src/routes/(app)/[username]/receive/[...param]/+page.svelte index 1fbd0584..7ca2770e 100644 --- a/src/routes/(app)/[username]/receive/[...param]/+page.svelte +++ b/src/routes/(app)/[username]/receive/[...param]/+page.svelte @@ -18,7 +18,7 @@ let { currency, username } = data.subject; let { user } = data; - let submit; + let submit; </script> <form method="POST" class="flex justify-center items-center mt-24 mb-3 px-3" use:enhance> @@ -34,9 +34,9 @@ <input type="hidden" name="prompt" value={false} /> <div class="space-y-3 w-[300px] mx-auto"> - <Numpad bind:amount bind:currency {submit} /> + <Numpad bind:amount bind:currency {submit} /> <button - bind:this={submit} + bind:this={submit} type="submit" class="bg-black text-white rounded-xl w-full h-[48px] flex justify-center items-center font-semibold opacity-100 hover:opacity-80" diff --git a/src/routes/(app)/[username]/settings/[...tab]/+page.svelte b/src/routes/(app)/[username]/settings/[...tab]/+page.svelte index e1555248..1e8b31ce 100644 --- a/src/routes/(app)/[username]/settings/[...tab]/+page.svelte +++ b/src/routes/(app)/[username]/settings/[...tab]/+page.svelte @@ -60,12 +60,12 @@ if ($avatar) { await upload($avatar.file, $avatar.type, $avatar.progress, token); - await fetch(`/api/public/${id}-profile.webp`, {cache: 'reload', mode: 'no-cors'}) + await fetch(`/api/public/${id}-profile.webp`, { cache: 'reload', mode: 'no-cors' }); } if ($banner) { await upload($banner.file, $banner.type, $banner.progress, token); - await fetch(`/api/public/${id}-banner.webp`, {cache: 'reload', mode: 'no-cors'}) + await fetch(`/api/public/${id}-banner.webp`, { cache: 'reload', mode: 'no-cors' }); } let event = { diff --git a/src/routes/(app)/[username]/settings/[...tab]/_account.svelte b/src/routes/(app)/[username]/settings/[...tab]/_account.svelte index c38334ec..0ab11b32 100644 --- a/src/routes/(app)/[username]/settings/[...tab]/_account.svelte +++ b/src/routes/(app)/[username]/settings/[...tab]/_account.svelte @@ -41,7 +41,7 @@ if (file.size > 10000000) return (tooLarge[type] = true); - if(type === 'profile') { + if (type === 'profile') { $avatar = { id, file, type, progress }; } else if (type === 'banner') { $banner = { id, file, type, progress }; diff --git a/src/routes/(app)/invoice/[hash]/+layout.server.js b/src/routes/(app)/invoice/[hash]/+layout.server.js index 61a479ab..d38f945f 100644 --- a/src/routes/(app)/invoice/[hash]/+layout.server.js +++ b/src/routes/(app)/invoice/[hash]/+layout.server.js @@ -6,7 +6,7 @@ export async function load({ depends, params, url }) { depends('app:invoice'); let { hash } = params; - let invoice = await get(`/invoice?hash=${hash}`); + let invoice = await get(`/invoice/${hash}`); let { amount, received } = invoice; amount = parseInt(amount); diff --git a/src/routes/(app)/invoice/[hash]/tip/+page.svelte b/src/routes/(app)/invoice/[hash]/tip/+page.svelte index eaa67170..ea0ab903 100644 --- a/src/routes/(app)/invoice/[hash]/tip/+page.svelte +++ b/src/routes/(app)/invoice/[hash]/tip/+page.svelte @@ -190,7 +190,7 @@ on:input={(e) => handleCustomTipAmount(e)} class="pl-10" placeholder="Custom amount" - use:focus + use:focus /> <button type="submit" diff --git a/src/routes/(app)/invoice/sent/+page.svelte b/src/routes/(app)/invoice/sent/+page.svelte index 59233617..ae71eb2e 100644 --- a/src/routes/(app)/invoice/sent/+page.svelte +++ b/src/routes/(app)/invoice/sent/+page.svelte @@ -1,6 +1,6 @@ <script> import { Avatar, Icon } from '$comp'; - import { request } from "$lib/store"; + import { request } from '$lib/store'; </script> Invoice sent to diff --git a/src/routes/(app)/ln/[lnurl]/+page.svelte b/src/routes/(app)/ln/[lnurl]/+page.svelte index ce73b387..7656c9fb 100644 --- a/src/routes/(app)/ln/[lnurl]/+page.svelte +++ b/src/routes/(app)/ln/[lnurl]/+page.svelte @@ -1,7 +1,7 @@ <script> import { Lnurlp, Lnurlw } from '$comp'; - export let data; - let { tag } = data; + export let data; + let { tag } = data; </script> {#if tag === 'payRequest'} diff --git a/src/routes/(app)/payment/[id]/+page.svelte b/src/routes/(app)/payment/[id]/+page.svelte index 9eefda2b..a961d14d 100644 --- a/src/routes/(app)/payment/[id]/+page.svelte +++ b/src/routes/(app)/payment/[id]/+page.svelte @@ -8,7 +8,7 @@ export let data; let { user, tx } = data; let { username } = user; - let { id, amount, hash, created, rate, type, ref, fee, currency } = tx; + let { id, amount, created, rate, type, ref, fee, currency } = tx; fee = fee || 0; let fiat = (Math.abs(amount) * rate) / sats; @@ -51,7 +51,9 @@ <div class="font-bold">{$t('payments.id')}</div> <div class="flex"> <div> - <a href={`${expl}/tx/${id}`} target="_blank" rel="noreferrer" class="text-blue-600">{id}</a> + <a href={`${expl}/tx/${id}`} target="_blank" rel="noreferrer" class="text-blue-600" + >{id}</a + > </div> <button class="flex font-bold hover:opacity-80 mb-auto" on:click={() => copy(id)} ><Icon icon="copy" style="mr-1" /> diff --git a/src/routes/(app)/pot/[name]/+page.svelte b/src/routes/(app)/pot/[name]/+page.svelte index 53ee9da2..2d93abfc 100644 --- a/src/routes/(app)/pot/[name]/+page.svelte +++ b/src/routes/(app)/pot/[name]/+page.svelte @@ -36,7 +36,7 @@ <h1 class="text-2xl md:text-3xl font-semibold">Public Pot</h1> </div> <p class="text-secondary">Anyone who knows the URL to this pot can add or take out funds</p> - <img {src} class="mx-auto" alt={name} /> + <img {src} class="mx-auto" alt={name} /> <div class="flex justify-center gap-4"> <div class="my-auto"> <h2 class="text-2xl md:text-3xl font-semibold"> diff --git a/src/routes/(app)/send/[...text]/+page.server.js b/src/routes/(app)/send/[...text]/+page.server.js index 8e5e02d7..3d25ed7e 100644 --- a/src/routes/(app)/send/[...text]/+page.server.js +++ b/src/routes/(app)/send/[...text]/+page.server.js @@ -21,6 +21,11 @@ let parse = async (t, host) => { } catch (e) {} } + if (t.endsWith('@classic')) { + ({ uuid: id } = await get(`/invoice/classic/${t.replace('@classic', '')}`)); + if (id) throw redirect(307, `/send/${id}`); + } + if (t.includes('/pot')) throw redirect(307, t.substring(t.indexOf('/pot'))); if (t.toLowerCase().startsWith('lnurl')) throw redirect(307, `/ln/${t}`); diff --git a/src/routes/(app)/send/[uuid=uuid]/+page.server.js b/src/routes/(app)/send/[uuid=uuid]/+page.server.js index 7fa613bf..a59853d3 100644 --- a/src/routes/(app)/send/[uuid=uuid]/+page.server.js +++ b/src/routes/(app)/send/[uuid=uuid]/+page.server.js @@ -4,7 +4,7 @@ import { btc as asset, auth, get, post } from '$lib/utils'; export async function load({ params, parent }) { let { user } = await parent(); - let { amount, address, tip, text, user: recipient } = await get(`/invoice/${params.id}`); + let { amount, address, tip, text, user: recipient } = await get(`/invoice/${params.uuid}`); if (recipient.username === user.username) throw error(500, { message: 'Cannot send to self' }); if (tip) amount += tip; return { amount, address, payreq: text, recipient }; diff --git a/src/routes/(app)/send/bitcoin/[address]/[...amount]/+page.svelte b/src/routes/(app)/send/bitcoin/[address]/[...amount]/+page.svelte index 0da8ea10..6b216cb3 100644 --- a/src/routes/(app)/send/bitcoin/[address]/[...amount]/+page.svelte +++ b/src/routes/(app)/send/bitcoin/[address]/[...amount]/+page.svelte @@ -40,7 +40,7 @@ <Numpad bind:amount {currency} {submit} /> <form method="POST" use:enhance on:submit={toggle}> - <input name="ts" value={Date.now()} type="hidden" /> + <input name="ts" value={Date.now()} type="hidden" /> <input name="address" value={address} type="hidden" /> <input name="amount" value={amount} type="hidden" /> <input name="pin" value={$pin} type="hidden" /> |
