diff --git a/frontend/src/desktop/createDesktopSurface.js b/frontend/src/desktop/createDesktopSurface.js index 067b525..0ca4a33 100644 --- a/frontend/src/desktop/createDesktopSurface.js +++ b/frontend/src/desktop/createDesktopSurface.js @@ -83,12 +83,17 @@ const createDesktopSurface = ({ const sidebarToggle = renderSidebarToggle ? renderSidebarToggle() : null; const detail = detailOpen && detailProps - ? ( - - ) + ? (() => { + const { onClose, onOpenPreview, ...restDetailProps } = detailProps; + return ( + + ); + })() : null; const surfaceConfig = createWorkspaceSurfaceConfig({ key: 'workspace', diff --git a/frontend/src/detail/useDetailWorkspace.js b/frontend/src/detail/useDetailWorkspace.js index e5212ef..d802857 100644 --- a/frontend/src/detail/useDetailWorkspace.js +++ b/frontend/src/detail/useDetailWorkspace.js @@ -237,7 +237,7 @@ const useDetailWorkspace = ({ onUpdateIssued: handleDocumentIssuedUpdate, ensureAssetUrl, getDocumentAsset, - hydrateDocument: ensurePreviewData, + hydrateDocument: ensurePreviewData, correspondents, onCorrespondentAdd: handleCorrespondentAdd, onCorrespondentRemove: handleCorrespondentRemove, diff --git a/frontend/src/documents/panel/createDocumentsSurface.js b/frontend/src/documents/panel/createDocumentsSurface.js index e14f2ea..794e2f4 100644 --- a/frontend/src/documents/panel/createDocumentsSurface.js +++ b/frontend/src/documents/panel/createDocumentsSurface.js @@ -92,12 +92,17 @@ const createDocumentsSurface = ({ const sidebarToggle = renderSidebarToggle ? renderSidebarToggle() : null; const detail = detailOpen && detailProps - ? ( - - ) + ? (() => { + const { onClose, onOpenPreview, ...restDetailProps } = detailProps; + return ( + + ); + })() : null; return createWorkspaceSurfaceConfig({ diff --git a/frontend/src/preview/DocumentViewerPanel.jsx b/frontend/src/preview/DocumentViewerPanel.jsx index 74d02d9..8a5cb61 100644 --- a/frontend/src/preview/DocumentViewerPanel.jsx +++ b/frontend/src/preview/DocumentViewerPanel.jsx @@ -6,7 +6,13 @@ import React, { useState, } from 'react'; import { useNavigate } from 'react-router-dom'; -import { DownloadIcon, CloseIcon, IconZoomInArea } from '../ui/icons'; +import { + DownloadIcon, + CloseIcon, + IconZoomInArea, + DetailPanelCollapseIcon, + WindowMaximizeIcon, +} from '../ui/icons'; import PreviewZoomOverlay from '../detail/PreviewZoomOverlay'; import { buildCorrespondentOptions, @@ -79,7 +85,6 @@ const DocumentViewerPanel = ({ onCorrespondentRemove, onUpdateTitle, onUpdateIssued, - hasOcr = false, ensureAssetUrl, getDocumentAsset, ensurePreviewData, @@ -88,8 +93,12 @@ const DocumentViewerPanel = ({ sidebarToggle = null, onClosePanel, resolveFolderPath, + variant = 'viewer', + onCollapsePanel, + onMaximizePanel, }) => { const navigate = useNavigate(); + const isSidebarVariant = variant === 'sidebar'; const sortedCorrespondents = useMemo( () => sortCorrespondents(document?.correspondents || []), [document], @@ -105,6 +114,13 @@ const DocumentViewerPanel = ({ [document], ); + const hasOcr = useMemo(() => { + if (!document || typeof getDocumentAsset !== 'function') { + return false; + } + return Boolean(getDocumentAsset(document, 'ocr-text')); + }, [document, getDocumentAsset]); + const summaryProps = useMemo( () => ({ tagLookupById, @@ -331,7 +347,38 @@ const DocumentViewerPanel = ({ canZoom: Boolean(zoomDisplay), }); - const closeButton = onClosePanel + const collapseButton = isSidebarVariant && typeof onCollapsePanel === 'function' + ? ( + + ) + : null; + + const maximizeButton = isSidebarVariant && typeof onMaximizePanel === 'function' + ? ( + + ) + : null; + + const closeButton = !isSidebarVariant && onClosePanel ? (