feat(recipes): show a summary modal after rematch runs

Replace the post-run toast cascade and the standalone L4 results modal
with a summary modal modeled on the batch download summary: 3-state
header, stat cards (matched / needs review / unresolved / errors),
an L4 review table with per-entry undo, and a copyable report. Wired
into the global, bulk and single-recipe rematch entries; complete
no-op runs keep the lightweight toast. Obsolete results-modal code,
styles and i18n keys are removed.
This commit is contained in:
Will Miao
2026-09-09 10:38:10 +08:00
parent 51cad6f852
commit 4963bf2b2e
23 changed files with 997 additions and 583 deletions
+21 -9
View File
@@ -216,9 +216,6 @@
"label": "Rezepte lokalen Modellen neu zuordnen",
"loading": "Rezepte werden lokalen Modellen neu zugeordnet...",
"success": "{entries} Einträge in {recipes} Rezepten zugeordnet",
"successErrors": "{entries} Einträge in {recipes} Rezepten zugeordnet, {failures} fehlgeschlagen",
"allFailed": "Zuordnung fehlgeschlagen für {failures} von {total} Rezepten",
"noMatch": "Keine lokale Übereinstimmung für {entries} Einträge in {recipes} Rezepten gefunden",
"cancelled": "Zuordnung abgebrochen. {recipes} Rezepte aktualisiert ({entries} Einträge)",
"error": "Zuordnung der Rezepte fehlgeschlagen: {message}"
},
@@ -1511,12 +1508,31 @@
"confirmButton": "Neu zuordnen"
},
"rematchResults": {
"title": "Ergebnisse der neuen Zuordnung — Übereinstimmungen per Dateiname",
"message": "Diese Einträge wurden per Dateiname neu verbunden und verknüpfen möglicherweise eine andere Version eines Modells. Überprüfen Sie sie und machen Sie falsche Zuordnungen rückgängig.",
"undo": "Rückgängig",
"undone": "Rückgängig gemacht",
"undoFailed": "Rückgängigmachen der Neuordnung fehlgeschlagen: {message}"
},
"rematchSummary": {
"title": "[TODO: Translate] Rematch Summary",
"successMessage": "[TODO: Translate] Matched {entries} entries",
"failed": "[TODO: Translate] Rematch failed",
"completedWithWarnings": "[TODO: Translate] Rematch completed — review recommended",
"cancelledNote": "[TODO: Translate] Run cancelled before completion — counts are partial.",
"statMatched": "[TODO: Translate] Matched entries",
"statReview": "[TODO: Translate] Needs review",
"statUnresolved": "[TODO: Translate] Unresolved",
"statErrors": "[TODO: Translate] Errors",
"reviewSection": "[TODO: Translate] Filename matches to review ({count})",
"columnRecipe": "[TODO: Translate] Recipe",
"columnEntry": "[TODO: Translate] Entry",
"columnFile": "[TODO: Translate] Matched file",
"columnUndo": "[TODO: Translate] Undo",
"copyReport": "[TODO: Translate] Copy Report",
"close": "[TODO: Translate] Close",
"scope_global": "[TODO: Translate] All recipes",
"scope_bulk": "[TODO: Translate] Selected recipes",
"scope_single": "[TODO: Translate] Single recipe"
},
"exampleAccess": {
"title": "Lokale Beispielbilder",
"message": "Keine lokalen Beispielbilder für dieses Modell gefunden. Ansichtsoptionen:",
@@ -2239,10 +2255,6 @@
"batchImportBrowseFailed": "Ordner konnte nicht durchsucht werden: {message}",
"batchImportDirectorySelected": "Verzeichnis ausgewählt: {path}",
"noRecipesSelected": "Keine Rezepte ausgewählt",
"rematchComplete": "{entries} Einträge in {recipes} Rezepten zugeordnet",
"rematchCompleteErrors": "{entries} Einträge in {recipes} Rezepten zugeordnet, {failures} fehlgeschlagen",
"rematchAllFailed": "Zuordnung fehlgeschlagen für {failures} von {total} ausgewählten Rezepten",
"rematchUnmatched": "Keine lokale Übereinstimmung für {entries} Einträge in {recipes} Rezepten gefunden",
"rematchSkipped": "Keine Zuordnung für die {total} ausgewählten Rezepte erforderlich",
"rematchFailed": "Zuordnung der ausgewählten Rezepte fehlgeschlagen: {message}",
"reimporting": "Rezept wird aus Quelle neu importiert...",