Bulk selection UI and import-review modal

Transactions gain a checkbox column with select-all; a bulk bar offers
assign-category, defer/restore and delete (confirmed) via the new bulk
endpoint, with toasts and invalidation. The paste-import modal now
lists each skipped duplicate with the matched existing row and offers
'Importar duplicados de todos modos' — re-importing ONLY the skipped
lines so first-pass rows can't double-import (UX-20). Two real fixes
found en route: the mobile list ignored undo-pending deletes and used
en-US dates; the desktop date column also lost its en-US stray. Note:
UX-11 (no mobile layout) was a false positive — a card layout already
existed.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
Carlos Escalante
2026-06-11 21:00:19 -06:00
parent ce3cc69846
commit 0dfac6a285
4 changed files with 291 additions and 10 deletions

View File

@@ -143,10 +143,24 @@ export interface Category {
auto_match_patterns: string | null;
}
export interface SkippedDuplicate {
line: number;
merchant: string;
date: string;
amount: number;
currency: string;
existing_id: number;
existing_merchant: string;
existing_date: string;
existing_amount: number;
existing_source: string;
}
export interface ImportResult {
imported: number;
duplicates: number;
errors: string[];
skipped: SkippedDuplicate[];
}
export interface Transaction {