aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAdam Soltys <[email protected]>2022-11-12 03:31:54 -0800
committerAdam Soltys <[email protected]>2022-11-12 03:31:54 -0800
commit7331eb110b13a6b063ec22176c612cb26940e4bd (patch)
treebebd0627075bc2e27f9a01bfb615914a9e62bdaf
parenta52b8873712b679e1156b9ddc4a554384aa3559a (diff)
downloadcoinos-ui-7331eb110b13a6b063ec22176c612cb26940e4bd.tar.gz
coinos-ui-7331eb110b13a6b063ec22176c612cb26940e4bd.zip
requests flow
-rw-r--r--src/lib/invoice.js8
-rw-r--r--src/routes/(app)/[username]/dashboard/+page.svelte12
-rw-r--r--src/routes/(app)/[username]/request/+page.server.js6
-rw-r--r--src/routes/(app)/[username]/request/[id]/+page.server.js18
-rw-r--r--src/routes/(app)/[username]/request/[id]/+page.svelte55
-rw-r--r--src/routes/(app)/[username]/transactions/[...page]/+page.svelte2
-rw-r--r--src/routes/(app)/invoice/[id]/tip/+page.svelte6
7 files changed, 70 insertions, 37 deletions
diff --git a/src/lib/invoice.js b/src/lib/invoice.js
index 6ec7d41b..9e71f905 100644
--- a/src/lib/invoice.js
+++ b/src/lib/invoice.js
@@ -1,7 +1,7 @@
import { auth, get, post } from '$lib/utils';
import { redirect } from '@sveltejs/kit';
-export default async ({ cookies, request }) => {
+export default async ({ cookies, request, url }) => {
let form = await request.formData();
let rates = await get('/rates');
@@ -21,7 +21,11 @@ export default async ({ cookies, request }) => {
let { uuid } = await post('/invoice', { invoice, user }, auth(cookies));
- if (request_id) throw redirect(307, `/${user.username}/request/${request_id}`);
+ if (request_id) {
+ if (url.pathname.endsWith('tip'))
+ throw redirect(307, `/send/${uuid}`);
+ throw redirect(307, `/${user.username}/request/${request_id}`);
+ }
if (invoice.prompt) {
throw redirect(307, `/invoice/${uuid}/tip`);
diff --git a/src/routes/(app)/[username]/dashboard/+page.svelte b/src/routes/(app)/[username]/dashboard/+page.svelte
index 3cba081d..ffefc1be 100644
--- a/src/routes/(app)/[username]/dashboard/+page.svelte
+++ b/src/routes/(app)/[username]/dashboard/+page.svelte
@@ -57,8 +57,8 @@
</script>
<div class="container px-4 max-w-md mx-auto mt-20 space-y-12">
- <div>
- <div class="text-5xl font-bold mb-2">
+ <div class="mt-24 space-y-2">
+ <div class="text-5xl font-bold">
{$selectedRate ? f(accountBalanceFiat, user.currency) : $t('user.dashboard.fetchingRate')}
</div>
@@ -109,16 +109,16 @@
<div class="text-secondary">{sat(amount)}</div>
</div>
<div class="flex ml-auto my-auto gap-2">
- <a href={`/invoice/${uuid}`}>
+ <a href={`/invoice/${uuid}/tip`}>
<div class="p-2 border rounded-xl bg-white flex">
<Icon icon="send" style="w-8 opacity-50 hover:opacity-100" />
</div>
</a>
- <a href={`/invoice/${uuid}`}>
+ <form action="/request?/delete" method="POST">
<div class="p-2 border rounded-xl bg-white flex">
<Icon icon="close" style="w-8 opacity-50 hover:opacity-100" />
</div>
- </a>
+ </form>
</div>
</div>
</div>
@@ -150,7 +150,7 @@
</div>
</div>
-<div class="flex fixed bottom-4 w-full px-4">
+<div class="flex fixed w-full px-4 bg-white py-2 bottom-0">
<div class="text-secondary flex mr-auto">
<div class="flex mr-1">
<div class="my-auto mr-1">1</div>
diff --git a/src/routes/(app)/[username]/request/+page.server.js b/src/routes/(app)/[username]/request/+page.server.js
index f32c118c..15b06962 100644
--- a/src/routes/(app)/[username]/request/+page.server.js
+++ b/src/routes/(app)/[username]/request/+page.server.js
@@ -6,9 +6,9 @@ export let load = ({ locals }) => {
};
export const actions = {
- default: async ({ cookies, request, url }) => {
+ default: async ({ cookies, locals, request, url }) => {
let form = Object.fromEntries(await request.formData());
- await post('/requests', form, auth(cookies));
- throw redirect(307, url.href + '/sent');
+ let { id } = await post('/requests', form, auth(cookies));
+ throw redirect(307, `/${locals.user.username}/request/${id}`);
}
};
diff --git a/src/routes/(app)/[username]/request/[id]/+page.server.js b/src/routes/(app)/[username]/request/[id]/+page.server.js
index 79db5d42..99f2e8e2 100644
--- a/src/routes/(app)/[username]/request/[id]/+page.server.js
+++ b/src/routes/(app)/[username]/request/[id]/+page.server.js
@@ -1,3 +1,19 @@
import { auth, get } from '$lib/utils';
+import { redirect } from '@sveltejs/kit';
-export let load = async ({ cookies, params }) => get(`/request/${params.id}`, auth(cookies));
+export let load = async ({ cookies, depends, locals: { user }, params }) => {
+ depends('app:invoice');
+ if (!user) throw redirect(307, '/login');
+
+ let { request } = await get(`/request/${params.id}`, auth(cookies));
+ let { invoice } = request;
+ if (invoice) {
+ let { amount, received, uuid } = invoice;
+ if ((received && !amount) || received >= amount) throw redirect(307, `/send/${uuid}`);
+
+ if (request.requester.username === user.username)
+ throw redirect(307, `/send/${request.invoice.uuid}`);
+ }
+
+ return { request };
+};
diff --git a/src/routes/(app)/[username]/request/[id]/+page.svelte b/src/routes/(app)/[username]/request/[id]/+page.svelte
index 74b037d3..0f979284 100644
--- a/src/routes/(app)/[username]/request/[id]/+page.svelte
+++ b/src/routes/(app)/[username]/request/[id]/+page.svelte
@@ -1,35 +1,46 @@
<script>
- import { scale } from 'svelte/transition';
- import { Avatar, Icon } from '$comp';
+ import { Avatar } from '$comp';
import { f, sat, sats } from '$lib/utils';
import { request as req, requestRedirect } from '$lib/store';
+ import { onMount } from 'svelte';
export let data;
let { request, user } = data;
- let { amount, rate, currency } = request.invoice;
- let fiat = (amount * rate) / sats;
- req.set();
+
+ let amount, currency, rate, fiat;
+ if (request.invoice) {
+ ({ amount, rate, currency } = request.invoice);
+ fiat = (amount * rate) / sats;
+ }
+
+ onMount(() => req.set());
</script>
<div class="container px-4 mt-20 max-w-xl mx-auto space-y-8">
- <div class="flex w-full max-w-[200px] mx-auto" in:scale={{ start: 0.5 }}>
- <Icon icon="check" style="mx-auto" />
- </div>
-
<div class="text-center mb-8 space-y-5">
- <p class="text-5xl break-words">
- <span class="text-xl md:text-2xl">Sent invoice to</span>
- </p>
- <div class="flex p-1 gap-2 justify-center">
- <Avatar user={request.requester} size={20} />
- <p class="text-4xl break-words my-auto">{request.requester.username}</p>
- </div>
- <div>
- <h2 class="text-2xl md:text-3xl font-semibold">
- {f(fiat, currency)}
- </h2>
- <h3 class="text-secondary md:text-lg mb-6 mt-1">{sat(amount)}</h3>
- </div>
+ {#if request.recipient_id === user.id}
+ <p class="text-5xl break-words">
+ <span class="text-xl md:text-2xl">Sent invoice to</span>
+ </p>
+ <div class="flex p-1 gap-2 justify-center">
+ <Avatar user={request.requester} size={20} />
+ <p class="text-4xl break-words my-auto">{request.requester.username}</p>
+ </div>
+ <div>
+ <h2 class="text-2xl md:text-3xl font-semibold">
+ {f(fiat, currency)}
+ </h2>
+ <h3 class="text-secondary md:text-lg mb-6 mt-1">{sat(amount)}</h3>
+ </div>
+ {:else}
+ <p class="text-5xl break-words">
+ <span class="text-xl md:text-2xl">Sent request to</span>
+ </p>
+ <div class="flex p-1 gap-2 justify-center">
+ <Avatar user={request.recipient} size={20} />
+ <p class="text-4xl break-words my-auto">{request.recipient.username}</p>
+ </div>
+ {/if}
</div>
</div>
diff --git a/src/routes/(app)/[username]/transactions/[...page]/+page.svelte b/src/routes/(app)/[username]/transactions/[...page]/+page.svelte
index d316b23c..4d6fbc33 100644
--- a/src/routes/(app)/[username]/transactions/[...page]/+page.svelte
+++ b/src/routes/(app)/[username]/transactions/[...page]/+page.svelte
@@ -31,8 +31,6 @@
pages = [];
$: data && ({ page: p, pages, start, end, total, transactions } = data);
- $: console.log($txns.length), ($txns = transactions);
-
$: $page && ($newPayment = false);
$: $newPayment && invalidate(`/users/${user.username}`);
diff --git a/src/routes/(app)/invoice/[id]/tip/+page.svelte b/src/routes/(app)/invoice/[id]/tip/+page.svelte
index ca0a0437..34393827 100644
--- a/src/routes/(app)/invoice/[id]/tip/+page.svelte
+++ b/src/routes/(app)/invoice/[id]/tip/+page.svelte
@@ -1,6 +1,7 @@
<script>
+ import { onMount } from "svelte";
import { browser } from '$app/environment';
- import { invoice as inv, invoices } from '$lib/store';
+ import { invoice as inv, invoices, request } from '$lib/store';
import { back, copy, f, sat, get, reverseFormat, s, sats } from '$lib/utils';
import { Icon } from '$comp';
import { goto } from '$app/navigation';
@@ -112,6 +113,8 @@
$: tipAmount = ((tip * rate) / sats).toFixed(2);
$: invoiceAmountFiatFormatted = f(amountFiat, currency);
+
+ onMount(() => ($request = undefined));
</script>
<button class="ml-5 md:ml-20 mt-5 md:mt-10 hover:opacity-80" on:click={back}>
@@ -126,6 +129,7 @@
<input type="hidden" name="rate" value={rate} />
<input type="hidden" name="prompt" value="false" />
<input type="hidden" name="network" value={network} />
+ <input type="hidden" name="request_id" value={invoice.request?.id} />
<h1 class="text-4xl font-semibold my-8">{$t('invoice.addTipq')}</h1>
{#if !showCustomAmount}