aboutsummaryrefslogtreecommitdiffstats
path: root/src/routes/(app)/send/bitcoin
diff options
context:
space:
mode:
authorAdam Soltys <[email protected]>2023-12-01 20:04:13 -0800
committerAdam Soltys <[email protected]>2023-12-01 20:04:13 -0800
commit216a600224fde22ce76b367557a02094ec693886 (patch)
treed1189bbaa39db204633523132a7d4767b952717d /src/routes/(app)/send/bitcoin
parent7d9bc1f54dfd04172e8d6d43ebc2efd6f407e833 (diff)
downloadcoinos-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.js45
-rw-r--r--src/routes/(app)/send/bitcoin/[address]/[...amount]/+page.svelte247
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>