import React, { useCallback, useEffect, useMemo } from 'react'; import { SidebarExpandIcon } from '../ui/icons'; import { createDocumentsSurface } from '../documents/DocumentsPanel'; import { createDocumentViewerSurface } from '../preview/DocumentViewerPanel'; import createDesktopSurface from '../desktop/createDesktopSurface'; import { usePanelManager } from './PanelManagerContext'; export const useWorkspaceSurface = ({ sidebarHidden, onExpandSidebar, documentsTableProps, detailPanelProps, detailPanelOpen, viewMode, deskWorkspaceProps, previewWorkspaceDocument, previewWorkspaceEntry, previewDocumentId, ensureAssetUrl, ensurePreviewData, getDocumentAsset, resolveApiPath, notifyApiError, closeDocumentPreview, parentBreadcrumb, onNavigateParent, }) => { const { registerDetailCloseHandler, setDetailActive } = usePanelManager(); useEffect(() => { const handler = detailPanelProps?.onClose || null; registerDetailCloseHandler(handler); return () => registerDetailCloseHandler(null); }, [registerDetailCloseHandler, detailPanelProps?.onClose]); useEffect(() => { setDetailActive(Boolean(detailPanelOpen)); return () => setDetailActive(false); }, [detailPanelOpen, setDetailActive]); const renderSidebarToggle = useCallback(() => { if (!sidebarHidden) { return null; } return ( ); }, [sidebarHidden, 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 }; };