import { useState, useEffect } from "react"; import { formatDistanceToNow } from "date-fns"; import { OverlayScrollbarsComponent } from "overlayscrollbars-react"; import { Dialog, DialogContent, DialogHeader, DialogTitle, DialogDescription, DialogFooter, } from "@/components/ui/dialog"; import { Button } from "@/components/ui/button"; import { listBackups, restoreBackupFile, saveBoard, type BackupEntry } from "@/lib/storage"; import { useBoardStore } from "@/stores/board-store"; interface VersionHistoryDialogProps { open: boolean; onOpenChange: (open: boolean) => void; } export function VersionHistoryDialog({ open, onOpenChange }: VersionHistoryDialogProps) { const board = useBoardStore((s) => s.board); const [backups, setBackups] = useState([]); const [confirmRestore, setConfirmRestore] = useState(null); useEffect(() => { if (open && board) { listBackups(board.id).then(setBackups); } }, [open, board]); async function handleRestore(backup: BackupEntry) { if (!board) return; // Back up current state before restoring await saveBoard(board); const restored = await restoreBackupFile(board.id, backup.filename); await saveBoard(restored); // Reload await useBoardStore.getState().openBoard(board.id); setConfirmRestore(null); onOpenChange(false); } return ( <> Version History Browse and restore previous versions of this board. {backups.length > 0 ? (
{backups.map((backup) => (
{formatDistanceToNow(new Date(backup.timestamp), { addSuffix: true })} {backup.cardCount} cards, {backup.columnCount} columns
))}
) : (

No backups yet. Backups are created automatically as you work.

)}
{/* Restore confirmation */} setConfirmRestore(null)}> Restore Version This will replace the current board with the selected version. Your current state will be backed up first. ); }