-
- {versions.map((v) => (
-
handleSelectVersion(v.version_number)}
- >
-
-
-
Version {v.version_number}
- {v.created_at && (
-
- {new Date(v.created_at).toLocaleString()}
-
- )}
- {v.title && (
-
- {v.title}
-
- )}
-
-
-
-
- ))}
-
+ const selectedVersionData = versions.find((v) => v.version_number === selectedVersion);
- {selectedVersion !== null && (
-
-
- Preview — Version {selectedVersion}
-
- {contentLoading ? (
-
-
-
- ) : (
-
- {versionContent || "(empty)"}
-
- )}
+ return (
+ <>
+ {/* Left panel — version list */}
+
+
+
+ {versions.map((v) => (
+
+ ))}
+
+
+
+
+ {/* Right panel — content preview */}
+
+ {selectedVersion !== null && selectedVersionData ? (
+ <>
+
+
+ {selectedVersionData.title || `Version ${selectedVersion}`}
+
+
+
+
+
+
+
+
+ {contentLoading ? (
+
+
+
+ ) : (
+
+ {versionContent || "(empty)"}
+
+ )}
+
+ >
+ ) : (
+
+
Select a version to preview
+
+ )}
+
+ >
);
}
diff --git a/surfsense_web/components/layout/ui/sidebar/DocumentsSidebar.tsx b/surfsense_web/components/layout/ui/sidebar/DocumentsSidebar.tsx
index 7aa518361..031390c9e 100644
--- a/surfsense_web/components/layout/ui/sidebar/DocumentsSidebar.tsx
+++ b/surfsense_web/components/layout/ui/sidebar/DocumentsSidebar.tsx
@@ -21,6 +21,7 @@ import type { DocumentNodeDoc } from "@/components/documents/DocumentNode";
import type { FolderDisplay } from "@/components/documents/FolderNode";
import { FolderPickerDialog } from "@/components/documents/FolderPickerDialog";
import { FolderTreeView } from "@/components/documents/FolderTreeView";
+import { VersionHistoryDialog } from "@/components/documents/version-history";
import { JsonMetadataViewer } from "@/components/json-metadata-viewer";
import { EXPORT_FILE_EXTENSIONS } from "@/components/shared/ExportMenuItems";
import {
@@ -579,6 +580,7 @@ export function DocumentsSidebar({
const [bulkDeleteConfirmOpen, setBulkDeleteConfirmOpen] = useState(false);
const [isBulkDeleting, setIsBulkDeleting] = useState(false);
+ const [versionDocId, setVersionDocId] = useState
(null);
const handleBulkDeleteSelected = useCallback(async () => {
if (deletableSelectedIds.length === 0) return;
@@ -826,6 +828,7 @@ export function DocumentsSidebar({
onDeleteDocument={(doc) => handleDeleteDocument(doc.id)}
onMoveDocument={handleMoveDocument}
onExportDocument={handleExportDocument}
+ onVersionHistory={(doc) => setVersionDocId(doc.id)}
activeTypes={activeTypes}
onDropIntoFolder={handleDropIntoFolder}
onReorderFolder={handleReorderFolder}
@@ -850,6 +853,14 @@ export function DocumentsSidebar({
}}
/>
+ {versionDocId !== null && (
+ { if (!open) setVersionDocId(null); }}
+ documentId={versionDocId}
+ />
+ )}
+