Issue #142 / Bilan #4 — non-regressive transfer awareness in the
transactions table + clean error mapping on bulk delete.
- `TransactionTable.tsx`: optional new prop
`linkedTransfersByTxId?: Map<txId, links[]>`. When supplied, a small
`<Link2>` icon appears next to the description for every linked
transaction; tooltip lists the account name(s) and direction(s).
Without the prop, the table renders byte-for-byte identical to
before — preserves the spec's non-regression invariant.
- `TransactionsPage.tsx`: loads the linked-transfers map once on mount
via `listAllLinkedTransfersForTooltip()` (one batch SELECT) and
threads it through to the table. Failure to load the map degrades
gracefully to an empty map (icon simply doesn't appear).
- `transactionService.ts`: new `deleteTransaction(id)` helper +
`TransactionLinkedToBalanceError` (typed FK guard). Pre-checks
`balance_account_transfers` before attempting the DELETE so the
error carries the offending account names; falls back to the FK
pattern matcher if a race linked the transaction between the
SELECT and the DELETE.
- `importedFileService.ts`: both bulk delete paths
(`deleteImportWithTransactions`, `deleteAllImportsWithTransactions`)
now pre-check for any linked transfer and surface the same typed
error before they would explode on FK RESTRICT. The pre-check has
a `LIMIT 50` safety cap on the global path.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Wire the ContextMenu + AddKeywordDialog pair onto the remaining per-transaction
surfaces. No new business logic — pure composition of #69 / #74 pieces.
- HighlightsTopTransactionsList: optional onContextMenuRow prop, ReportsHighlightsPage
renders ContextMenu + AddKeywordDialog on right-click
- TransactionTable: optional onRowContextMenu prop on each <tr>; TransactionsPage
handles it and opens the dialog pre-filled with the row description + current
category
- Aggregate tables (HighlightsTopMoversTable, ComparePeriodTable, MonthlyTrendsTable,
CategoryOverTimeTable) are intentionally NOT wired: they show category / month
aggregates, not individual transactions, so there is no keyword to extract from
a row — the dialog would be nonsensical there
Fixes#75
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Add table/chart toggle for Trends, By Category, and Over Time reports
- Add "Show amounts" toggle to display values on chart elements
- Add filter panel with category checkboxes and source dropdown
- Add source filter at SQL level for all chart report queries
- Add sticky headers on Dynamic Report and Budget vs Actual tables
- Add interactive hover: dimmed non-hovered bars, filtered tooltip, legend hover
- Fix comment icon color to match split indicator (orange) (#7)
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Change split icon color to orange-500 in transactions table for
better contrast in both dark and light modes
- Show split transactions at the top of the adjustments left panel
when there are no manual adjustments (instead of below empty state)
- Add a divider between manual adjustments and splits when both exist
Bumps version to 0.3.5.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Allow users to split a transaction across multiple categories directly
from the transactions table. Split children are hidden from the list
and automatically included in dashboard, report, and budget aggregates.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Tag icon appears next to the category combobox when a category is
assigned. Clicking it expands an inline row pre-filled with the
transaction description, allowing users to add keyword rules without
leaving the Transactions page.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Replace native <select> with a type-to-search CategoryCombobox in both
the filter bar and inline table cells. Fix re-import UNIQUE constraint
error by using INSERT ... ON CONFLICT upsert in createSource(). Detect
duplicate rows within the same import batch using a Set key check.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Add paginated transaction list with search, category/source/date filters,
sortable columns, inline category dropdown, expandable notes, and summary stats.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>