From d5a0b655324728f837942afaea3ea67a0e168be7 Mon Sep 17 00:00:00 2001 From: null Date: Thu, 4 Jun 2026 02:24:10 -0500 Subject: [PATCH] feat: live bank status bar and card on TrackerPage with effective balance + pending --- client/pages/TrackerPage.jsx | 92 ++++++++++++++++++++++++++++-------- 1 file changed, 73 insertions(+), 19 deletions(-) diff --git a/client/pages/TrackerPage.jsx b/client/pages/TrackerPage.jsx index 3854c65..7bb4b69 100644 --- a/client/pages/TrackerPage.jsx +++ b/client/pages/TrackerPage.jsx @@ -416,6 +416,35 @@ export default function TrackerPage() { + {/* ── B: Bank status bar ── */} + {bankTracking?.enabled && ( +
= 0 + ? 'border-emerald-500/20 bg-emerald-500/5 text-emerald-700 dark:text-emerald-400' + : 'border-destructive/20 bg-destructive/5 text-destructive', + )}> +
+ + + + + {bankTracking.account_name} + · + {fmt(bankTracking.balance ?? 0)} balance + {Number(bankTracking.pending_payments ?? 0) > 0 && ( + <> + · + {fmt(bankTracking.pending_payments)} pending + + )} +
+ + {Number(bankTracking.remaining ?? 0) < 0 ? '−' : ''}{fmt(Math.abs(Number(bankTracking.remaining ?? 0)))} projected + +
+ )} +
) : (
- { - if (bankTracking?.enabled) { - const proj = Number(bankTracking.remaining ?? 0); - const sign = proj < 0 ? '−' : ''; - return `${bankTracking.account_name} · projected ${sign}${fmt(Math.abs(proj))} after bills`; - } - if (!summary.has_starting_amounts) return 'Set monthly starting cash'; - if (cashflow?.has_data && cashflow.period_projected !== undefined) { - const proj = Number(cashflow.period_projected); - const sign = proj < 0 ? '−' : ''; - return `→ ${sign}${fmt(Math.abs(proj))} projected by ${cashflow.period_end_label}`; - } - return ''; - })()} - onEdit={bankTracking?.enabled ? undefined : () => setEditStartingOpen(true)} - /> + {bankTracking?.enabled ? ( +
= 0 + ? 'border-emerald-500/30 bg-card/95' + : 'border-destructive/30 bg-card/95', + )}> +
+
+ = 0 ? 'text-emerald-500' : 'text-destructive')} /> +

+ {bankTracking.account_name} +

+ + + + + + Live + +
+

+ {fmt(bankTracking.effective_balance ?? 0)} +

+

+ {Number(bankTracking.remaining ?? 0) < 0 ? '−' : ''}{fmt(Math.abs(Number(bankTracking.remaining ?? 0)))} projected after bills +

+
+ ) : ( + { + if (!summary.has_starting_amounts) return 'Set monthly starting cash'; + if (cashflow?.has_data && cashflow.period_projected !== undefined) { + const proj = Number(cashflow.period_projected); + const sign = proj < 0 ? '−' : ''; + return `→ ${sign}${fmt(Math.abs(proj))} projected by ${cashflow.period_end_label}`; + } + return ''; + })()} + onEdit={() => setEditStartingOpen(true)} + /> + )}