import { useCallback, useMemo, useRef } from 'react'; import type { JSX } from 'react'; import DocumentInfoPanel from './components/DocumentInfoPanel'; import UnifiedDocumentViewer from './UnifiedDocumentViewer'; import { resolveDocumentDownloadHref } from '../documents/documentActions'; import type { Document } from '../types/documents'; interface ContentTabConfig { id?: string; label?: string; enabled?: boolean; forceDisplay?: boolean; loadContent?: (options?: { signal?: AbortSignal }) => unknown | Promise; loadingMessage?: string; emptyMessage?: string; unavailableMessage?: string; errorMessage?: string; [key: string]: unknown; } type LayoutMode = 'split' | 'stacked' | (string & {}); interface DocumentViewerLayoutProps { document?: Document | null; summaryProps?: Record; metadataPayload?: unknown; contentTabConfig?: ContentTabConfig | null; resetKey?: string | null; classNamePrefix?: string; defaultTabId?: string; infoPanelProps?: Record; previewLoadingMessage?: string; layoutMode?: LayoutMode; } const DocumentViewerLayout = ({ document, summaryProps = {}, metadataPayload, contentTabConfig, resetKey, classNamePrefix = 'document-viewer', defaultTabId = 'details', infoPanelProps = {}, previewLoadingMessage = 'Preparing preview…', layoutMode = 'split', }: DocumentViewerLayoutProps): JSX.Element => { const isStacked = layoutMode === 'stacked'; const viewportRef = useRef(null); const previewContent = useMemo(() => ( ), [document, viewportRef]); const renderViewportPane = useCallback(() => (
{!resolveDocumentDownloadHref(document) ? (
{previewLoadingMessage}
) : ( previewContent )}
), [previewContent, document, previewLoadingMessage, viewportRef]); const viewportPane = renderViewportPane(); const stackedLeadingTabs = useMemo(() => ( isStacked ? [ { id: 'preview', label: 'Preview', render: () => renderViewportPane(), }, ] : [] ), [isStacked, renderViewportPane]); const resolvedDefaultTabId = isStacked ? 'preview' : defaultTabId; const summaryPlacement = 'tabs'; const tabsPlacement = 'bottom'; const summaryLayout = 'compact'; const detailsPane = (
); if (isStacked) { return detailsPane; } return ( <> {detailsPane} {viewportPane} ); }; export default DocumentViewerLayout;