feat: propagate right-click add-as-keyword to transactions + highlights list (#75) #94

Merged
maximus merged 1 commit from issue-75-propagate-context-menu into main 2026-04-14 19:23:02 +00:00
Owner

Fixes #75

Follow-up de #74 : étendre le clic droit ContextMenu + AddKeywordDialog aux tables où il a du sens (lignes de transactions individuelles).

Branchement

  • HighlightsTopTransactionsList → prop optionnel onContextMenuRow ; ReportsHighlightsPage monte le menu + dialog
  • TransactionTable → prop optionnel onRowContextMenu sur chaque <tr> ; TransactionsPage pré-remplit le dialog avec description + category_id courants

Intentionnellement NON branché (documenté)

  • HighlightsTopMoversTable, ComparePeriodTable, MonthlyTrendsTable, CategoryOverTimeTable : affichent des agrégats par catégorie ou par mois, pas des transactions individuelles → pas de description dont extraire un mot-clé. Le dialog serait dénué de sens.

Réutilisation pure

Aucun code métier ajouté. Tout réutilise ContextMenu (créé #69), AddKeywordDialog + previewKeywordMatches + applyKeywordWithReassignment (créés #74). Les garanties sécurité héritent automatiquement.

Vérifications

  • npm run build
  • npm test 62/62
  • cargo check
Fixes #75 Follow-up de #74 : étendre le clic droit `ContextMenu` + `AddKeywordDialog` aux tables **où il a du sens** (lignes de transactions individuelles). ## Branchement - `HighlightsTopTransactionsList` → prop optionnel `onContextMenuRow` ; `ReportsHighlightsPage` monte le menu + dialog - `TransactionTable` → prop optionnel `onRowContextMenu` sur chaque `<tr>` ; `TransactionsPage` pré-remplit le dialog avec description + category_id courants ## Intentionnellement NON branché (documenté) - `HighlightsTopMoversTable`, `ComparePeriodTable`, `MonthlyTrendsTable`, `CategoryOverTimeTable` : affichent des agrégats **par catégorie** ou **par mois**, pas des transactions individuelles → pas de description dont extraire un mot-clé. Le dialog serait dénué de sens. ## Réutilisation pure Aucun code métier ajouté. Tout réutilise `ContextMenu` (créé #69), `AddKeywordDialog` + `previewKeywordMatches` + `applyKeywordWithReassignment` (créés #74). Les garanties sécurité héritent automatiquement. ## Vérifications - `npm run build` ✅ - `npm test` ✅ 62/62 - `cargo check` ✅
maximus added 1 commit 2026-04-14 19:16:01 +00:00
feat: propagate right-click "add as keyword" to transactions page and highlights list (#75)
Some checks failed
PR Check / rust (push) Has been cancelled
PR Check / frontend (push) Has been cancelled
PR Check / rust (pull_request) Has been cancelled
PR Check / frontend (pull_request) Has been cancelled
3b70abdb9e
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>
Author
Owner

Review — APPROVE

Sécurité

  • Aucun nouveau code sécurité-sensible. Les garanties héritent de AddKeywordDialog (SQL paramétré, ReDoS cap, BEGIN/COMMIT, XSS-safe) déjà testées en #74
  • onContextMenuRow est optionnel, non-breaking sur les usages existants

Correctness

  • Aggregate tables intentionnellement skippées et documentées dans le commit — décision justifiable (description = category name → mot-clé no sense)
  • TransactionsPage pré-remplit initialCategoryId depuis row.category_id — meilleure UX que le zoom page (catégorie courante vs catégorie zoom)
  • initialKeyword = description.split(/\s+/)[0] cohérent avec le zoom page

Qualité

  • npm run build
  • npm test 62/62
  • cargo check
  • Réutilisation pure, zero duplication

Ready to merge.

## Review — APPROVE ### Sécurité ✅ - Aucun nouveau code sécurité-sensible. Les garanties héritent de `AddKeywordDialog` (SQL paramétré, ReDoS cap, BEGIN/COMMIT, XSS-safe) déjà testées en #74 - `onContextMenuRow` est optionnel, non-breaking sur les usages existants ### Correctness ✅ - Aggregate tables intentionnellement skippées et documentées dans le commit — décision justifiable (description = category name → mot-clé no sense) - `TransactionsPage` pré-remplit `initialCategoryId` depuis `row.category_id` — meilleure UX que le zoom page (catégorie courante vs catégorie zoom) - `initialKeyword = description.split(/\s+/)[0]` cohérent avec le zoom page ### Qualité ✅ - `npm run build` ✅ - `npm test` ✅ 62/62 - `cargo check` ✅ - Réutilisation pure, zero duplication Ready to merge.
maximus merged commit 001646db70 into main 2026-04-14 19:23:02 +00:00
maximus deleted branch issue-75-propagate-context-menu 2026-04-14 19:23:03 +00:00
Sign in to join this conversation.
No reviewers
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference: maximus/Simpl-Resultat#94
No description provided.