diff options
| author | Adam Soltys <[email protected]> | 2024-12-22 23:09:36 -0800 |
|---|---|---|
| committer | Adam Soltys <[email protected]> | 2024-12-22 23:09:36 -0800 |
| commit | ab82b405be6f2665c43518b4ad253becc8ab7430 (patch) | |
| tree | 6e6fa488e6d78aa15f38da081b203423e4bb9d92 /src/routes | |
| parent | e2fcfdc4d608e260bb596952d8b54a7dcef05258 (diff) | |
| download | coinos-ui-ab82b405be6f2665c43518b4ad253becc8ab7430.tar.gz coinos-ui-ab82b405be6f2665c43518b4ad253becc8ab7430.zip | |
set memo
Diffstat (limited to 'src/routes')
| -rw-r--r-- | src/routes/(app)/[username]/receive/+page.svelte | 63 | ||||
| -rw-r--r-- | src/routes/(app)/invoice/+server.ts | 11 | ||||
| -rw-r--r-- | src/routes/(app)/invoice/[id]/+page.svelte | 67 | ||||
| -rw-r--r-- | src/routes/(app)/invoice/[id]/memo/+page.server.ts | 8 | ||||
| -rw-r--r-- | src/routes/(app)/invoice/[id]/memo/+page.svelte | 2 | ||||
| -rw-r--r-- | src/routes/(app)/pay/[username]/[...amount]/+page.server.ts | 2 | ||||
| -rw-r--r-- | src/routes/(app)/pay/[username]/[...amount]/+page.svelte | 21 |
7 files changed, 112 insertions, 62 deletions
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} /> <InvoiceActions {toggleAmount} + {toggleMemo} {user} {invoice} {copy} {link} {type} - {types} {showQr} {txt} t={$t} /> - <InvoiceTypes {aid} {invoice} {user} {type} {types} {setType} t={$t} /> + <InvoiceTypes {aid} {invoice} {user} {type} {setType} t={$t} /> </div> <SetAmount @@ -143,9 +159,10 @@ {currency} locale={loc(user)} {rate} - {submit} {settingAmount} {setAmount} {toggleAmount} t={$t} /> + +<SetMemo bind:memo {settingMemo} {setMemo} {toggleMemo} 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} /> <InvoiceActions {toggleAmount} + {toggleMemo} {user} {invoice} {copy} {link} {type} - {types} {txt} t={$t} bind:showQr={$showQr} /> - <InvoiceTypes {aid} {invoice} {user} {type} {types} {setType} t={$t} /> + <InvoiceTypes {aid} {invoice} {user} {type} {setType} t={$t} /> </div> <SetAmount @@ -158,10 +176,11 @@ {currency} {locale} {rate} - {submit} {settingAmount} {setAmount} {toggleAmount} amountPrompt={$amountPrompt} t={$t} /> + +<SetMemo bind:memo {settingMemo} {setMemo} {toggleMemo} 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; </script> <form diff --git a/src/routes/(app)/pay/[username]/[...amount]/+page.server.ts b/src/routes/(app)/pay/[username]/[...amount]/+page.server.ts index 65665610..431310a3 100644 --- a/src/routes/(app)/pay/[username]/[...amount]/+page.server.ts +++ b/src/routes/(app)/pay/[username]/[...amount]/+page.server.ts @@ -33,6 +33,8 @@ export async function load({ cookies, params, parent }) { auth(cookies), ); + const { balance } = await get(`/account/${user.id}`, auth(cookies)); + redirect(307, `/invoice/${id}`); } diff --git a/src/routes/(app)/pay/[username]/[...amount]/+page.svelte b/src/routes/(app)/pay/[username]/[...amount]/+page.svelte index b22e3c1f..7e696b22 100644 --- a/src/routes/(app)/pay/[username]/[...amount]/+page.svelte +++ b/src/routes/(app)/pay/[username]/[...amount]/+page.svelte @@ -16,6 +16,14 @@ let initialAmount = form?.amount || data.amount; let amount = $state(initialAmount); let fiat = $state(!initialAmount); + + let setMax = (e) => { + e.preventDefault(); + fiat = false; + amount = user.balance; + console.log("OK YES", amount); + next.click(); + }; </script> {#if form?.message} @@ -27,13 +35,22 @@ <div class="container px-4 mt-20 max-w-xl mx-auto space-y-2"> <Numpad bind:amount bind:fiat {currency} {locale} {rate} submit={next} /> - <form method="POST" use:enhance> + <form method="POST" use:enhance class="flex gap-2 justify-center"> <input name="amount" value={amount} type="hidden" /> <input name="rate" value={rate} type="hidden" /> <input name="username" value={subject.username} type="hidden" /> <input name="prompt" value={subject.prompt} type="hidden" /> - <button type="submit" bind:this={next} class="btn btn-accent"> + {#if user?.balance} + <button + type="button" + class="btn !w-auto grow" + onclick={setMax} + onkeydown={setMax}>Max ⚡️{s(user.balance)}</button + > + {/if} + + <button type="submit" bind:this={next} class="btn btn-accent !w-auto grow"> {$t("payments.next")}</button > </form> |
