diff options
| author | Adam Soltys <[email protected]> | 2023-12-01 20:04:13 -0800 |
|---|---|---|
| committer | Adam Soltys <[email protected]> | 2023-12-01 20:04:13 -0800 |
| commit | 216a600224fde22ce76b367557a02094ec693886 (patch) | |
| tree | d1189bbaa39db204633523132a7d4767b952717d /src/routes/(app)/send/bitcoin | |
| parent | 7d9bc1f54dfd04172e8d6d43ebc2efd6f407e833 (diff) | |
| download | coinos-ui-216a600224fde22ce76b367557a02094ec693886.tar.gz coinos-ui-216a600224fde22ce76b367557a02094ec693886.zip | |
prettier
Diffstat (limited to 'src/routes/(app)/send/bitcoin')
| -rw-r--r-- | src/routes/(app)/send/bitcoin/[address]/[...amount]/+page.server.js | 45 | ||||
| -rw-r--r-- | src/routes/(app)/send/bitcoin/[address]/[...amount]/+page.svelte | 247 |
2 files changed, 154 insertions, 138 deletions
diff --git a/src/routes/(app)/send/bitcoin/[address]/[...amount]/+page.server.js b/src/routes/(app)/send/bitcoin/[address]/[...amount]/+page.server.js index 92a754ae..5cb86aec 100644 --- a/src/routes/(app)/send/bitcoin/[address]/[...amount]/+page.server.js +++ b/src/routes/(app)/send/bitcoin/[address]/[...amount]/+page.server.js @@ -1,33 +1,32 @@ -import { fail, redirect } from '@sveltejs/kit'; -import { auth, post, fd } from '$lib/utils'; +import { fail, redirect } from "@sveltejs/kit"; +import { auth, post, fd } from "$lib/utils"; let seen = {}; export const actions = { - default: async ({ cookies, request }) => { - try { - let { address, amount, confirmed, feeRate, subtract, pin, stale, ts } = await await fd( - request - ); - if (seen[ts]) return fail(400, { message: 'Duplicate form submission' }); + default: async ({ cookies, request }) => { + try { + let { address, amount, confirmed, feeRate, subtract, pin, stale, ts } = + await await fd(request); + if (seen[ts]) return fail(400, { message: "Duplicate form submission" }); - let estimate = await post( - '/bitcoin/fee', - { address, amount, feeRate, subtract }, - auth(cookies) - ); + let estimate = await post( + "/bitcoin/fee", + { address, amount, feeRate, subtract }, + auth(cookies) + ); - let { tx } = estimate; + let { tx } = estimate; - if (stale || !confirmed) return fail(400, estimate); + if (stale || !confirmed) return fail(400, estimate); - seen[ts] = 1; - setTimeout(() => delete seen[ts], 30000); + seen[ts] = 1; + setTimeout(() => delete seen[ts], 30000); - await post('/bitcoin/send', { pin, subtract, tx }, auth(cookies)); - } catch (e) { - return fail(400, { message: e.message }); - } + await post("/bitcoin/send", { pin, subtract, tx }, auth(cookies)); + } catch (e) { + return fail(400, { message: e.message }); + } - throw redirect(307, '/sent'); - } + throw redirect(307, "/sent"); + }, }; diff --git a/src/routes/(app)/send/bitcoin/[address]/[...amount]/+page.svelte b/src/routes/(app)/send/bitcoin/[address]/[...amount]/+page.svelte index 342eeebe..da11a22c 100644 --- a/src/routes/(app)/send/bitcoin/[address]/[...amount]/+page.svelte +++ b/src/routes/(app)/send/bitcoin/[address]/[...amount]/+page.svelte @@ -1,142 +1,159 @@ <script> - import { tick } from 'svelte'; - import { t } from '$lib/translations'; - import { enhance } from '$app/forms'; - import { Toggle, Slider, Icon, Numpad, Spinner } from '$comp'; - import { page } from '$app/stores'; - import { fiat as toFiat, f, back, s, sat } from '$lib/utils'; - import { pin } from '$lib/store'; + import { tick } from "svelte"; + import { t } from "$lib/translations"; + import { enhance } from "$app/forms"; + import { Toggle, Slider, Icon, Numpad, Spinner } from "$comp"; + import { page } from "$app/stores"; + import { fiat as toFiat, f, back, s, sat } from "$lib/utils"; + import { pin } from "$lib/store"; - export let data; - export let form; + export let data; + export let form; - let { rates } = data; - let { address, amount } = $page.params; - let { balance, currency } = data.user; - let loading, submit, fiat, confirmed, feeRate, min, max, fee, ourfee, stale, subtract, adjusting; + let { rates } = data; + let { address, amount } = $page.params; + let { balance, currency } = data.user; + let loading, + submit, + fiat, + confirmed, + feeRate, + min, + max, + fee, + ourfee, + stale, + subtract, + adjusting; - $: rate = rates[currency]; + $: rate = rates[currency]; - let toggle = () => (loading = true); - let toggleAdjusting = () => (adjusting = !adjusting); + let toggle = () => (loading = true); + let toggleAdjusting = () => (adjusting = !adjusting); - $: update(form); - let update = () => { - loading = false; - if (form?.message?.includes('pin')) $pin = undefined; - if (form) ({ min, max, feeRate, fee, ourfee, subtract } = form); - if (!ourfee) ourfee = 0; - if (feeRate) confirmed = true; - stale = false; - }; + $: update(form); + let update = () => { + loading = false; + if (form?.message?.includes("pin")) $pin = undefined; + if (form) ({ min, max, feeRate, fee, ourfee, subtract } = form); + if (!ourfee) ourfee = 0; + if (feeRate) confirmed = true; + stale = false; + }; - let setMax = () => { - fiat = false; - amount = balance; - subtract = true; - }; + let setMax = () => { + fiat = false; + amount = balance; + subtract = true; + }; - $: if (amount + fee > balance) subtract = true; + $: if (amount + fee > balance) subtract = true; - let timeout; - let handle = (e) => { - stale = true; - feeRate = e.target.value; - clearTimeout(timeout); - timeout = setTimeout(() => { - tick().then(() => submit.click()); - }, 200); - }; + let timeout; + let handle = (e) => { + stale = true; + feeRate = e.target.value; + clearTimeout(timeout); + timeout = setTimeout(() => { + tick().then(() => submit.click()); + }, 200); + }; </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" /> + <Icon icon="arrow-left" style="w-10" /> </button> {#if form?.message} - <div class="text-red-600 text-center"> - {form.message} - </div> + <div class="text-red-600 text-center"> + {form.message} + </div> {/if} <div class="container px-4 mt-20 max-w-xl mx-auto space-y-5 text-center"> - <h1 class="text-3xl md:text-4xl font-semibold mb-2">{$t('payments.send')}</h1> + <h1 class="text-3xl md:text-4xl font-semibold mb-2">{$t("payments.send")}</h1> - <div class="text-lg text-secondary break-all">{address}</div> + <div class="text-lg text-secondary break-all">{address}</div> - {#if confirmed} - <div class="text-center"> - <h2 class="text-2xl md:text-3xl font-semibold"> - {f(toFiat(amount, rate), currency)} - </h2> - <h3 class="text-secondary md:text-lg mb-6 mt-1">⚡️{s(amount)}</h3> - </div> + {#if confirmed} + <div class="text-center"> + <h2 class="text-2xl md:text-3xl font-semibold"> + {f(toFiat(amount, rate), currency)} + </h2> + <h3 class="text-secondary md:text-lg mb-6 mt-1">⚡️{s(amount)}</h3> + </div> - <div class="text-center"> - <h2 class="text-secondary mb-5 text-lg">with fee</h2> + <div class="text-center"> + <h2 class="text-secondary mb-5 text-lg">with fee</h2> - <div class="relative"> - <h2 class="text-xl font-semibold"> - {f(toFiat(fee + ourfee, rate), currency)} - </h2> - <h3 class="text-secondary mb-6 mt-1">⚡️{s(fee + ourfee)}</h3> - <button class="absolute right-1/4 top-0 text-secondary p-4" on:click={toggleAdjusting} - ><Icon icon="settings" style="opacity-30" /></button - > - </div> - </div> - {:else} - <Numpad bind:amount bind:fiat {currency} {submit} bind:rate /> - {/if} + <div class="relative"> + <h2 class="text-xl font-semibold"> + {f(toFiat(fee + ourfee, rate), currency)} + </h2> + <h3 class="text-secondary mb-6 mt-1">⚡️{s(fee + ourfee)}</h3> + <button + class="absolute right-1/4 top-0 text-secondary p-4" + on:click={toggleAdjusting} + ><Icon icon="settings" style="opacity-30" /></button + > + </div> + </div> + {:else} + <Numpad bind:amount bind:fiat {currency} {submit} bind:rate /> + {/if} - <form method="POST" use:enhance on:submit={toggle}> - <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" /> - <input name="confirmed" value={confirmed} type="hidden" /> - <input name="feeRate" value={feeRate} type="hidden" /> - <input name="stale" value={stale} type="hidden" /> - <input name="subtract" value={subtract} type="hidden" /> + <form method="POST" use:enhance on:submit={toggle}> + <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" /> + <input name="confirmed" value={confirmed} type="hidden" /> + <input name="feeRate" value={feeRate} type="hidden" /> + <input name="stale" value={stale} type="hidden" /> + <input name="subtract" value={subtract} type="hidden" /> - {#if confirmed && adjusting} - <div class="relative mt-10 mb-20"> - <div class="absolute top-5 left-0 text-secondary">Slower (~40 blocks)</div> - <div class="absolute top-5 right-0 text-secondary">Faster (~1 block)</div> - <Slider bind:value={feeRate} {handle} {min} {max} /> - </div> - <div class="flex justify-center gap-2 mb-10"> - <div class="my-auto"> - <Toggle id="subtract" checked={subtract} bind:value={subtract} /> - </div> - <label for="subtract" class="text-secondary text-lg my-auto mb-2" - >Take fee from amount</label - > - </div> - {/if} + {#if confirmed && adjusting} + <div class="relative mt-10 mb-20"> + <div class="absolute top-5 left-0 text-secondary"> + Slower (~40 blocks) + </div> + <div class="absolute top-5 right-0 text-secondary"> + Faster (~1 block) + </div> + <Slider bind:value={feeRate} {handle} {min} {max} /> + </div> + <div class="flex justify-center gap-2 mb-10"> + <div class="my-auto"> + <Toggle id="subtract" checked={subtract} bind:value={subtract} /> + </div> + <label for="subtract" class="text-secondary text-lg my-auto mb-2" + >Take fee from amount</label + > + </div> + {/if} - <div class="flex justify-center gap-2"> - {#if !confirmed} - <button - type="button" - class="hover:opacity-80 bg-black text-white rounded-2xl py-3 px-4 mt-2 border font-bold" - on:click|preventDefault={setMax} - on:keydown={setMax}>Max ⚡️{s(balance)}</button - > - {/if} + <div class="flex justify-center gap-2"> + {#if !confirmed} + <button + type="button" + class="hover:opacity-80 bg-black text-white rounded-2xl py-3 px-4 mt-2 border font-bold" + on:click|preventDefault={setMax} + on:keydown={setMax}>Max ⚡️{s(balance)}</button + > + {/if} - <button - bind:this={submit} - type="submit" - class="opacity-100 hover:opacity-80 rounded-2xl border py-3 font-bold mt-2 bg-black text-white px-4 w-24" - disabled={loading} - > - {#if confirmed} - {$t('payments.send')} - {:else} - {$t('payments.next')} - {/if} - </button> - </div> - </form> + <button + bind:this={submit} + type="submit" + class="opacity-100 hover:opacity-80 rounded-2xl border py-3 font-bold mt-2 bg-black text-white px-4 w-24" + disabled={loading} + > + {#if confirmed} + {$t("payments.send")} + {:else} + {$t("payments.next")} + {/if} + </button> + </div> + </form> </div> |
