feat: Replaced document preview with a new fullscreen viewer

This commit is contained in:
2025-12-11 00:44:11 +01:00
parent f6bd6e2feb
commit e8636ce7da
15 changed files with 177 additions and 173 deletions
+26 -26
View File
@@ -12,14 +12,14 @@ type EnsureAssetUrl = (
asset: unknown,
options?: Record<string, unknown>,
) => Promise<unknown> | void;
type EnsurePreviewData = (docId: Identifier, options?: Record<string, unknown>) => Promise<unknown>;
type EnsureViewerData = (docId: Identifier, options?: Record<string, unknown>) => Promise<unknown>;
type GetDocumentAsset = (document: unknown, assetType: string) => unknown;
type NotifyApiError = (error: unknown, fallbackMessage?: string) => void;
type DocumentsTableProps = ComponentProps<typeof DocumentsPanel> | null;
type DetailPanelProps = (ComponentProps<typeof DocumentViewerPanel> & {
onClose?: () => void;
onOpenPreview?: (args: { documentIds: Array<string> }) => void;
onOpenViewer?: (args: { documentIds: Array<string> }) => void;
folderNodes?: Map<Identifier | 'root', unknown>;
ensureFolderData?: (
folderId: Identifier | 'root',
@@ -35,13 +35,13 @@ export interface UseWorkspaceSurfaceArgs {
documentsTableProps?: DocumentsTableProps;
detailPanelProps?: DetailPanelProps;
detailPanelOpen?: boolean;
previewWorkspaceDocument?: unknown;
previewDocumentId?: Identifier | null;
viewerWorkspaceDocument?: unknown;
viewerDocumentId?: Identifier | null;
ensureAssetUrl?: EnsureAssetUrl;
ensurePreviewData?: EnsurePreviewData;
ensureViewerData?: EnsureViewerData;
getDocumentAsset?: GetDocumentAsset;
notifyApiError?: NotifyApiError;
closeDocumentPreview?: () => void;
closeDocumentViewer?: () => void;
}
interface UseWorkspaceSurfaceResult {
@@ -54,13 +54,13 @@ export const useWorkspaceSurface = ({
documentsTableProps,
detailPanelProps,
detailPanelOpen = false,
previewWorkspaceDocument,
previewDocumentId,
viewerWorkspaceDocument,
viewerDocumentId,
ensureAssetUrl,
ensurePreviewData,
ensureViewerData,
getDocumentAsset,
notifyApiError,
closeDocumentPreview,
closeDocumentViewer,
}: UseWorkspaceSurfaceArgs): UseWorkspaceSurfaceResult => {
const { registerDetailCloseHandler, setDetailActive } = usePanelManager();
@@ -118,7 +118,7 @@ export const useWorkspaceSurface = ({
? (() => {
const {
onClose,
onOpenPreview,
onOpenViewer,
tags: tagOptions,
folderNodes,
ensureFolderData,
@@ -129,7 +129,7 @@ export const useWorkspaceSurface = ({
variant="sidebar"
sidebarMode={sidebarMode}
onClose={onClose}
onMaximize={onOpenPreview}
onMaximize={onOpenViewer}
tagOptions={tagOptions}
{...restDetailProps}
/>
@@ -164,10 +164,10 @@ export const useWorkspaceSurface = ({
detailPanelProps,
]);
const showPreviewWorkspace = Boolean(previewDocumentId);
const showViewerWorkspace = Boolean(viewerDocumentId);
const previewSurface = useMemo<WorkspaceSurface>(() => {
if (!showPreviewWorkspace) {
const viewerSurface = useMemo<WorkspaceSurface>(() => {
if (!showViewerWorkspace) {
return null;
}
@@ -191,8 +191,8 @@ export const useWorkspaceSurface = ({
const viewer = (
<DocumentViewerPanel
document={previewWorkspaceDocument || null}
hydrateDocument={ensurePreviewData}
document={viewerWorkspaceDocument || null}
hydrateDocument={ensureViewerData}
tagLookupById={tagLookupById}
tagOptions={tagOptions}
onTagAdd={onTagAdd}
@@ -205,10 +205,10 @@ export const useWorkspaceSurface = ({
onUpdateIssued={onUpdateIssued}
ensureAssetUrl={ensureAssetUrl}
getDocumentAsset={getDocumentAsset}
ensurePreviewData={ensurePreviewData}
ensurePreviewData={ensureViewerData}
notifyApiError={notifyApiError}
sidebarToggle={sidebarToggle}
onClose={closeDocumentPreview}
onClose={closeDocumentViewer}
resolveFolderPath={resolveFolderPath}
/>
);
@@ -223,23 +223,23 @@ export const useWorkspaceSurface = ({
return { content, detail: null, detailMode: null };
}, [
showPreviewWorkspace,
previewWorkspaceDocument,
ensurePreviewData,
showViewerWorkspace,
viewerWorkspaceDocument,
ensureViewerData,
ensureAssetUrl,
getDocumentAsset,
notifyApiError,
renderSidebarToggle,
closeDocumentPreview,
closeDocumentViewer,
detailPanelProps,
]);
const surface = useMemo<WorkspaceSurface>(() => {
if (showPreviewWorkspace) {
return previewSurface;
if (showViewerWorkspace) {
return viewerSurface;
}
return documentsSurface;
}, [showPreviewWorkspace, previewSurface, documentsSurface]);
}, [showViewerWorkspace, viewerSurface, documentsSurface]);
return { surface };
};