import React, { useCallback, useMemo } from 'react'; import { SidebarExpandIcon } from '../ui/icons'; import { createDocumentsSurface } from '../documents/DocumentsPanel'; import { createDocumentViewerSurface } from '../preview/DocumentViewerPanel'; import createDesktopSurface from '../desktop/createDesktopSurface'; export const useWorkspaceSurface = ({ sidebarCollapsed, onExpandSidebar, documentsTableProps, detailPanelProps, detailPanelOpen, viewMode, deskWorkspaceProps, previewWorkspaceDocument, previewWorkspaceEntry, previewDocumentId, ensureAssetUrl, ensurePreviewData, getDocumentAsset, resolveApiPath, notifyApiError, closeDocumentPreview, parentBreadcrumb, onNavigateParent, }) => { const renderSidebarToggle = useCallback(() => { if (!sidebarCollapsed) { return null; } return ( ); }, [sidebarCollapsed, onExpandSidebar]); const documentsSurface = useMemo(() => { if (!documentsTableProps) { return null; } return createDocumentsSurface({ tableProps: documentsTableProps, parentBreadcrumb, onNavigateParent: parentBreadcrumb ? onNavigateParent : null, renderSidebarToggle, detailProps: detailPanelProps, detailOpen: detailPanelOpen, }); }, [ documentsTableProps, parentBreadcrumb, onNavigateParent, renderSidebarToggle, detailPanelProps, detailPanelOpen, ]); const showPreviewWorkspace = Boolean(previewDocumentId); const previewSurface = useMemo(() => { if (!showPreviewWorkspace) { return null; } const detailExtras = detailPanelProps || {}; const { tagLookupById, tags: tagOptions, onTagAdd, onTagRemove, correspondents, onCorrespondentAdd, onCorrespondentRemove, onUpdateTitle, onUpdateIssued, resolveFolderPath, onFolderNavigate, } = detailExtras; return createDocumentViewerSurface({ document: previewWorkspaceDocument, previewEntry: previewWorkspaceEntry, ensureAssetUrl, ensurePreviewData, getDocumentAsset, resolveApiPath, notifyApiError, onClose: closeDocumentPreview, renderSidebarToggle, tagLookupById, tagOptions, onTagAdd, onTagRemove, correspondents, onCorrespondentAdd, onCorrespondentRemove, onUpdateTitle, onUpdateIssued, resolveFolderPath, onFolderNavigate, }); }, [ showPreviewWorkspace, previewWorkspaceDocument, previewWorkspaceEntry, ensureAssetUrl, ensurePreviewData, getDocumentAsset, resolveApiPath, notifyApiError, closeDocumentPreview, renderSidebarToggle, detailPanelProps, ]); const workspaceSurface = useMemo(() => { if (viewMode !== 'desk') { return null; } return createDesktopSurface({ workspaceProps: deskWorkspaceProps, renderSidebarToggle, parentBreadcrumb, onNavigateParent: parentBreadcrumb ? onNavigateParent : null, detailProps: detailPanelProps, detailOpen: detailPanelOpen, }); }, [ viewMode, deskWorkspaceProps, renderSidebarToggle, parentBreadcrumb, onNavigateParent, detailPanelProps, detailPanelOpen, ]); const surface = useMemo(() => { if (showPreviewWorkspace) { return previewSurface; } if (viewMode === 'desk') { return workspaceSurface; } return documentsSurface; }, [showPreviewWorkspace, viewMode, previewSurface, workspaceSurface, documentsSurface]); return { surface }; };