diff options
| -rw-r--r-- | src/routes/+layout.server.js | 3 | ||||
| -rw-r--r-- | src/routes/+layout.svelte | 11 | ||||
| -rw-r--r-- | src/routes/[username]/+page.server.js | 11 | ||||
| -rw-r--r-- | src/routes/[username]/dashboard/+page.svelte | 150 | ||||
| -rw-r--r-- | src/routes/register/+page.server.js | 3 |
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 }); |
