From a5251afb0e87b72473dabdc1ec4617e8695ac764 Mon Sep 17 00:00:00 2001 From: Adam Soltys Date: Wed, 21 Aug 2024 01:02:06 -0700 Subject: revamp payment totals --- src/lib/handler.js | 14 ++++ src/locales/en.json | 3 + .../[username]/payments/[...page]/+page.server.js | 4 +- .../[username]/payments/[...page]/+page.svelte | 77 +++++++++++++--------- src/routes/(app)/send/ecash/+page.server.js | 8 ++- src/routes/(app)/send/ecash/+page.svelte | 5 +- src/routes/(app)/send/invoice/[id]/+page.svelte | 4 +- .../(app)/voucher/[...token]/+page.server.js | 7 +- 8 files changed, 81 insertions(+), 41 deletions(-) create mode 100644 src/lib/handler.js (limited to 'src') diff --git a/src/lib/handler.js b/src/lib/handler.js new file mode 100644 index 00000000..05e484ec --- /dev/null +++ b/src/lib/handler.js @@ -0,0 +1,14 @@ +import { goto } from "$app/navigation"; +import { applyAction } from "$app/forms"; + +export default (submitting) => + ({ formElement, formData, action, cancel }) => { + submitting = true; + return async ({ result }) => { + if (result.type === "redirect") { + goto(result.location); + } else { + await applyAction(result); + } + }; + }; diff --git a/src/locales/en.json b/src/locales/en.json index 2ce485ff..01d5ebfc 100644 --- a/src/locales/en.json +++ b/src/locales/en.json @@ -293,6 +293,9 @@ } }, "payments": { + "income": "Income", + "subtotal": "Subtotal", + "expenditure": "Expenditure", "spent": "Already spent", "mint": "Mint", "ecash": "Ecash", diff --git a/src/routes/(app)/[username]/payments/[...page]/+page.server.js b/src/routes/(app)/[username]/payments/[...page]/+page.server.js index 7a3bc179..de692a86 100644 --- a/src/routes/(app)/[username]/payments/[...page]/+page.server.js +++ b/src/routes/(app)/[username]/payments/[...page]/+page.server.js @@ -19,8 +19,8 @@ export async function load({ cookies, depends, params, request }) { let url = `/payments?start=${start * 1000}&limit=${limit}&offset=${offset}`; if (end) url += `&end=${end * 1000}`; - let { count, payments, totals } = await get(url, auth(cookies)); + let { count, payments, incoming, outgoing } = await get(url, auth(cookies)); let pages = new Array(Math.ceil(count / limit)); - return { payments, page, pages, start, end, totals }; + return { payments, page, pages, start, end, incoming, outgoing}; } diff --git a/src/routes/(app)/[username]/payments/[...page]/+page.svelte b/src/routes/(app)/[username]/payments/[...page]/+page.svelte index 9f8dd5df..647907e3 100644 --- a/src/routes/(app)/[username]/payments/[...page]/+page.svelte +++ b/src/routes/(app)/[username]/payments/[...page]/+page.svelte @@ -51,9 +51,11 @@ : 0; let p, - totals, + incoming, + outgoing, pages = []; - $: data && ({ page: p, pages, start, end, totals, payments } = data); + $: data && + ({ page: p, pages, start, end, incoming, outgoing, payments } = data); $: $page && ($newPayment = false); $: $newPayment && invalidate(`/users/${user.username}`); @@ -165,8 +167,8 @@
{#each payments as p} -
-
+
+
{f(Math.abs(p.amount) * (p.rate / sats), p.currency)} {#if p.tip} @@ -181,7 +183,9 @@
-
+
{#if p.type === types.pot}
@@ -195,9 +199,9 @@ {:else if p.with}
- +
-
+
{p.with.username}
@@ -234,12 +238,12 @@ {/if}
-
+
{format(new Date(p.created), "h:mm aaa")}
- {format(new Date(p.created), "MMM d, yyyy")} + {format(new Date(p.created), "MMM d, yy")}
@@ -249,29 +253,40 @@ {/each}
-
- {$t("payments.total")} - - {#if payments.some((p) => p.tip > 0)} - {$t("payments.tips")} - {/if} - - - - {#each Object.keys(totals) as c} - {@const total = totals[c]["fiat"]} - {@const tips = totals[c]["fiatTips"]} - {@const pv = (totals[c]["sats"] * rates[c]) / sats} - {@const gain = (pv * 100) / total - 100} - {f(total, c)} - - - {#if payments.some((p) => p.tip > 0)} - {f(tips, c)} - {/if} - - +
+ {#each Object.keys(incoming) as c} + + + + + + {#if tipsIn || tipsOut}{$t("payments.tips")}{/if} + {$t("payments.total")} + + {@const totalIn = incoming[c]?.fiat || 0} + {@const tipsIn = incoming[c]?.fiatTips || 0} + {@const subtotalIn = totalIn - tipsIn} + + {@const totalOut = -outgoing[c]?.fiat || 0} + {@const tipsOut = outgoing[c]?.fiatTips || 0} + {@const subtotalOut = totalOut - tipsOut} + + {$t("payments.income")} + + {tipsIn ? f(tipsIn, c) : "-"} + {totalIn ? f(totalIn, c) : "-"} + + {$t("payments.expenditure")} + + {tipsOut ? f(tipsOut, c) : "-"} + {totalOut ? f(totalOut, c) : "-"} {/each}
diff --git a/src/routes/(app)/send/ecash/+page.server.js b/src/routes/(app)/send/ecash/+page.server.js index 422e5a30..ed002ace 100644 --- a/src/routes/(app)/send/ecash/+page.server.js +++ b/src/routes/(app)/send/ecash/+page.server.js @@ -1,15 +1,17 @@ -import { fail, redirect } from "@sveltejs/kit"; +import { error, redirect } from "@sveltejs/kit"; import { auth, post, fd } from "$lib/utils"; +import { v4 } from "uuid"; export const actions = { default: async ({ cookies, request }) => { let id; - try { let body = await fd(request); + + try { ({ id } = await post("/mint", body, auth(cookies))); } catch (e) { console.log("problem creating ecash", e); - return fail(400, { message: e.message }); + error(400, { message: e.message }); } redirect(307, `/ecash/${id}`); diff --git a/src/routes/(app)/send/ecash/+page.svelte b/src/routes/(app)/send/ecash/+page.svelte index 869e9732..983e9a44 100644 --- a/src/routes/(app)/send/ecash/+page.svelte +++ b/src/routes/(app)/send/ecash/+page.svelte @@ -1,5 +1,5 @@