From 7081cb92fe532dfd06c2e6e5d42e9292f9dee885 Mon Sep 17 00:00:00 2001 From: Adam Soltys Date: Sun, 22 Dec 2024 23:09:36 -0800 Subject: set memo --- src/components/Invoice.svelte | 40 ------------- src/components/InvoiceActions.svelte | 14 ++++- src/components/InvoiceData.svelte | 23 +++++++- src/components/InvoiceTypes.svelte | 13 +---- src/components/SetAmount.svelte | 3 +- src/components/SetMemo.svelte | 44 ++++++++++++++ src/locales/en.json | 4 +- src/routes/(app)/[username]/receive/+page.svelte | 63 ++++++++++++-------- src/routes/(app)/invoice/+server.ts | 11 +++- src/routes/(app)/invoice/[id]/+page.svelte | 67 ++++++++++++++-------- src/routes/(app)/invoice/[id]/memo/+page.server.ts | 8 --- src/routes/(app)/invoice/[id]/memo/+page.svelte | 2 - .../pay/[username]/[...amount]/+page.server.ts | 2 + .../(app)/pay/[username]/[...amount]/+page.svelte | 21 ++++++- 14 files changed, 196 insertions(+), 119 deletions(-) delete mode 100644 src/components/Invoice.svelte create mode 100644 src/components/SetMemo.svelte (limited to 'src') diff --git a/src/components/Invoice.svelte b/src/components/Invoice.svelte deleted file mode 100644 index 3298dfe5..00000000 --- a/src/components/Invoice.svelte +++ /dev/null @@ -1,40 +0,0 @@ - - -{#if $invoice} -
-
-
-
- -

- {$invoice.user.username} - {$t("payments.isRequesting")} - {f( - ($invoice.amount * $invoice.rate) / sats, - $invoice.currency, - )} - {sat($invoice.amount)} -

-
-
- -
-
-{/if} diff --git a/src/components/InvoiceActions.svelte b/src/components/InvoiceActions.svelte index cd66fc36..23268a19 100644 --- a/src/components/InvoiceActions.svelte +++ b/src/components/InvoiceActions.svelte @@ -6,10 +6,10 @@ t, link, type, - types, showQr = $bindable(), txt, - toggleAmount + toggleAmount, + toggleMemo, } = $props(); @@ -35,11 +35,19 @@ {/if} + + {#if txt.length > 120}
{/if} +{#if invoice.type === types.liquid} +
+ +
+
+ {t("payments.onlyLbtc")} + L-BTC — + {t("payments.dontDeposit")} +
+
+
+{/if} + {#if !showQr || txt.length <= 120}
{txt} @@ -52,3 +69,7 @@ {#if amount > 0} {/if} + +{#if memo} +
{memo}
+{/if} diff --git a/src/components/InvoiceTypes.svelte b/src/components/InvoiceTypes.svelte index a0a1fc12..00b5cfb3 100644 --- a/src/components/InvoiceTypes.svelte +++ b/src/components/InvoiceTypes.svelte @@ -1,6 +1,7 @@ {#if invoice.uid === aid} @@ -89,14 +90,4 @@
Bolt 12
- - {#if type === types.liquid} -
-
- {t("payments.onlyLbtc")} - L-BTC, - {t("payments.dontDeposit")} -
-
- {/if} {/if} diff --git a/src/components/SetAmount.svelte b/src/components/SetAmount.svelte index ddf90a17..a453b9d1 100644 --- a/src/components/SetAmount.svelte +++ b/src/components/SetAmount.svelte @@ -3,12 +3,13 @@ import Numpad from "$comp/Numpad.svelte"; import Toggle from "$comp/Toggle.svelte"; + let submit = $state(); + let { currency = $bindable(), fiat = $bindable(), locale = $bindable(), rate = $bindable(), - submit = $bindable(), settingAmount, setAmount, newAmount = $bindable(), diff --git a/src/components/SetMemo.svelte b/src/components/SetMemo.svelte new file mode 100644 index 00000000..f11bf780 --- /dev/null +++ b/src/components/SetMemo.svelte @@ -0,0 +1,44 @@ + + +{#if settingMemo} +
+
+
+ +
+ + +
+
+
+
+{/if} diff --git a/src/locales/en.json b/src/locales/en.json index 4cb6eb1c..26f9779b 100644 --- a/src/locales/en.json +++ b/src/locales/en.json @@ -110,6 +110,8 @@ "addTip": "Add a tip", "addTipq": "Add a tip?", "addMemo": "Add memo", + "setMemo": "Set memo", + "memo": "Memo", "done": "Done", "paymentSuccessful": "Payment received!", "invoice": "Invoice", @@ -439,7 +441,7 @@ "fundsClaimed": "Funds claimed!", "print": "Print", "onlyLbtc": "We only support", - "dontDeposit": "don't deposit other assets" + "dontDeposit": "Please don't deposit other Liquid assets" }, "items": { "add": "Add item", diff --git a/src/routes/(app)/[username]/receive/+page.svelte b/src/routes/(app)/[username]/receive/+page.svelte index 28d33754..9f3a3fd8 100644 --- a/src/routes/(app)/[username]/receive/+page.svelte +++ b/src/routes/(app)/[username]/receive/+page.svelte @@ -5,6 +5,7 @@ loc, post, copy, + fail, f, get, types, @@ -20,6 +21,7 @@ import InvoiceActions from "$comp/InvoiceActions.svelte"; import InvoiceTypes from "$comp/InvoiceTypes.svelte"; import SetAmount from "$comp/SetAmount.svelte"; + import SetMemo from "$comp/SetMemo.svelte"; import { t } from "$lib/translations"; import { goto, invalidate } from "$app/navigation"; @@ -48,21 +50,30 @@ amountFiat, tip; + let update = async () => { + try { + ({ id } = await post(`/invoice`, { + invoice, + user: { username, currency }, + })); + + let url = `/invoice/${id}`; + if (subject?.prompt) url += "/tip"; + else url += "?options=true"; + + goto(url, { invalidateAll: true, noScroll: true }); + } catch (e) { + fail(e.message); + } + }; + let setType = async (type) => { $showQr = true; if (type === types.lightning && !amount) goto(`/${username}/receive`, { invalidateAll: true, noScroll: true }); else { invoice.type = type; - ({ id } = await post(`/invoice`, { - invoice, - user: { username, currency }, - })); - - goto(`/invoice/${id}?options=true`, { - invalidateAll: true, - noScroll: true, - }); + await update(); } }; @@ -77,23 +88,27 @@ invoice.amount = newAmount; invoice.tip = 0; - ({ id } = await post(`/invoice`, { - invoice, - user: { username, currency }, - })); - - let url = `/invoice/${id}`; - if (subject?.prompt) url += "/tip"; - else url += "?options=true"; - - goto(url, { invalidateAll: true, noScroll: true }); + await update(); }; let newAmount = $state(); let settingAmount = $state(); let fiat = $state(true); let toggleAmount = () => (settingAmount = !settingAmount); - let submit; + + let setMemo = async (e) => { + e.preventDefault(); + e.stopPropagation(); + + settingMemo = false; + invoice.memo = memo; + await update(); + }; + + let memo = $state(); + let settingMemo = $state(); + let toggleMemo = () => (settingMemo = !settingMemo); + let link = $derived( [types.bitcoin, types.liquid].includes(type) ? text : `lightning:${text}`, ); @@ -119,22 +134,23 @@ {tip} {rate} showQr={$showQr} + t={$t} /> - + + + diff --git a/src/routes/(app)/invoice/+server.ts b/src/routes/(app)/invoice/+server.ts index f20d70f3..f494c153 100644 --- a/src/routes/(app)/invoice/+server.ts +++ b/src/routes/(app)/invoice/+server.ts @@ -1,7 +1,12 @@ import { auth, post } from "$lib/utils"; -import { json } from "@sveltejs/kit"; +import { error, json } from "@sveltejs/kit"; export const POST = async ({ cookies, request }) => { - const body = await request.json(); - return json(await post("/invoice", body, auth(cookies))); + try { + const body = await request.json(); + return json(await post("/invoice", body, auth(cookies))); + } catch (e) { + const { message } = e as Error; + error(500, message); + } }; diff --git a/src/routes/(app)/invoice/[id]/+page.svelte b/src/routes/(app)/invoice/[id]/+page.svelte index 8ad555bb..350d2398 100644 --- a/src/routes/(app)/invoice/[id]/+page.svelte +++ b/src/routes/(app)/invoice/[id]/+page.svelte @@ -7,6 +7,7 @@ post, copy, f, + fail, get, types, sat, @@ -21,6 +22,7 @@ import InvoiceActions from "$comp/InvoiceActions.svelte"; import InvoiceTypes from "$comp/InvoiceTypes.svelte"; import SetAmount from "$comp/SetAmount.svelte"; + import SetMemo from "$comp/SetMemo.svelte"; import { t } from "$lib/translations"; import { goto, invalidate } from "$app/navigation"; @@ -38,6 +40,7 @@ let { id, subject, user } = $state(data); let { invoice, src } = $derived(data); let { aid, amount, rate, tip, hash, text, type } = $derived(invoice); + let { memo } = $state(invoice); let { username, currency } = $derived(invoice.user); let locale = loc(user); @@ -65,24 +68,37 @@ } }); + let update = async () => { + try { + ({ id } = await post(`/invoice`, { + invoice, + user: { username, currency }, + })); + + let url = `/invoice/${id}`; + if (subject?.prompt) url += "/tip"; + else url += "?options=true"; + + goto(url, { invalidateAll: true, noScroll: true }); + } catch (e) { + fail(e.message); + } + }; + let setType = async (type) => { $showQr = true; if (type === types.lightning && !amount) goto(`/${username}/receive`, { invalidateAll: true, noScroll: true }); else { invoice.type = type; - ({ id } = await post(`/invoice`, { - invoice, - user: { username, currency }, - })); - - goto(`/invoice/${id}?options=true`, { - invalidateAll: true, - noScroll: true, - }); + await update(); } }; + let newAmount = $state(0); + let settingAmount = $state(); + let toggleAmount = $state(() => (settingAmount = !settingAmount)); + let setAmount = async (e) => { e.preventDefault(); e.stopPropagation(); @@ -93,23 +109,24 @@ invoice.amount = newAmount; invoice.tip = 0; - ({ id } = await post(`/invoice`, { - invoice, - user: { username, currency }, - })); + await update(); + }; - let url = `./${id}`; - if (subject?.prompt) url += "/tip"; - else url += "?options=true"; + let setMemo = async (e) => { + e.preventDefault(); + e.stopPropagation(); + console.log("setting"); - goto(url, { invalidateAll: true, noScroll: true }); + settingMemo = false; + invoice.memo = memo; + console.log("MEMO", invoice.memo); + await update(); }; - let newAmount = $state(0); - let settingAmount = $state(); - let toggleAmount = $state(() => (settingAmount = !settingAmount)); + let settingMemo = $state(); + let toggleMemo = () => (settingMemo = !settingMemo); + let fiat = $state(true); - let submit = $state(); let amountFiat = $derived(parseFloat(((amount * rate) / sats).toFixed(2))); let tipAmount = $derived(((tip * rate) / sats).toFixed(2)); let link = $derived( @@ -134,22 +151,23 @@ {tip} {rate} showQr={$showQr} + t={$t} /> - + + + diff --git a/src/routes/(app)/invoice/[id]/memo/+page.server.ts b/src/routes/(app)/invoice/[id]/memo/+page.server.ts index a2609658..d54ff30d 100644 --- a/src/routes/(app)/invoice/[id]/memo/+page.server.ts +++ b/src/routes/(app)/invoice/[id]/memo/+page.server.ts @@ -1,12 +1,4 @@ import invoice from "$lib/invoice"; -import { redirect } from "@sveltejs/kit"; - -export async function load({ parent, params }) { - const { invoice } = await parent(); - if (!invoice.amount) { - redirect(307, `/invoice/${invoice.id}`); - } -} export const actions = { default: invoice, diff --git a/src/routes/(app)/invoice/[id]/memo/+page.svelte b/src/routes/(app)/invoice/[id]/memo/+page.svelte index 67283148..c8b1a429 100644 --- a/src/routes/(app)/invoice/[id]/memo/+page.svelte +++ b/src/routes/(app)/invoice/[id]/memo/+page.svelte @@ -26,8 +26,6 @@ tip, user: { username, currency }, } = $derived(invoice); - - invoice.memo = user?.username;
{ + e.preventDefault(); + fiat = false; + amount = user.balance; + console.log("OK YES", amount); + next.click(); + }; {#if form?.message} @@ -27,13 +35,22 @@
- + - + {/if} + + -- cgit v1.2.3