diff --git a/gerbil-manager-web/src/components/DatenexportCard.tsx b/gerbil-manager-web/src/components/DatenexportCard.tsx new file mode 100644 index 0000000..28817f8 --- /dev/null +++ b/gerbil-manager-web/src/components/DatenexportCard.tsx @@ -0,0 +1,21 @@ +/** + * EXPORT-1: Datenexport-Karte (auf /einstellungen) — lädt GET /export als Zip. + * Schlichter Anker-Download (kein fetch/Blob nötig); der Server setzt + * Content-Disposition mit Datumsdateinamen. + */ +import { API_BASE_URL } from '../api/client' +import { de } from '../strings/de' + +export default function DatenexportCard() { + const t = de.pages.datenexport + return ( +
+

{t.title}

+

{t.intro}

+

{t.photoNote}

+ + {t.button} + +
+ ) +} diff --git a/gerbil-manager-web/src/pages/EinstellungenPage.tsx b/gerbil-manager-web/src/pages/EinstellungenPage.tsx index a340778..4eaac87 100644 --- a/gerbil-manager-web/src/pages/EinstellungenPage.tsx +++ b/gerbil-manager-web/src/pages/EinstellungenPage.tsx @@ -13,6 +13,8 @@ import { type BreederProfile, } from '../api/settings' import { useApi, useMutation } from '../hooks/useApi' +// EXPORT-1 (Oscar): Datenexport-Karte +import DatenexportCard from '../components/DatenexportCard' export default function EinstellungenPage() { const t = de.pages.einstellungen @@ -95,6 +97,8 @@ export default function EinstellungenPage() { {saved && {tz.saved}} + + ) } diff --git a/gerbil-manager-web/src/strings/de.ts b/gerbil-manager-web/src/strings/de.ts index 89a7041..2ff2271 100644 --- a/gerbil-manager-web/src/strings/de.ts +++ b/gerbil-manager-web/src/strings/de.ts @@ -563,6 +563,15 @@ export const de = { }, }, }, + // ── EXPORT-1 (Oscar): Datenexport (Karte auf /einstellungen) ── + datenexport: { + title: 'Datenexport', + intro: + 'Sicherung deiner Daten — alle Tiere, Würfe und Kontakte als Tabellen (CSV für Excel) plus eine vollständige Datensicherung (JSON), gebündelt als Zip.', + button: 'Export herunterladen', + photoNote: + 'Fotos sind nicht enthalten — sie liegen als Bilddateien im Datenordner der Anwendung und können von dort gesichert werden.', + }, }, api: { errors: {