From e3da008479b48dbe1934c8e3df31754d2f79b93a Mon Sep 17 00:00:00 2001 From: Najman Husaini Date: Fri, 17 Jan 2025 22:09:09 -0700 Subject: [PATCH] simple bar chart --- .../src/routes/(apps)/manifest/+page.svelte | 36 +++++++++++++++++-- 1 file changed, 33 insertions(+), 3 deletions(-) diff --git a/usr-web/src/routes/(apps)/manifest/+page.svelte b/usr-web/src/routes/(apps)/manifest/+page.svelte index 95308a5..93847b3 100644 --- a/usr-web/src/routes/(apps)/manifest/+page.svelte +++ b/usr-web/src/routes/(apps)/manifest/+page.svelte @@ -28,6 +28,8 @@ link: string; } let orders: Order[] = $state([]); + let expenditures: Record = $state({}); + let maxExpenditure = $state(0); interface OrderStatus { order_id: number; @@ -58,6 +60,18 @@ setTimeout(() => { fetching = false; }, 500); + + expenditures = orders.reduce>((acc, order) => { + const team = order.team; + const subtotal = order.count * (order.unit_cost as number); + if (acc[team] === undefined) { + acc[team] = 0; + } + acc[team] += subtotal; + return acc; + }, {}); + + maxExpenditure = Math.max(...Object.values(expenditures)); } if (browser) { @@ -502,13 +516,29 @@ {/if} {:else if tabIndex === 4} {#snippet cost(team: string)} -

{team} Total: {orders - .filter(o => o.team === team) - .reduce((acc, cur) => acc + cur.count * (cur.unit_cost as number), 0).toLocaleString('en-US', { style: 'currency', currency: 'USD' })}

+

{team} Total: {(expenditures[team] ?? 0).toLocaleString( + 'en-US', + { style: 'currency', currency: 'USD' } + )}

{/snippet} {@render cost("Software")} {@render cost("Mechanical")} {@render cost("Electrical")} + +
+ {#snippet bar(team: string)} +
+
+
+
+
+

{team}

+
+ {/snippet} + {@render bar("Software")} + {@render bar("Mechanical")} + {@render bar("Electrical")} +
{/if}