import React, { useEffect, useState } from 'react'; import { Archive, Check, Download, RotateCcw } from 'lucide-react'; import { BackupFile, DataSection, DATA_SECTIONS, ImportSummary } from '../../lib/types'; import { api } from '../../lib/api'; import { formatBytes, saveBlob } from '../../lib/download'; import { SectionPicker } from './SectionPicker'; // The user's own automatic backups on the server: download or restore (all or some sections) export const ServerBackupsCard: React.FC = () => { const [files, setFiles] = useState([]); const [open, setOpen] = useState(null); // backup being restored const [mode, setMode] = useState<'merge' | 'restore'>('restore'); const [sections, setSections] = useState(DATA_SECTIONS.map((s) => s.id)); const [confirm, setConfirm] = useState(false); const [busy, setBusy] = useState(false); const [error, setError] = useState(null); const [result, setResult] = useState(null); useEffect(() => { api.listMyBackups().then(setFiles).catch(() => {}); }, []); const startRestore = (name: string) => { setOpen(open === name ? null : name); setConfirm(false); setError(null); setResult(null); }; const restore = async () => { if (!open) return; setBusy(true); setError(null); try { setResult(await api.restoreMyBackup(open, mode, sections)); setConfirm(false); } catch (err: any) { setError(err.message || 'Wiederherstellen fehlgeschlagen'); } finally { setBusy(false); } }; const sectionNames = DATA_SECTIONS.filter((s) => sections.includes(s.id)) .map((s) => s.label) .join(', '); return (

Server-Backups

Automatische tägliche Sicherungen deiner Daten auf dem Server (falls die Administration sie eingeschaltet hat).

{files.length === 0 ? (

Noch keine Server-Backups vorhanden.

) : ( files.map((f) => (

{new Date(f.createdAt).toLocaleString('de-DE')}

{formatBytes(f.size)}

{open === f.name && (
{( [ ['restore', 'Ersetzen', 'Gewählte Bereiche vorher leeren.'], ['merge', 'Hinzufügen', 'Bestehendes behalten, Backup daneben anlegen.'], ] as const ).map(([value, label, text]) => ( ))}
{result ? (

Wiederhergestellt: {result.notes} Notizen, {result.tasks} Aufgaben, {result.lists} Listen,{' '} {result.inbox} Gedanken, {result.themes ?? 0} Themes.

) : ( )} {error &&

{error}

}
)}
)) )}
); };