aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorAdam Soltys <[email protected]>2022-10-06 00:13:16 -0700
committerAdam Soltys <[email protected]>2022-10-06 00:22:40 -0700
commitf8b1415475759e7c64a97dadbcd283a3131a4b9f (patch)
tree699d86a205d204e5abadae3c62362e2ff286b299 /src
parent5b24ffae2d402fbbff78f53727ca87f5cfe75618 (diff)
downloadcoinos-ui-f8b1415475759e7c64a97dadbcd283a3131a4b9f.tar.gz
coinos-ui-f8b1415475759e7c64a97dadbcd283a3131a4b9f.zip
send route can take a parameter
Diffstat (limited to 'src')
-rw-r--r--src/components/AppHeader.svelte3
-rw-r--r--src/routes/+layout.svelte2
-rw-r--r--src/routes/[username]/+page.svelte75
-rw-r--r--src/routes/[username]/bitcoin/+page.server.js4
-rw-r--r--src/routes/[username]/bitcoin/+page.svelte0
-rw-r--r--src/routes/[username]/settings/+page.svelte2
-rw-r--r--src/routes/[username]/settings/_account.svelte3
-rw-r--r--src/routes/[username]/transactions/[...page]/+page.svelte19
-rw-r--r--src/routes/scan/+page.svelte4
-rw-r--r--src/routes/send/+page.server.js47
-rw-r--r--src/routes/send/[...text]/+page.server.js55
-rw-r--r--src/routes/send/[...text]/+page.svelte (renamed from src/routes/send/+page.svelte)0
-rw-r--r--src/routes/send/lightning/[payreq]/+page.svelte2
-rw-r--r--src/routes/send/user/[username]/+page.svelte2
14 files changed, 127 insertions, 91 deletions
diff --git a/src/components/AppHeader.svelte b/src/components/AppHeader.svelte
index a21c4ecd..94bd9b1a 100644
--- a/src/components/AppHeader.svelte
+++ b/src/components/AppHeader.svelte
@@ -13,9 +13,6 @@
$: update(data);
let update = (data) => ({ subject, user } = data);
- $: updateUser(user);
- let updateUser = () => console.log('USER', user);
-
const menuButtons = [
{ stringID: 'nav.dashboard', icon: 'dash', goto: 'dashboard' },
{ stringID: 'nav.settings', icon: 'settings', goto: 'settings' },
diff --git a/src/routes/+layout.svelte b/src/routes/+layout.svelte
index a07d2fb1..c86b0eb5 100644
--- a/src/routes/+layout.svelte
+++ b/src/routes/+layout.svelte
@@ -35,7 +35,9 @@
<SvelteToast options={{ reversed: true, intro: { y: 192 } }} />
+<main data-sveltekit-prefetch>
<slot />
+</main>
<style global>
:root {
diff --git a/src/routes/[username]/+page.svelte b/src/routes/[username]/+page.svelte
index 48039c7b..27553192 100644
--- a/src/routes/[username]/+page.svelte
+++ b/src/routes/[username]/+page.svelte
@@ -36,43 +36,54 @@
let followed = false;
</script>
-<div class="flex xl:block justify-center items-center my-20 px-3">
- <div class="space-y-10 xl:space-y-0">
- <div class="xl:ml-[calc(15vw-64px)] space-y-2 w-full md:w-72">
- <h1 class="text-3xl font-bold">{subject.username}</h1>
+<div class="container px-4 flex flex-wrap">
+ <div class="p-10 pt-20 w-full lg:w-1/3">
+ <h1 class="text-3xl font-bold">{subject.username}</h1>
- <p class="text-secondary">
- {subject.address && subject.address !== 'null' ? subject.address : ''}
- </p>
+ <p class="text-secondary">
+ {subject.address && subject.address !== 'null' ? subject.address : ''}
+ </p>
- <!-- TODO
- we need to hook this up
- <button
- class="border rounded-full py-2 w-28 font-semibold flex justify-center items-center text-sm"
- on:click={() => (followed = !followed)}
- ><Icon icon={followed ? 'minus' : 'plus'} style="mr-1" />
- {$t('user.' + (followed ? 'remove' : 'follow'))}
- </button>
- -->
- </div>
+ <!-- TODO
+ we need to hook this up
+ <button
+ class="border rounded-full py-2 w-28 font-semibold flex justify-center items-center text-sm"
+ on:click={() => (followed = !followed)}
+ ><Icon icon={followed ? 'minus' : 'plus'} style="mr-1" />
+ {$t('user.' + (followed ? 'remove' : 'follow'))}
+ </button>
+ -->
+ </div>
- <div class="space-y-5 static xl:absolute top-[255px] left-[calc(50vw-150px)]">
- <div
- on:click={() => copy(lightningAddress)}
- id="qr"
- class="cursor-pointer w-[292px] md:w-[342px] h-[342px] border border-lightgrey rounded-3xl flex p-5 justify-center items-center relative"
- />
+ <div class="space-y-5 lg:mt-20 mx-auto">
+ <div class="flex justify-center gap-2">
+ <a href={`/${subject.username}`}>
+ <button
+ class="rounded-full border py-2 px-5 font-bold hover:opacity-80 w-full mb-2 bg-black text-white"
+ >Lightning</button
+ >
+ </a>
+ <a href={`/${subject.username}/bitcoin`}>
+ <button class="rounded-full border py-2 px-5 font-bold hover:opacity-80 w-full mb-2"
+ >Bitcoin</button
+ >
+ </a>
+ </div>
+ <div
+ on:click={() => copy(lightningAddress)}
+ id="qr"
+ class="cursor-pointer w-[292px] md:w-[342px] h-[342px] border border-lightgrey rounded-3xl flex p-5 justify-center items-center relative"
+ />
- <p class="text-secondary text-xl text-center font-semibold">{$t('user.scanToPayBTC')}</p>
+ <p class="text-secondary text-xl text-center font-semibold">{$t('user.scanToPayBTC')}</p>
- <div
- class="bg-primary font-semibold rounded-xl text-sm p-3 flex flex-wrap justify-between items-center"
- >
- <span>{lightningAddress}</span>
- <button class="hover:opacity-80" on:click={() => copy(lightningAddress)}>
- <Icon icon="copy" style="ml-2" />
- </button>
- </div>
+ <div
+ class="bg-primary font-semibold rounded-xl text-sm p-3 flex flex-wrap justify-between items-center"
+ >
+ <span>{lightningAddress}</span>
+ <button class="hover:opacity-80" on:click={() => copy(lightningAddress)}>
+ <Icon icon="copy" style="ml-2" />
+ </button>
</div>
</div>
</div>
diff --git a/src/routes/[username]/bitcoin/+page.server.js b/src/routes/[username]/bitcoin/+page.server.js
new file mode 100644
index 00000000..7ef65346
--- /dev/null
+++ b/src/routes/[username]/bitcoin/+page.server.js
@@ -0,0 +1,4 @@
+import { redirect } from '@sveltejs/kit';
+export async function load({ params }) {
+ throw redirect(303, `/${params.username}`);
+}
diff --git a/src/routes/[username]/bitcoin/+page.svelte b/src/routes/[username]/bitcoin/+page.svelte
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/src/routes/[username]/bitcoin/+page.svelte
diff --git a/src/routes/[username]/settings/+page.svelte b/src/routes/[username]/settings/+page.svelte
index b031cb93..9759b3d8 100644
--- a/src/routes/[username]/settings/+page.svelte
+++ b/src/routes/[username]/settings/+page.svelte
@@ -10,7 +10,7 @@
import { avatarUpload, bannerUpload } from '$lib/store';
import { upload } from '$lib/upload';
- export let data, form;
+ export let data;
let { user, rates, token } = data;
$: update(data);
diff --git a/src/routes/[username]/settings/_account.svelte b/src/routes/[username]/settings/_account.svelte
index b6636129..7c667815 100644
--- a/src/routes/[username]/settings/_account.svelte
+++ b/src/routes/[username]/settings/_account.svelte
@@ -180,17 +180,20 @@
src={banner}
class="w-full object-cover object-center visible overflow-hidden h-48 mb-4 hover:opacity-80"
on:click={() => select('banner')}
+ alt="Banner"
/>
{:else if user.banner}
<img
src={`/api/public/${user.username}-banner.png`}
class="w-full object-cover object-center visible overflow-hidden h-48 mb-4 hover:opacity-80"
on:click={() => select('banner')}
+ alt="Banner"
/>
{:else}
<div
class="bg-gradient-to-r {$colorTheme} w-full h-48 mb-4 cursor-pointer hover:opacity-80"
on:click={() => select('banner')}
+ alt="Banner"
/>
{/if}
diff --git a/src/routes/[username]/transactions/[...page]/+page.svelte b/src/routes/[username]/transactions/[...page]/+page.svelte
index 5e03cc57..d694c760 100644
--- a/src/routes/[username]/transactions/[...page]/+page.svelte
+++ b/src/routes/[username]/transactions/[...page]/+page.svelte
@@ -1,17 +1,23 @@
<script>
+ import { onMount } from "svelte";
+ import { formatDistance, parseISO } from 'date-fns';
import { newPayment } from '$lib/store';
import { t } from '$lib/translations';
import { f, s, sats } from '$lib/utils';
+ import { page } from "$app/stores";
+
export let data;
let { user } = data;
- $newPayment = false;
- let page,
+ let p,
total,
transactions = [],
pages = [];
- $: data && ({ page, pages, total, transactions } = data);
+ $: data && ({ page: p, pages, total, transactions } = data);
+
+ $: $page && ($newPayment = false);
+ $: $newPayment && invalidate(`/users/${user.username}`);
</script>
<div class="mt-24 mb-20">
@@ -26,7 +32,7 @@
<a
class="mr-1 last:mr-0"
href={`/${user.username}/transactions/${i + 1}`}
- class:active={page === i + 1}
+ class:active={p === i + 1}
>
<div class="border py-2 rounded-full border-2 w-12 h-12 hover:opacity-80 text-center">
{i + 1}
@@ -64,7 +70,10 @@
</div>
<div class="text-secondary text-right">
- {new Date(tx.createdAt).toLocaleDateString(undefined, { dateStyle: 'medium' })}
+ {formatDistance(parseISO(tx.createdAt), new Date(), {
+ includeSeconds: true,
+ addSuffix: true
+ })}
</div>
</div>
{/each}
diff --git a/src/routes/scan/+page.svelte b/src/routes/scan/+page.svelte
index 3e024bc8..1c14cb6d 100644
--- a/src/routes/scan/+page.svelte
+++ b/src/routes/scan/+page.svelte
@@ -1,7 +1,7 @@
<script>
import { Icon } from '$comp';
import QrScanner from 'qr-scanner';
- import { onMount } from 'svelte';
+ import { onMount, onDestroy } from 'svelte';
import { back } from '$lib/utils';
import { goto } from '$app/navigation';
@@ -10,6 +10,8 @@
scanner = new QrScanner(vid, (text) => goto(`/send/${text}`));
scanner.start();
});
+
+ onDestroy(() => scanner?.stop());
</script>
<button class="ml-5 md:ml-20 mt-5 md:mt-10 hover:opacity-80" on:click={back}>
diff --git a/src/routes/send/+page.server.js b/src/routes/send/+page.server.js
deleted file mode 100644
index c8edb1cc..00000000
--- a/src/routes/send/+page.server.js
+++ /dev/null
@@ -1,47 +0,0 @@
-import validate from 'bitcoin-address-validation';
-import bip21 from 'bip21';
-import { get } from '$lib/utils';
-import { invalid, redirect } from '@sveltejs/kit';
-
-export const actions = {
- default: async ({ request }) => {
- const values = await request.formData();
- const t = values.get('text');
- if (!t) return;
-
- // lightning
- if (t.startsWith('ln')) {
- throw redirect(303, `/send/lightning/${t}`);
- }
-
- // bitcoin
- if (validate(t)) {
- let user;
- try {
- ({ user } = await get(`/invoice/${t}`));
- } catch (e) {
- throw redirect(303, `/send/bitcoin/${t}`);
- }
-
- if (user) throw redirect(303, `/send/user/${user.username}`);
- }
-
- // ln address
- if (t.includes('@') && t.includes('.')) {
- let [name, domain] = t.split('@');
- try {
- let lnurl = await get(`/encode?domain=${domain}&name=${name}`);
- } catch (e) {}
- }
-
- // user
- let user;
- try {
- user = await get(`/users/${t}`);
- } catch (e) {}
-
- if (user) throw redirect(303, `/send/user/${t}`);
-
- return invalid(403, { error: 'Failed to recognize input' });
- }
-};
diff --git a/src/routes/send/[...text]/+page.server.js b/src/routes/send/[...text]/+page.server.js
new file mode 100644
index 00000000..ec764882
--- /dev/null
+++ b/src/routes/send/[...text]/+page.server.js
@@ -0,0 +1,55 @@
+import validate from 'bitcoin-address-validation';
+import bip21 from 'bip21';
+import { get } from '$lib/utils';
+import { invalid, redirect } from '@sveltejs/kit';
+
+let parse = async (t) => {
+ if (!t) return;
+
+ // lightning
+ if (t.startsWith('ln')) {
+ throw redirect(303, `/send/lightning/${t}`);
+ }
+
+ // bitcoin
+ if (validate(t)) {
+ let user;
+ try {
+ ({ user } = await get(`/invoice/${t}`));
+ } catch (e) {
+ throw redirect(303, `/send/bitcoin/${t}`);
+ }
+
+ if (user) throw redirect(303, `/send/user/${user.username}`);
+ }
+
+ // ln address
+ if (t.includes('@') && t.includes('.')) {
+ let [name, domain] = t.split('@');
+ try {
+ let lnurl = await get(`/encode?domain=${domain}&name=${name}`);
+ } catch (e) {}
+ }
+
+ // user
+ let user;
+ try {
+ user = await get(`/users/${t}`);
+ } catch (e) {}
+
+ if (user) throw redirect(303, `/send/user/${t}`);
+};
+
+export async function load({ params }) {
+ let { text } = params;
+ await parse(text);
+}
+
+export const actions = {
+ default: async ({ request }) => {
+ const form = await request.formData();
+ await parse(form.get('text'));
+
+ return invalid(403, { error: 'Failed to recognize input' });
+ }
+};
diff --git a/src/routes/send/+page.svelte b/src/routes/send/[...text]/+page.svelte
index 5d6d123e..5d6d123e 100644
--- a/src/routes/send/+page.svelte
+++ b/src/routes/send/[...text]/+page.svelte
diff --git a/src/routes/send/lightning/[payreq]/+page.svelte b/src/routes/send/lightning/[payreq]/+page.svelte
index 1b248af6..973550f6 100644
--- a/src/routes/send/lightning/[payreq]/+page.svelte
+++ b/src/routes/send/lightning/[payreq]/+page.svelte
@@ -23,7 +23,7 @@
<div class="container px-4 mt-20 max-w-xl mx-auto">
{#if amount}
<div class="text-center mb-8">
- <h1 class="text-xl md:text-2xl text-secondary mb-2">Sending</h1>
+ <h1 class="text-xl md:text-2xl text-secondary mb-2">Send</h1>
<p class="text-6xl break-words mb-4">
{s(amount)} <span class="text-xl md:text-2xl text-secondary">sats</span>
</p>
diff --git a/src/routes/send/user/[username]/+page.svelte b/src/routes/send/user/[username]/+page.svelte
index 1193696b..05908011 100644
--- a/src/routes/send/user/[username]/+page.svelte
+++ b/src/routes/send/user/[username]/+page.svelte
@@ -38,7 +38,7 @@
<div class="container px-4 mt-20 max-w-xl mx-auto">
{#if amount}
<div class="text-center mb-8">
- <h1 class="text-xl md:text-2xl text-secondary mb-2">Sending</h1>
+ <h1 class="text-xl md:text-2xl text-secondary mb-2">Send</h1>
<p class="text-6xl break-words mb-4">
{fiat ? f(amountFiat, currency) : s(a)}
{#if !fiat}