aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/routes/+layout.server.js3
-rw-r--r--src/routes/+layout.svelte11
-rw-r--r--src/routes/[username]/+page.server.js11
-rw-r--r--src/routes/[username]/dashboard/+page.svelte150
-rw-r--r--src/routes/register/+page.server.js3
5 files changed, 85 insertions, 93 deletions
diff --git a/src/routes/+layout.server.js b/src/routes/+layout.server.js
index 551f1686..ddce4b31 100644
--- a/src/routes/+layout.server.js
+++ b/src/routes/+layout.server.js
@@ -1,3 +1,4 @@
+import { error } from "@sveltejs/kit";
import cookie from 'cookie';
import { protectedRoutes } from '$lib/utils';
import { get } from '$lib/utils';
@@ -10,7 +11,7 @@ export async function load({ request, setHeaders, url, params }) {
if (token) {
user = await get('/me', { accept: 'application/json', authorization: `Bearer ${token}` });
if (protectedRoutes.find((p) => url.pathname.match(p))) {
- if (user.username !== params.username) throw new Error('user not found');
+ if (user.username !== params.username) throw error(404, 'user not found');
}
}
diff --git a/src/routes/+layout.svelte b/src/routes/+layout.svelte
index dfe52894..185eb140 100644
--- a/src/routes/+layout.svelte
+++ b/src/routes/+layout.svelte
@@ -18,15 +18,12 @@
$rates = data.rates;
$: $selectedRate = data.user && $rate * (data.rates[data.user.currency] / data.rates.USD);
- let ready = false;
-
onMount(() => {
if (protectedRoutes.find((p) => $page.url.pathname.match(p))) {
if (!$token) {
goto('/login');
warning($t('error.signIn'));
}
- user.subscribe((u) => u?.username && (ready = true));
} else {
ready = true;
}
@@ -35,12 +32,8 @@
});
</script>
-{#if ready}
- <SvelteToast options={{ reversed: true, intro: { y: 192 } }} />
- <slot />
-{:else}
- <LoadingSplash />
-{/if}
+<SvelteToast options={{ reversed: true, intro: { y: 192 } }} />
+<slot />
<style>
:root {
diff --git a/src/routes/[username]/+page.server.js b/src/routes/[username]/+page.server.js
index 9ae4af2d..1bd8c434 100644
--- a/src/routes/[username]/+page.server.js
+++ b/src/routes/[username]/+page.server.js
@@ -3,20 +3,11 @@ import { get, post } from '$lib/utils';
export async function load({ params }) {
let { username } = params;
- let body;
-
- try {
- body = await get(`/users/${username}`);
- } catch (e) {
- body = {};
- }
-
- return body;
+ return get(`/users/${username}`);
}
export async function PUT({ request }) {
let { token } = cookie.parse(request.headers.get('cookie') || '');
let { user } = await request.json();
await post(`/user`, user, { authorization: `Bearer ${token}` });
- console.log('put done');
}
diff --git a/src/routes/[username]/dashboard/+page.svelte b/src/routes/[username]/dashboard/+page.svelte
index ef8bef88..e4f6538e 100644
--- a/src/routes/[username]/dashboard/+page.svelte
+++ b/src/routes/[username]/dashboard/+page.svelte
@@ -2,9 +2,12 @@
import { post, failure } from '$lib/utils';
import { tick } from 'svelte';
import { AppHeader, Icon } from '$comp';
- import { selectedRate, user } from '$lib/store';
+ import { selectedRate } from '$lib/store';
import { t } from '$lib/translations';
+ export let data;
+ $: user = data.user;
+
let payreq = '',
payreqField,
withdrawing;
@@ -26,94 +29,101 @@
$: btcPrice = new Intl.NumberFormat('en-US', {
style: 'currency',
- currency: $user.currency
+ currency: user.currency
}).format($selectedRate);
$: accountBalanceFiat = new Intl.NumberFormat('en-US', {
style: 'currency',
- currency: $user.currency
- }).format($user.account.balance * ($selectedRate / 100000000));
+ currency: user.currency
+ }).format(user.account.balance * ($selectedRate / 100000000));
- $: accountBalanceBtc = $user.account.balance / 100000000;
+ $: accountBalanceBtc = user.account.balance / 100000000;
$: accountBalanceSats = new Intl.NumberFormat('en-US', { maximumFractionDigits: 0 }).format(
- $user.account.balance
+ user.account.balance
);
</script>
-{#if $user}
- <AppHeader avatarPosition="left-[calc(50vw-48px)] lg:left-[calc(15vw-48px)]" />
+<AppHeader avatarPosition="left-[calc(50vw-48px)] lg:left-[calc(15vw-48px)]" />
- <div
- class="text-center mx-auto lg:text-left lg:mx-0 lg:ml-[calc(15vw-48px)] mt-12 w-full md:w-72"
- >
- <h2 class="text-2xl font-semibold">{$user.username}</h2>
- <span class="text-secondary">{$t('user.addressGoesHere')}</span>
- </div>
+<div class="text-center mx-auto lg:text-left lg:mx-0 lg:ml-[calc(15vw-48px)] mt-12 w-full md:w-72">
+ <h2 class="text-2xl font-semibold">{user.username}</h2>
+ <span class="text-secondary">{$t('user.addressGoesHere')}</span>
+</div>
- <div class="px-3 md:px-0 flex justify-center items-center mt-10 lg:mt-0 mb-20">
- <div>
- <h1 class="text-3xl md:text-4xl font-semibold mb-8">
- {withdrawing ? 'Withdraw' : 'Dashboard'}
- </h1>
- {#if !withdrawing}
- <span class="text-secondary mx-auto text-lg font-bold"
- >{$t('user.dashboard.bitcoinPrice')}
- <span class="text-black"
- >{$selectedRate ? btcPrice : $t('user.dashboard.fetchingRate')}</span
- >
- </span>
+<div class="px-3 md:px-0 flex justify-center items-center mt-10 lg:mt-0 mb-20">
+ <div>
+ <h1 class="text-3xl md:text-4xl font-semibold mb-8">
+ {withdrawing ? 'Withdraw' : 'Dashboard'}
+ </h1>
+ {#if !withdrawing}
+ <span class="text-secondary mx-auto text-lg font-bold"
+ >{$t('user.dashboard.bitcoinPrice')}
+ <span class="text-black"
+ >{$selectedRate ? btcPrice : $t('user.dashboard.fetchingRate')}</span
+ >
+ </span>
- <span class="text-secondary block mt-1">{@html $t('user.dashboard.dataFromBinance')} </span>
+ <span class="text-secondary block mt-1">{@html $t('user.dashboard.dataFromBinance')} </span>
- <h3 class="text-secondary font-bold border-b pb-1 mt-10 mb-6 w-full md:w-[500px]">
- {$t('user.dashboard.ACCOUNT_BALANCE')}
- </h3>
+ <h3 class="text-secondary font-bold border-b pb-1 mt-10 mb-6 w-full md:w-[500px]">
+ {$t('user.dashboard.ACCOUNT_BALANCE')}
+ </h3>
- <span class="text-3xl font-bold block mb-1"
- >{$selectedRate ? accountBalanceFiat : $t('user.dashboard.fetchingRate')}</span
- >
+ <span class="text-3xl font-bold block mb-1"
+ >{$selectedRate ? accountBalanceFiat : $t('user.dashboard.fetchingRate')}</span
+ >
- <span class="text-secondary text-xl block">{accountBalanceSats} SAT</span>
+ <span class="text-secondary text-xl block">{accountBalanceSats} SAT</span>
- <button class="rounded-full border py-2 font-bold w-28 mt-4" on:click={toggle}
- >{$t('user.dashboard.withdraw')}</button
- >
- <p class="text-secondary my-2">{$t('user.dashboard.conversionFeeWarning')}</p>
- {:else}
- <div class="space-y-3 w-[250px] md:w-[500px] md:pr-20">
- <button on:click={() => (withdrawing = false)}>
- <Icon icon="arrow-left" style="w-8" />
- </button>
+ <button class="rounded-full border py-2 font-bold w-28 mt-4" on:click={toggle}
+ >{$t('user.dashboard.withdraw')}</button
+ >
+ <p class="text-secondary my-2">{$t('user.dashboard.conversionFeeWarning')}</p>
+ {:else}
+ <div class="space-y-3 w-[250px] md:w-[500px] md:pr-20">
+ <button on:click={() => (withdrawing = false)}>
+ <Icon icon="arrow-left" style="w-8" />
+ </button>
- <div>
- <label for="invoice" class="font-bold mb-1 block">Invoice</label>
- <input
- bind:this={payreqField}
- type="text"
- name="payreq"
- required
- bind:value={payreq}
- class="block rounded-2xl p-3 w-full bg-primary"
- />
- </div>
+ <div>
+ <label for="invoice" class="font-bold mb-1 block">Invoice</label>
+ <input
+ bind:this={payreqField}
+ type="text"
+ name="payreq"
+ required
+ bind:value={payreq}
+ class="block rounded-2xl p-3 w-full bg-primary"
+ />
+ </div>
- <div>
- <label for="note" class="font-bold mb-1 block"
- >{$t('user.dashboard.optionalNote')}</label
- >
- <textarea name="note" rows={2} class="block rounded-2xl p-3 w-full bg-primary" />
- </div>
+ <div>
+ <label for="note" class="font-bold mb-1 block">{$t('user.dashboard.optionalNote')}</label>
+ <textarea name="note" rows={2} class="block rounded-2xl p-3 w-full bg-primary" />
+ </div>
+
+ <button
+ disabled={!payreq}
+ class="{!payreq
+ ? 'opacity-50'
+ : 'opacity-100'} rounded-2xl border py-3 font-bold w-full mt-2 bg-black text-white"
+ on:click={withdraw}>{$t('user.dashboard.send')}</button
+ >
- <button
- disabled={!payreq}
- class="{!payreq
- ? 'opacity-50'
- : 'opacity-100'} rounded-2xl border py-3 font-bold w-full mt-2 bg-black text-white"
- on:click={withdraw}>{$t('user.dashboard.send')}</button
- >
+ <div>
+ <label for="note" class="font-bold mb-1 block">{$t('user.dashboard.optionalNote')}</label>
+ <textarea name="note" rows={2} class="block rounded-2xl p-3 w-full bg-primary" />
</div>
- {/if}
- </div>
+
+ <button
+ disabled={!payreq}
+ class="{!payreq
+ ? 'opacity-50'
+ : 'opacity-100'} rounded-2xl border py-3 font-bold w-full mt-2 bg-black text-white"
+ on:click={withdraw}>{$t('user.dashboard.send')}</button
+ >
+ </div>
+ {/if}
</div>
-{/if}
+</div>
diff --git a/src/routes/register/+page.server.js b/src/routes/register/+page.server.js
index 0c7efafd..abafe2de 100644
--- a/src/routes/register/+page.server.js
+++ b/src/routes/register/+page.server.js
@@ -1,8 +1,5 @@
-import cookie from 'cookie';
import { post, login } from '$lib/utils';
-let maxAge = 30 * 24 * 60 * 60;
-
export async function POST({ request, setHeaders }) {
let user = Object.fromEntries(await request.formData());
await post('/register', { user });