'use client' import { useState, useEffect } from 'react' import { getBackups, deleteBackup } from '@/lib/backup-storage' import { RecallBackup } from '@/types/backup' import { Button } from '@/components/ui/button' import { Badge } from '@/components/ui/badge' import { toast } from 'sonner' import { Trash2, RotateCcw, Calendar, FileText } from 'lucide-react' import { BackupRestoreDialog } from './backup-restore-dialog' export function BackupList() { const [backups, setBackups] = useState([]) const [loading, setLoading] = useState(true) const [deletingId, setDeletingId] = useState(null) useEffect(() => { loadBackups() }, []) async function loadBackups() { try { const data = await getBackups() setBackups(data) } catch { toast.error('Error al cargar los backups') } finally { setLoading(false) } } async function handleDelete(id: string) { setDeletingId(id) try { await deleteBackup(id) setBackups((prev) => prev.filter((b) => b.id !== id)) toast.success('Backup eliminado') } catch { toast.error('Error al eliminar el backup') } finally { setDeletingId(null) } } function formatDate(dateStr: string) { return new Date(dateStr).toLocaleString('es-ES', { dateStyle: 'medium', timeStyle: 'short', }) } function getSourceBadgeVariant(source: RecallBackup['source']) { switch (source) { case 'automatic': return 'secondary' case 'manual': return 'default' case 'pre-destructive': return 'destructive' default: return 'secondary' } } function getSourceLabel(source: RecallBackup['source']) { switch (source) { case 'automatic': return 'Automático' case 'manual': return 'Manual' case 'pre-destructive': return 'Pre-destrucción' default: return source } } if (loading) { return
Cargando backups...
} if (backups.length === 0) { return (
No hay backups disponibles. Los backups se crean automáticamente antes de operaciones destructivas.
) } return (
{backups.map((backup) => (
{formatDate(backup.createdAt)} {getSourceLabel(backup.source)}
{backup.metadata.noteCount} nota{backup.metadata.noteCount !== 1 ? 's' : ''} {backup.metadata.tagCount} tag{backup.metadata.tagCount !== 1 ? 's' : ''}
Restaurar } />
))}
) }