import { useState } from "react"; import { Dialog, DialogContent, DialogHeader, DialogTitle, DialogDescription } from "@/components/ui/dialog"; import { Button } from "@/components/ui/button"; import { Input } from "@/components/ui/input"; import { Label } from "@/components/ui/label"; import { Tabs, TabsContent, TabsList, TabsTrigger } from "@/components/ui/tabs"; import { Badge } from "@/components/ui/badge"; import { Alert, AlertDescription } from "@/components/ui/alert"; import { Download, Upload, FileJson, FileSpreadsheet, AlertCircle, CheckCircle } from "lucide-react"; import { Note } from "@/services/NotesService"; import { Todo } from "@/services/TodosService"; import { exportToJSON, downloadBackup, downloadCSV, exportNotesToCSV, parseBackupJSON, readFileAsText, getBackupStats, type BackupData } from "@/utils/exportImport"; import { showSuccess, showError } from "@/utils/toast"; interface ExportImportModalProps { open: boolean; onOpenChange: (open: boolean) => void; notes: Note[]; todos: Todo[]; settings?: Record; onImport?: (backup: BackupData) => Promise; } export function ExportImportModal({ open, onOpenChange, notes, todos, settings, onImport }: ExportImportModalProps) { const [importing, setImporting] = useState(false); const [importFile, setImportFile] = useState(null); const [previewData, setPreviewData] = useState(null); const handleExportJSON = async () => { try { const jsonData = await exportToJSON(notes, todos, settings); downloadBackup(jsonData); showSuccess('Backup exporté avec succès'); } catch (error) { showError('Erreur lors de l\'export'); } }; const handleExportCSV = () => { try { const csvData = exportNotesToCSV(notes); downloadCSV(csvData); showSuccess('CSV exporté avec succès'); } catch (error) { showError('Erreur lors de l\'export CSV'); } }; const handleFileSelect = async (e: React.ChangeEvent) => { const file = e.target.files?.[0]; if (!file) return; setImportFile(file); try { const content = await readFileAsText(file); const backup = parseBackupJSON(content); if (backup) { setPreviewData(backup); } else { showError('Fichier de backup invalide'); setImportFile(null); } } catch (error) { showError('Erreur lors de la lecture du fichier'); setImportFile(null); } }; const handleImport = async () => { if (!previewData || !onImport) return; setImporting(true); try { await onImport(previewData); showSuccess('Données importées avec succès'); setImportFile(null); setPreviewData(null); onOpenChange(false); } catch (error) { showError('Erreur lors de l\'import'); } finally { setImporting(false); } }; const stats = notes.length > 0 ? { notesCount: notes.length, archivedCount: notes.filter(n => n.archived).length, priorityCount: notes.filter(n => n.priority).length, todosCount: todos.length, tagsCount: new Set(notes.flatMap(n => n.tags?.map(t => t.name) || [])).size } : null; const previewStats = previewData ? getBackupStats(previewData) : null; return ( Export / Import Exportez ou importez toutes vos données Export Import {/* Current Data Stats */} {stats && (
{stats.notesCount}
Notes
{stats.todosCount}
Tâches
{stats.tagsCount}
Tags
)} {/* Export Options */}

Inclut toutes les notes, tâches, tags, et paramètres

Tableau des notes pour Excel ou Google Sheets

Les fichiers seront téléchargés dans votre dossier de téléchargements
{/* File Upload */}
{/* Preview */} {previewData && previewStats && (
Backup valide {previewData.version}
{previewStats.notesCount}
Notes
{previewStats.todosCount}
Tâches
{previewStats.tagsCount}
Tags
Créé le {new Date(previewData.exportDate).toLocaleDateString('fr-FR')} {!onImport && (

La fonction d'import n'est pas disponible

)}
)} {!previewData && !importFile && (

Sélectionnez un fichier de backup pour commencer

)}
); }