import React, { useState, useEffect } from "react"; import { X, Loader2, History } from "lucide-react"; import { formatDistanceToNow } from "date-fns"; import type { AnnotationItem, EditHistoryItem } from "../../types"; interface EditHistoryModalProps { isOpen: boolean; onClose: () => void; item: AnnotationItem; } export default function EditHistoryModal({ isOpen, onClose, item, }: EditHistoryModalProps) { const [history, setHistory] = useState([]); const [loading, setLoading] = useState(false); const [error, setError] = useState(null); useEffect(() => { const fetchHistory = async () => { if (!item.uri) return; try { setLoading(true); setError(null); const res = await fetch( `/api/annotations/history?uri=${encodeURIComponent(item.uri)}`, ); if (!res.ok) throw new Error("Failed to fetch history"); const data = await res.json(); setHistory(data); } catch (err) { console.error(err); setError("Failed to load edit history"); } finally { setLoading(false); } }; if (isOpen && item.uri) { fetchHistory(); document.body.style.overflow = "hidden"; } return () => { document.body.style.overflow = "unset"; }; }, [isOpen, item.uri]); if (!isOpen) return null; return (
e.stopPropagation()} >

Edit History

{loading ? (
) : error ? (
{error}
) : history.length === 0 ? (
No edit history found.
) : (
Current Version {item.editedAt ? `Edited ${formatDistanceToNow(new Date(item.editedAt))} ago` : `Posted ${formatDistanceToNow(new Date(item.createdAt))} ago`}
{item.text || item.body?.value}
{history.map((edit, index) => (
Previous Version {formatDistanceToNow(new Date(edit.editedAt))} ago
{edit.previousContent}
))}
)}
); }