diff options
| author | Adam Soltys <[email protected]> | 2023-02-06 22:53:18 -0800 |
|---|---|---|
| committer | Adam Soltys <[email protected]> | 2023-02-06 22:53:18 -0800 |
| commit | 17940dea28991beac8a8c8876b574f6abbd480b9 (patch) | |
| tree | ef6f862297698c631af6804eb75cf4bfe83bf760 /src | |
| parent | ae2093ab252bdf56a12094da2cb43b46bd5cc1d3 (diff) | |
| parent | b5b7fe81ba245f85ecc1a67318eeb92a34949861 (diff) | |
| download | coinos-ui-17940dea28991beac8a8c8876b574f6abbd480b9.tar.gz coinos-ui-17940dea28991beac8a8c8876b574f6abbd480b9.zip | |
Merge branch 'master' into testtest
Diffstat (limited to 'src')
| -rw-r--r-- | src/routes/(app)/[username]/(profile)/+layout.svelte | 2 | ||||
| -rw-r--r-- | src/routes/(app)/pin/+server.js | 7 | ||||
| -rw-r--r-- | src/routes/(app)/send/+layout.svelte | 24 | ||||
| -rw-r--r-- | src/routes/(app)/send/[...text]/+page.svelte | 2 | ||||
| -rw-r--r-- | src/routes/(app)/send/user/[username]/[...amount]/+page.server.js | 6 | ||||
| -rw-r--r-- | src/routes/(app)/send/user/[username]/[...amount]/+page.svelte | 45 |
6 files changed, 48 insertions, 38 deletions
diff --git a/src/routes/(app)/[username]/(profile)/+layout.svelte b/src/routes/(app)/[username]/(profile)/+layout.svelte index b318d777..6dacf2ce 100644 --- a/src/routes/(app)/[username]/(profile)/+layout.svelte +++ b/src/routes/(app)/[username]/(profile)/+layout.svelte @@ -123,7 +123,7 @@ {/if} {#if !subject.anon && subject.username !== user?.username} <div class="w-full flex"> - <a href={`/${subject.username}/receive`} class="mx-auto"> + <a href={user ? `/send/${subject.username}` : `/${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"> <Icon icon="send" style="mr-2" /> diff --git a/src/routes/(app)/pin/+server.js b/src/routes/(app)/pin/+server.js new file mode 100644 index 00000000..9f63f545 --- /dev/null +++ b/src/routes/(app)/pin/+server.js @@ -0,0 +1,7 @@ +import { json } from '@sveltejs/kit'; +import { auth, post } from '$lib/utils'; + +export async function POST({ cookies, request }) { + let result = await post('/pin', await request.json(), auth(cookies)); + return json(result); +} diff --git a/src/routes/(app)/send/+layout.svelte b/src/routes/(app)/send/+layout.svelte index c9122466..2fb732e8 100644 --- a/src/routes/(app)/send/+layout.svelte +++ b/src/routes/(app)/send/+layout.svelte @@ -1,18 +1,38 @@ <script> + import { browser } from '$app/environment'; + import { goto } from '$app/navigation'; import { Pin } from '$comp'; import { pin } from '$lib/store'; import { onMount } from 'svelte'; + import { success, fail, post } from '$lib/utils'; export let data; let loaded; let { user } = data; - onMount(() => setTimeout(() => (loaded = true), 50)); + onMount(() => setTimeout(() => (loaded = true), 500)); + let cancel = () => goto(`/${user.username}`); + + $: browser && loaded && checkPin($pin); + let checkPin = async (p) => { + if (p?.length !== 6 || p === JSON.parse(sessionStorage.getItem('pin'))) return; + let result; + try { + result = await post('/pin', { pin: p }); + } catch (e) {} + + if (result) { + success('Pin confirmed'); + } else { + fail('Invalid pin'); + $pin = ''; + } + }; </script> {#if loaded && user.haspin && $pin?.length !== 6} - <Pin /> + <Pin bind:value={$pin} {cancel} /> {/if} <slot /> diff --git a/src/routes/(app)/send/[...text]/+page.svelte b/src/routes/(app)/send/[...text]/+page.svelte index 46f5e56a..cd83ddfc 100644 --- a/src/routes/(app)/send/[...text]/+page.svelte +++ b/src/routes/(app)/send/[...text]/+page.svelte @@ -90,7 +90,7 @@ <h1 class="px-3 md:px-0 text-xl font-semibold mt-10">{$t('user.send.contacts')}</h1> <div> {#each contacts as c} - <a href={`/${c.username}/receive`}> + <a href={`/send/${c.username}`}> <div class="border-b p-2 last:border-b-0 hover:bg-gray-100"> <div class="flex"> <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 46172175..42b47c8f 100644 --- a/src/routes/(app)/send/user/[username]/[...amount]/+page.server.js +++ b/src/routes/(app)/send/user/[username]/[...amount]/+page.server.js @@ -4,9 +4,9 @@ import { btc as asset, auth, get, post } from '$lib/utils'; export async function load({ params, parent }) { let { user } = await parent(); let { amount } = params; - let recipient = await get(`/users/${params.username}`); - if (recipient.username === user?.username) throw error(500, { message: 'Cannot send to self' }); - return { amount, recipient }; + let subject = await get(`/users/${params.username}`); + if (subject.username === user?.username) throw error(500, { message: 'Cannot send to self' }); + return { amount, subject }; } export const actions = { diff --git a/src/routes/(app)/send/user/[username]/[...amount]/+page.svelte b/src/routes/(app)/send/user/[username]/[...amount]/+page.svelte index 87eba733..9704e3c6 100644 --- a/src/routes/(app)/send/user/[username]/[...amount]/+page.svelte +++ b/src/routes/(app)/send/user/[username]/[...amount]/+page.svelte @@ -3,14 +3,14 @@ import { goto } from '$app/navigation'; import { pin, selectedRate } from '$lib/store'; import { enhance } from '$app/forms'; - import { Avatar, Icon, Numpad, Spinner } from '$comp'; + import { AppHeader, Avatar, Icon, Numpad, Spinner } from '$comp'; import { page } from '$app/stores'; - import { back, f, post, s, sats } from '$lib/utils'; + import { f, post, s, sat, sats } from '$lib/utils'; export let data; export let form; - let { recipient, rates, user } = data; + let { subject, rates, user } = data; let currency = user?.currency || 'USD'; let amount = form?.amount || data.amount; @@ -24,23 +24,16 @@ amount = a; amountFiat = af; - ({ hash } = await post(`/${recipient.username}/invoice`, { + ({ hash } = await post(`/${subject.username}/invoice`, { invoice: { amount, - rate: rates[recipient.currency], + rate: rates[subject.currency], type: 'internal' }, - user: recipient + user: subject })); }; - let handleBack = () => { - if (amount) { - amount = undefined; - goto(`/send/user/${recipient.username}`); - } else back(); - }; - let loading; let submit = () => (loading = true); @@ -51,9 +44,7 @@ }; </script> -<button class="ml-5 md:ml-20 mt-5 md:mt-10 hover:opacity-80" on:click={handleBack}> - <Icon icon="arrow-left" style="w-10" /> -</button> +<AppHeader {data} /> {#if form?.message} <div class="text-red-600 text-center"> @@ -63,20 +54,12 @@ <div class="container px-4 mt-20 max-w-xl mx-auto space-y-8"> {#if amount} - <div class="text-center mb-8 space-y-5"> - <p class="text-5xl break-words"> - {fiat ? f(amountFiat, currency) : s(amount)} - {#if !fiat} - <span class="text-xl md:text-2xl text-secondary">sats</span> - {/if} - </p> - - <h1 class="text-xl md:text-2xl text-secondary mb-2">to</h1> - - <div class="flex p-1 gap-2 justify-center"> - <Avatar user={recipient} size={'20'} /> - <p class="text-4xl break-words my-auto">{recipient.username}</p> - </div> + <h1 class="text-center text-3xl md:text-4xl font-bold mb-6">Sending</h1> + <div class="text-center mb-8"> + <h2 class="text-2xl md:text-3xl font-semibold"> + {f(amountFiat, currency)} + </h2> + <h3 class="text-secondary md:text-lg mb-6 mt-1">{sat(amount)}</h3> </div> {:else} <Numpad bind:amount={a} bind:amountFiat={af} {currency} bind:fiat /> @@ -84,7 +67,7 @@ <form method="POST" use:enhance on:submit={submit}> <input name="amount" value={amount} type="hidden" /> - <input name="username" value={recipient.username} type="hidden" /> + <input name="username" value={subject.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" /> |
