aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAdam Soltys <[email protected]>2024-09-25 12:50:46 -0700
committerAdam Soltys <[email protected]>2024-09-25 12:50:46 -0700
commit3be85cc511220725bfff7add3a6cb4927f73b15c (patch)
tree1768a9f0a25c2ee0a847d5ce0174ab3cfcf6ba77
parent396535514c4fe00e872e5cc5af0a504e923736bb (diff)
downloadcoinos-ui-3be85cc511220725bfff7add3a6cb4927f73b15c.tar.gz
coinos-ui-3be85cc511220725bfff7add3a6cb4927f73b15c.zip
invoice fixes
-rw-r--r--src/components/AppHeader.svelte23
-rw-r--r--src/routes/(app)/+layout.server.ts3
-rw-r--r--src/routes/(app)/[username]/(profile)/+page.server.ts3
-rw-r--r--src/routes/(app)/[username]/+layout.server.ts3
-rw-r--r--src/routes/(app)/invoice/[id]/+layout.server.ts3
-rw-r--r--src/routes/(app)/invoice/[id]/+layout.svelte1
-rw-r--r--src/routes/(app)/invoice/[id]/[email protected]115
-rw-r--r--src/routes/(app)/invoice/[id]/+page.svelte6
-rw-r--r--src/routes/(app)/pay/[username]/[...amount]/+page.server.ts6
-rw-r--r--src/routes/(app)/send/invoice/[id]/+page.server.ts2
10 files changed, 143 insertions, 22 deletions
diff --git a/src/components/AppHeader.svelte b/src/components/AppHeader.svelte
index cc521e93..541059f5 100644
--- a/src/components/AppHeader.svelte
+++ b/src/components/AppHeader.svelte
@@ -9,6 +9,8 @@
export let user, subject;
+ $: if (!subject) subject = user;
+
let menuButtons;
$: if (user)
menuButtons = [
@@ -58,8 +60,9 @@
</a>
<a href={`/invoice`}>
<button
- class="bg-white p-2 rounded-full w-12 h-12 sm:w-16 sm:h-16 drop-shadow-xl border border-black/10 {$page
- .url.pathname.includes('invoice')
+ class="bg-white p-2 rounded-full w-12 h-12 sm:w-16 sm:h-16 drop-shadow-xl border border-black/10 {$page.url.pathname.includes(
+ 'invoice'
+ )
? 'opacity-100'
: 'opacity-70 hover:opacity-80'}"
><Icon icon="receive" style="mx-auto w-6 sm:w-8" />
@@ -98,8 +101,8 @@
<div class="relative">
<OutClick on:outclick={() => (showMenu = false)}>
<button
- class="bg-white p-2 rounded-full w-12 h-12 sm:w-16 sm:h-16 drop-shadow-xl border border-black/10 {
- $page.url.pathname === `/settings` ||
+ class="bg-white p-2 rounded-full w-12 h-12 sm:w-16 sm:h-16 drop-shadow-xl border border-black/10 {$page
+ .url.pathname === `/settings` ||
$page.url.pathname === `/support`
? 'opacity-100'
: `opacity-70 hover:opacity-80 ${
@@ -141,11 +144,13 @@
</a>
{/if}
</nav>
- <div
- class="absolute md:w-[64px] md:mx-auto lg:left-[154px] xl:left-[194px] left-[calc(50vw-64px)] -bottom-[64px] z-30"
- >
- <Avatar user={subject} />
- </div>
+ {#if subject}
+ <div
+ class="absolute md:w-[64px] md:mx-auto lg:left-[154px] xl:left-[194px] left-[calc(50vw-64px)] -bottom-[64px] z-30"
+ >
+ <Avatar user={subject} />
+ </div>
+ {/if}
</header>
{/if}
diff --git a/src/routes/(app)/+layout.server.ts b/src/routes/(app)/+layout.server.ts
index 0901cb5d..36381082 100644
--- a/src/routes/(app)/+layout.server.ts
+++ b/src/routes/(app)/+layout.server.ts
@@ -24,9 +24,6 @@ export async function load({ cookies, request, url, params }) {
}
}
- if (!subject) subject = user;
- if (!user) user = subject;
-
if (user?.needsMigration) {
redirect(307, `/migrate`);
}
diff --git a/src/routes/(app)/[username]/(profile)/+page.server.ts b/src/routes/(app)/[username]/(profile)/+page.server.ts
index ed4ee58c..e3d3bed1 100644
--- a/src/routes/(app)/[username]/(profile)/+page.server.ts
+++ b/src/routes/(app)/[username]/(profile)/+page.server.ts
@@ -6,7 +6,8 @@ export async function load({ cookies, depends, parent }) {
let { subject } = await parent();
- let accounts = await get("/accounts", auth(cookies));
+ let accounts = [];
+ if (cookies.get("token")) accounts = await get("/accounts", auth(cookies));
let items = await get(`/${subject.id}/items`, auth(cookies));
items.map((i) => (i.quantity = 0));
diff --git a/src/routes/(app)/[username]/+layout.server.ts b/src/routes/(app)/[username]/+layout.server.ts
index 9a520036..284501a2 100644
--- a/src/routes/(app)/[username]/+layout.server.ts
+++ b/src/routes/(app)/[username]/+layout.server.ts
@@ -12,11 +12,10 @@ export let load = async ({
try {
let subject = await get(`/users/${username}`);
let { user } = await parent();
- if (!user) user = subject;
let expires = new Date();
expires.setSeconds(expires.getSeconds() + 380 * 24 * 60 * 60);
- cookies.set("username", username, { path: "/", expires });
+ cookies.set("username", username, { path: "/", expires });
return { subject, user };
} catch (e) {
diff --git a/src/routes/(app)/invoice/[id]/+layout.server.ts b/src/routes/(app)/invoice/[id]/+layout.server.ts
index 55c44f36..e2f03fd7 100644
--- a/src/routes/(app)/invoice/[id]/+layout.server.ts
+++ b/src/routes/(app)/invoice/[id]/+layout.server.ts
@@ -24,6 +24,7 @@ export async function load({ depends, params, url, parent }) {
let { amount, pending, received } = invoice;
amount = parseInt(amount);
+ subject = user || invoice.user;
let paid =
(!amount && (pending || received)) ||
@@ -34,5 +35,5 @@ export async function load({ depends, params, url, parent }) {
}
let src = Qr.drawImg(invoice?.text || "", { size: 500 });
- return { id, invoice, subject, src };
+ return { id, invoice, subject, src, user };
}
diff --git a/src/routes/(app)/invoice/[id]/+layout.svelte b/src/routes/(app)/invoice/[id]/+layout.svelte
deleted file mode 100644
index 4fa864ce..00000000
--- a/src/routes/(app)/invoice/[id]/+layout.svelte
+++ /dev/null
@@ -1 +0,0 @@
-<slot />
diff --git a/src/routes/(app)/invoice/[id]/[email protected] b/src/routes/(app)/invoice/[id]/[email protected]
new file mode 100644
index 00000000..db14b046
--- /dev/null
+++ b/src/routes/(app)/invoice/[id]/[email protected]
@@ -0,0 +1,115 @@
+<script>
+ import { SvelteToast } from "@zerodevx/svelte-toast";
+ import { onDestroy, onMount } from "svelte";
+ import { close, connect, send } from "$lib/socket";
+ import {
+ last,
+ invoice,
+ request,
+ ndef,
+ passwordPrompt,
+ password,
+ pin,
+ } from "$lib/store";
+ import { page } from "$app/stores";
+ import { browser } from "$app/environment";
+ import LoadingSplash from "$comp/LoadingSplash.svelte";
+ import AppHeader from "$comp/AppHeader.svelte";
+ import Invoice from "$comp/Invoice.svelte";
+ import Password from "$comp/Password.svelte";
+ import { getCookie, warning, protectedRoutes } from "$lib/utils";
+ import { t, locale, loading } from "$lib/translations";
+ import { goto, onNavigate } from "$app/navigation";
+
+ export let data;
+
+ let { generate, rate, user, subject, token, rates } = data;
+
+ $: update(data);
+ let update = (data) => {
+ ({ rate, user, subject, token, rates } = data);
+ };
+
+ onMount(async () => {
+ if (browser) {
+ checkSocket();
+ $pin = getCookie("pin");
+
+ if (window.NDEFReader && user.nfc) {
+ try {
+ $ndef = new NDEFReader();
+ await $ndef.scan();
+
+ $ndef.addEventListener("readingerror", (e) => {
+ console.log("nfc error", e);
+ });
+
+ $ndef.addEventListener("reading", ({ message, serialNumber }) => {
+ goto(`/send/${message}`);
+ });
+ } catch (error) {
+ console.log("Argh! " + error);
+ }
+ }
+ }
+ });
+
+ $: browser && connect(token);
+
+ let lost,
+ checkTimer,
+ expireTimer,
+ counter = 0;
+
+ let checkSocket = () => {
+ counter++;
+ lost = Date.now() - $last > 30000;
+ if (lost) connect(token);
+ if (counter > 5) {
+ send("heartbeat", token);
+ counter = 0;
+ }
+
+ checkTimer = setTimeout(checkSocket, 1000);
+ };
+
+ onDestroy(() => {
+ if (browser) {
+ close();
+ clearTimeout(checkTimer);
+ clearTimeout(expireTimer);
+ }
+ });
+</script>
+
+{#if browser && user && $passwordPrompt}
+ <Password {user} />
+{/if}
+
+<svelte:head>
+ {#if subject}
+ <title>coinos - {subject.username}</title>
+ <meta name="lightning" content={`lnurlp:${subject.username}@coinos.io`} />
+ {:else}
+ <title>coinos</title>
+ {/if}
+
+ {#if subject?.profile}
+ <meta name="og:image" content={`/api/public/${subject.profile}.webp`} />
+ {:else}
+ <meta property="og:image" content="/images/logo.webp" />
+ {/if}
+</svelte:head>
+
+<SvelteToast options={{ reversed: true, intro: { y: 192 } }} />
+
+<main class="pb-20">
+ <AppHeader {user} {subject} />
+ {#if !$loading}
+ <slot />
+ {/if}
+</main>
+
+{#if $invoice}
+ <Invoice {user} />
+{/if}
diff --git a/src/routes/(app)/invoice/[id]/+page.svelte b/src/routes/(app)/invoice/[id]/+page.svelte
index 3b25797d..ac4c2d32 100644
--- a/src/routes/(app)/invoice/[id]/+page.svelte
+++ b/src/routes/(app)/invoice/[id]/+page.svelte
@@ -143,7 +143,9 @@
</a>
</div>
{:else}
- <div class="break-all pb-5 text-center text-secondary text-xl min-h-[120px] flex">
+ <div
+ class="break-all pb-5 text-center text-secondary text-xl min-h-[120px] flex"
+ >
<div class="m-auto">{txt}</div>
</div>
{/if}
@@ -236,7 +238,7 @@
</div>
</div>
- {#if aid === user.id}
+ {#if aid === user?.id}
<div class="grid grid-cols-2 justify-around text-secondary">
<button
class="hover:bg-primary my-auto flex gap-1 sm:gap-2 py-3 px-2 sm:px-5 justify-center"
diff --git a/src/routes/(app)/pay/[username]/[...amount]/+page.server.ts b/src/routes/(app)/pay/[username]/[...amount]/+page.server.ts
index cf8143f0..5fa7737f 100644
--- a/src/routes/(app)/pay/[username]/[...amount]/+page.server.ts
+++ b/src/routes/(app)/pay/[username]/[...amount]/+page.server.ts
@@ -2,10 +2,12 @@ import { error, fail, redirect } from "@sveltejs/kit";
import { types, sats, fd, auth, get, post } from "$lib/utils";
export async function load({ cookies, params, parent }) {
+ let { username } = params;
+ let { rates, user } = await parent();
+
+ if (user.username = username) error(500, "Cannot send to self");
let subject = await get(`/users/${params.username}`);
- let { rates } = await parent();
- let { username } = params;
let [amount, currency] = params.amount.split("/");
let rate;
diff --git a/src/routes/(app)/send/invoice/[id]/+page.server.ts b/src/routes/(app)/send/invoice/[id]/+page.server.ts
index 6c89912d..f294f88d 100644
--- a/src/routes/(app)/send/invoice/[id]/+page.server.ts
+++ b/src/routes/(app)/send/invoice/[id]/+page.server.ts
@@ -12,7 +12,7 @@ export async function load({ params: { id }, parent }) {
if (invoice.memoPrompt && invoice.memo === null)
redirect(307, `/invoice/${id}/memo`);
- if (invoice.account === user?.id)
+ if (user && invoice.account === user?.id)
error(500, { message: "Cannot send to self" });
if (!user) redirect(307, `/invoice/${id}`);