'use client'; import { useState } from 'react'; import { Download, Upload, FileText, AlertCircle, CheckCircle } from 'lucide-react'; import { useToast } from '@/components/Toast'; interface ImportResult { success: boolean; message: string; results: { imported: number; skipped: number; errors: string[]; }; } export default function ImportExport() { const [isExporting, setIsExporting] = useState(false); const [isImporting, setIsImporting] = useState(false); const [importResult, setImportResult] = useState(null); const { addToast } = useToast(); const handleExport = async () => { setIsExporting(true); try { const response = await fetch('/api/projects/export'); if (!response.ok) throw new Error('Export failed'); const blob = await response.blob(); const url = window.URL.createObjectURL(blob); const a = document.createElement('a'); a.href = url; a.download = `portfolio-projects-${new Date().toISOString().split('T')[0]}.json`; document.body.appendChild(a); a.click(); window.URL.revokeObjectURL(url); document.body.removeChild(a); addToast({ type: 'success', title: 'Export erfolgreich', message: 'Projekte wurden erfolgreich exportiert' }); } catch (error) { addToast({ type: 'error', title: 'Export fehlgeschlagen', message: 'Fehler beim Exportieren der Projekte' }); } finally { setIsExporting(false); } }; const handleImport = async (event: React.ChangeEvent) => { const file = event.target.files?.[0]; if (!file) return; setIsImporting(true); setImportResult(null); try { const text = await file.text(); const data = JSON.parse(text); const response = await fetch('/api/projects/import', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify(data) }); const result: ImportResult = await response.json(); setImportResult(result); if (result.success) { addToast({ type: 'success', title: 'Import erfolgreich', message: result.message }); } else { addToast({ type: 'error', title: 'Import fehlgeschlagen', message: result.message }); } } catch (error) { addToast({ type: 'error', title: 'Import fehlgeschlagen', message: 'Ungültige Datei oder Format' }); } finally { setIsImporting(false); // Reset file input event.target.value = ''; } }; return (

Import & Export

{/* Export Section */}

Export Projekte

Alle Projekte als JSON-Datei herunterladen

{/* Import Section */}

Import Projekte

JSON-Datei mit Projekten hochladen

{/* Import Results */} {importResult && (

{importResult.success ? ( ) : ( )} Import Ergebnis

Importiert: {importResult.results.imported}

Übersprungen: {importResult.results.skipped}

{importResult.results.errors.length > 0 && (

Fehler:

    {importResult.results.errors.map((error, index) => (
  • {error}
  • ))}
)}
)}
); }