aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorAdam Soltys <[email protected]>2023-02-06 22:52:37 -0800
committerAdam Soltys <[email protected]>2023-02-06 22:52:37 -0800
commitb5b7fe81ba245f85ecc1a67318eeb92a34949861 (patch)
treef58083fd62e29a1e7ba6c8dcd3896a9db237a1f8 /src
parentc43ec91c41e75a3dc61611c1f56a5f151860350b (diff)
downloadcoinos-ui-b5b7fe81ba245f85ecc1a67318eeb92a34949861.tar.gz
coinos-ui-b5b7fe81ba245f85ecc1a67318eeb92a34949861.zip
fix internal sends
Diffstat (limited to 'src')
-rw-r--r--src/routes/(app)/[username]/(profile)/+layout.svelte2
-rw-r--r--src/routes/(app)/pin/+server.js7
-rw-r--r--src/routes/(app)/send/+layout.svelte24
-rw-r--r--src/routes/(app)/send/[...text]/+page.svelte2
-rw-r--r--src/routes/(app)/send/user/[username]/[...amount]/+page.server.js6
-rw-r--r--src/routes/(app)/send/user/[username]/[...amount]/+page.svelte45
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" />