aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAdam Soltys <[email protected]>2024-11-17 00:20:01 -0800
committerAdam Soltys <[email protected]>2024-11-17 00:20:01 -0800
commit71d5d95f1b6f5dcb4a1d66e234a889c30fa02e3f (patch)
tree152e5309f3dc8992cc906a172e28f7357fc36eb7
parentdfd9cc38f013239f681a369eaf9396c6e16ceef0 (diff)
downloadcoinos-ui-71d5d95f1b6f5dcb4a1d66e234a889c30fa02e3f.tar.gz
coinos-ui-71d5d95f1b6f5dcb4a1d66e234a889c30fa02e3f.zip
handle blank offers
-rw-r--r--src/components/Numpad.svelte2
-rw-r--r--src/lib/parse.ts5
-rw-r--r--src/routes/(app)/send/lightning/[payreq]/+page.server.ts18
-rw-r--r--src/routes/(app)/send/lightning/[payreq]/+page.svelte23
4 files changed, 28 insertions, 20 deletions
diff --git a/src/components/Numpad.svelte b/src/components/Numpad.svelte
index bbafc196..990fc025 100644
--- a/src/components/Numpad.svelte
+++ b/src/components/Numpad.svelte
@@ -19,7 +19,7 @@
$: update(amount, amountFiat);
let update = (a, f) => {
if ($fiat) {
- amount = Math.round(f / (rate / sats));
+ amount = f ? Math.round(f / (rate / sats)) : 0;
} else {
amountFiat = ((a * rate) / sats).toFixed(2);
}
diff --git a/src/lib/parse.ts b/src/lib/parse.ts
index cdfa4d62..23759311 100644
--- a/src/lib/parse.ts
+++ b/src/lib/parse.ts
@@ -44,8 +44,9 @@ export default async (s, host) => {
if (t.includes(":")) t = t.split(":")[1];
if (t.toLowerCase().startsWith("lno")) {
- const { invoice } = await get(`/offer/${t}`);
- redirect(307, `/send/lightning/${invoice}`);
+ const { offer_amount_msat: a } = await get(`/decode/${t}`);
+ if (a) ({ invoice: t } = await post("/fetchinvoice", { offer: t }));
+ redirect(307, `/send/lightning/${t}`);
}
if (t.toLowerCase().startsWith("lno")) {
diff --git a/src/routes/(app)/send/lightning/[payreq]/+page.server.ts b/src/routes/(app)/send/lightning/[payreq]/+page.server.ts
index a101b803..87c9cef5 100644
--- a/src/routes/(app)/send/lightning/[payreq]/+page.server.ts
+++ b/src/routes/(app)/send/lightning/[payreq]/+page.server.ts
@@ -2,11 +2,25 @@ import { auth, fd, post } from "$lib/utils";
import { fail, redirect } from "@sveltejs/kit";
export async function load({ cookies, params }) {
- return post("/parse", params, auth(cookies));
+ if (params.payreq.startsWith("lno")) return params;
+ const data = await post("/parse", params, auth(cookies));
+ data.payreq = params.payreq;
+ return data;
}
export const actions = {
- setAmount: async ({ request }) => fd(request),
+ setAmount: async ({ params, request }) => {
+ const data = await fd(request);
+ const { payreq } = params;
+ const { amount } = data;
+ if (payreq.startsWith("lno")) {
+ data.payreq = (
+ await post("/fetchinvoice", { amount, offer: payreq })
+ ).invoice;
+ }
+
+ return data;
+ },
send: async ({ cookies, request }) => {
let p;
diff --git a/src/routes/(app)/send/lightning/[payreq]/+page.svelte b/src/routes/(app)/send/lightning/[payreq]/+page.svelte
index d8bd5f8c..58508809 100644
--- a/src/routes/(app)/send/lightning/[payreq]/+page.svelte
+++ b/src/routes/(app)/send/lightning/[payreq]/+page.svelte
@@ -10,13 +10,13 @@
let { data, form } = $props();
- let { payreq } = $page.params;
let {
alias,
+ payreq,
ourfee,
rates,
user: { currency },
- } = $state(data);
+ } = $derived({ ...data, ...form });
let a = $state();
$effect(() => ($rate ||= rates[currency]));
@@ -25,12 +25,8 @@
let loading = $state();
let submit = () => (loading = true);
- let update = () => {
- if (form?.message?.includes("pin")) $pin = undefined;
- loading = false;
- };
- let show;
+ let next = $state();
let toggle = () => (show = !show);
let amount = $derived(form?.amount || data.amount);
let maxfee = $state(Math.max(5, Math.round(amount * 0.005)));
@@ -128,17 +124,14 @@
{/if}
</form>
{:else}
- <form
- method="POST"
- action="?/setAmount"
- class="w-[300px] mx-auto"
- use:enhance
- >
+ <form method="POST" action="?/setAmount" class="space-y-2" use:enhance>
<input type="hidden" value={a} name="amount" />
<input name="rate" value={$rate} type="hidden" />
- <Numpad bind:amount={a} {currency} bind:rate={$rate} />
- <button type="submit" class="btn"> Next </button>
+ <Numpad bind:amount={a} {currency} bind:rate={$rate} submit={next} />
+ <button type="submit" class="btn" bind:this={next}
+ >{$t("payments.next")}</button
+ >
</form>
{/if}
</div>