BillTracker/client/components
null dd5bf92fc1 fix(money): manual payment path flags suspected dupes (409) w/o losing legit ones (Track A)
The deliberate manual POST /payments had no dedupe guard (double-submit
made a second payment), but silently deduping it like the auto paths
would lose a legitimately-identical same-day payment — a money bug. So
the server returns 409 DUPLICATE_SUSPECTED (existing payment attached),
and a shared client helper (client/lib/paymentActions.ts, used by the
tracker inline cell, partial-payment dialog, and bill modal) turns it
into an 'add anyway?' toast that resends with allow_duplicate. Automated
one-click paths keep deduping silently (a repeat there is a retry).

Dropped a now-unused api import in PaymentLedgerDialog (Track E sweep).
Server suite 188 green; typecheck/lint/build clean; probe 17/17.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-05 11:51:06 -05:00
..
admin refactor(ts): convert ImportSpreadsheetSection to TypeScript — data/ dir complete 2026-07-04 21:56:04 -05:00
bill-modal refactor(ts): BillMerchantRules → TypeScript 2026-07-04 22:08:05 -05:00
data refactor(ts): convert ImportSpreadsheetSection to TypeScript — data/ dir complete 2026-07-04 21:56:04 -05:00
layout refactor(ts): convert the app shell to TSX (B7) 2026-07-04 19:49:57 -05:00
snowball refactor(ts): SnowballPage → TypeScript (debt attack order + projections + plans) 2026-07-04 23:12:57 -05:00
tracker fix(money): manual payment path flags suspected dupes (409) w/o losing legit ones (Track A) 2026-07-05 11:51:06 -05:00
transactions refactor(ts): convert transactions/ + snowball/ dirs to TSX (B14) 2026-07-04 20:39:30 -05:00
ui refactor(ts): convert all UI primitives + ThemeContext to TSX (B2) 2026-07-03 22:57:22 -05:00
BillHistoricalImportDialog.tsx refactor(ts): BillMerchantRules → TypeScript 2026-07-04 22:08:05 -05:00
BillMerchantRules.tsx refactor(ts): BillMerchantRules → TypeScript 2026-07-04 22:08:05 -05:00
BillModal.tsx fix(money): manual payment path flags suspected dupes (409) w/o losing legit ones (Track A) 2026-07-05 11:51:06 -05:00
BillRulesManager.tsx refactor(ts): convert SearchFilterPanel, RecentlyDeletedBillsDialog, BillRulesManager to TSX (B15) 2026-07-04 20:42:24 -05:00
BillsTableInner.tsx refactor(ts): BillHistoricalImportDialog + BillsTableInner → TypeScript 2026-07-04 22:04:55 -05:00
CalendarFeedManager.tsx refactor(ts): MobileBillRow, IncomeBreakdownModal, CalendarFeedManager → TS 2026-07-04 22:01:49 -05:00
CommandPalette.tsx refactor(ts): CommandPalette → TypeScript (typed Command + Bill results) 2026-07-04 22:09:36 -05:00
ErrorBoundary.tsx refactor(ts): convert app-wide common components to TSX (B8) 2026-07-04 19:52:47 -05:00
IncomeBreakdownModal.tsx refactor(ts): MobileBillRow, IncomeBreakdownModal, CalendarFeedManager → TS 2026-07-04 22:01:49 -05:00
MarkdownText.tsx refactor(ts): convert app-wide common components to TSX (B8) 2026-07-04 19:52:47 -05:00
MobileBillRow.tsx refactor(ts): MobileBillRow, IncomeBreakdownModal, CalendarFeedManager → TS 2026-07-04 22:01:49 -05:00
PageLoader.tsx refactor(ts): convert app-wide common components to TSX (B8) 2026-07-04 19:52:47 -05:00
PageTransition.tsx refactor(ts): convert app-wide common components to TSX (B8) 2026-07-04 19:52:47 -05:00
RecentlyDeletedBillsDialog.tsx refactor(ts): convert SearchFilterPanel, RecentlyDeletedBillsDialog, BillRulesManager to TSX (B15) 2026-07-04 20:42:24 -05:00
ReleaseNotesDialog.tsx refactor(ts): convert SummaryCard + ReleaseNotesDialog to TSX (B9) 2026-07-04 19:54:40 -05:00
SearchFilterPanel.tsx refactor(ts): convert SearchFilterPanel, RecentlyDeletedBillsDialog, BillRulesManager to TSX (B15) 2026-07-04 20:42:24 -05:00
StatusBadge.tsx refactor(ts): convert app-wide common components to TSX (B8) 2026-07-04 19:52:47 -05:00
SubscriptionCatalogSection.tsx refactor(ts): SubscriptionCatalogSection → TypeScript 2026-07-04 22:12:49 -05:00
SummaryCard.tsx refactor(ts): convert SummaryCard + ReleaseNotesDialog to TSX (B9) 2026-07-04 19:54:40 -05:00