{t.rpro3Link.text}
++ + {t.rpro3Link.button} → + +
+ > + ), + }, ] export default function HilfePage() { diff --git a/gerbil-manager-web/src/pages/RennmausProImportPage.tsx b/gerbil-manager-web/src/pages/RennmausProImportPage.tsx new file mode 100644 index 0000000..90ec172 --- /dev/null +++ b/gerbil-manager-web/src/pages/RennmausProImportPage.tsx @@ -0,0 +1,255 @@ +/** + * RPRO3: Rubrik unter „Hilfe" für den RennmausPro-III-Backup-Import. + * Laienverständlicher 3-Schritt-Ablauf: + * 1) .backup (+ optional _bilder.zip) auswählen → „Auswerten" (schreibt nichts) + * 2) Auswertung: Zählungen, Dubletten, mehrdeutige Namen, neu/vorhanden + * 3) „Import durchführen" → Ergebnis + * Alle Texte aus de.ts. + */ +import { useState } from 'react' +import { Link } from 'react-router-dom' +import { de } from '../strings/de' +import { ApiError } from '../api/client' +import { + analyzeRpro3, + executeRpro3, + type Rpro3AnalyzeResult, + type Rpro3ExecuteResult, +} from '../api/rpro3' +import './rpro3-import.css' + +const t = de.pages.rpro3Import + +type Phase = 'select' | 'analyzing' | 'analyzed' | 'executing' | 'done' + +export default function RennmausProImportPage() { + const [backup, setBackup] = useState{t.subtitle}
+{t.intro}
+ + {error && ( +{t.executeWarning}
+ +{t.dedupExplain}
+ ++ {t.newCount(analysis.newVsCurrentNew)}{' '} + {t.existingCount(analysis.newVsCurrentExisting)} +
+ ++ {analysis.photosProvided ? t.photosNote(analysis.photoFilesAvailable) : t.photosNoneNote} +
+ + {analysis.topMerges.length > 0 && ( +| {t.topMergesCol.name} | +{t.topMergesCol.count} | +{t.topMergesCol.dob} | +{t.topMergesCol.farbe} | +{t.topMergesCol.origin} | +
|---|---|---|---|---|
| {m.name} | +{m.recordCount} | +{m.dob || '—'} | +{m.farbe || '—'} | +{m.origin || '—'} | +
{t.ambiguousIntro}
+