Skip to content

Commit 82c4c58

Browse files
committed
fix(files): tighten streaming preview invariant and component consistency
- Apply structural invariant to PDF streaming path: never surface errors while streamingContent is defined; only log at info level - Remove redundant setRenderError(null) from DOCX streaming effect — the gate at the display layer already suppresses errors during streaming - Wrap PptxPreview in memo for consistency with DocxPreview - Add key={file.id} to PptxPreview mount site (was missing, DocxPreview had it) so the component resets when the viewed file changes - Fix --text-body → --text-primary across PreviewError, UnsupportedPreview, and MermaidDiagram error label; --text-body is not a valid EMCN token
1 parent 0b607ab commit 82c4c58

5 files changed

Lines changed: 20 additions & 21 deletions

File tree

apps/sim/app/workspace/[workspaceId]/files/components/file-viewer/docx-preview.tsx

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -89,7 +89,6 @@ export const DocxPreview = memo(function DocxPreview({
8989

9090
try {
9191
setRendering(true)
92-
setRenderError(null)
9392

9493
const response = await fetch(`/api/workspaces/${workspaceId}/docx/preview`, {
9594
method: 'POST',

apps/sim/app/workspace/[workspaceId]/files/components/file-viewer/file-viewer.tsx

Lines changed: 13 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -18,12 +18,7 @@ import { ImagePreview } from './image-preview'
1818
import type { PdfDocumentSource } from './pdf-viewer'
1919
import { PptxPreview } from './pptx-preview'
2020
import { resolvePreviewType } from './preview-panel'
21-
import {
22-
PDF_PAGE_SKELETON,
23-
PreviewError,
24-
resolvePreviewError,
25-
shouldSuppressStreamingDocumentError,
26-
} from './preview-shared'
21+
import { PDF_PAGE_SKELETON, PreviewError, resolvePreviewError } from './preview-shared'
2722
import { TextEditor } from './text-editor'
2823
import { XlsxPreview } from './xlsx-preview'
2924

@@ -128,7 +123,14 @@ export function FileViewer({
128123
}
129124

130125
if (category === 'pptx-previewable') {
131-
return <PptxPreview file={file} workspaceId={workspaceId} streamingContent={streamingContent} />
126+
return (
127+
<PptxPreview
128+
key={file.id}
129+
file={file}
130+
workspaceId={workspaceId}
131+
streamingContent={streamingContent}
132+
/>
133+
)
132134
}
133135

134136
if (category === 'xlsx-previewable') {
@@ -196,12 +198,7 @@ const IframePreview = memo(function IframePreview({
196198
} catch (err) {
197199
if (!cancelled && !(err instanceof DOMException && err.name === 'AbortError')) {
198200
const msg = toError(err).message || 'Failed to render PDF'
199-
if (streamingBufferRef.current || shouldSuppressStreamingDocumentError(msg)) {
200-
logger.info('Suppressing transient PDF streaming preview error', { error: msg })
201-
} else {
202-
logger.error('PDF render failed', { error: msg })
203-
setRenderError(msg)
204-
}
201+
logger.info('Transient PDF streaming preview error (suppressed)', { error: msg })
205202
}
206203
} finally {
207204
if (!cancelled) setRendering(false)
@@ -228,7 +225,8 @@ const IframePreview = memo(function IframePreview({
228225
[streamingBuffer]
229226
)
230227

231-
if (renderError) return <PreviewError label='PDF' error={renderError} />
228+
if (streamingContent === undefined && renderError)
229+
return <PreviewError label='PDF' error={renderError} />
232230

233231
if (streamingContent !== undefined) {
234232
if (!streamingSource) {
@@ -361,7 +359,7 @@ const UnsupportedPreview = memo(function UnsupportedPreview({
361359

362360
return (
363361
<div className='flex flex-1 flex-col items-center justify-center gap-[8px]'>
364-
<p className='font-medium text-[14px] text-[var(--text-body)]'>
362+
<p className='font-medium text-[14px] text-[var(--text-primary)]'>
365363
Preview not available{ext ? ` for .${ext} files` : ' for this file'}
366364
</p>
367365
<p className='text-[13px] text-[var(--text-muted)]'>

apps/sim/app/workspace/[workspaceId]/files/components/file-viewer/pptx-preview.tsx

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
'use client'
22

3-
import { useEffect, useState } from 'react'
3+
import { memo, useEffect, useState } from 'react'
44
import { createLogger } from '@sim/logger'
55
import { toError } from '@sim/utils/errors'
66
import { Skeleton } from '@/components/emcn'
@@ -123,7 +123,7 @@ async function getPptxRenderSize(
123123
}
124124
}
125125

126-
export function PptxPreview({
126+
export const PptxPreview = memo(function PptxPreview({
127127
file,
128128
workspaceId,
129129
streamingContent,
@@ -269,4 +269,4 @@ export function PptxPreview({
269269
</div>
270270
</div>
271271
)
272-
}
272+
})

apps/sim/app/workspace/[workspaceId]/files/components/file-viewer/preview-panel.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -291,7 +291,7 @@ const MermaidDiagram = memo(function MermaidDiagram({ definition }: { definition
291291
if (error) {
292292
return (
293293
<div className='my-4 rounded-lg border border-[var(--border)] p-4 text-[13px] text-[var(--text-muted)]'>
294-
<span className='font-medium text-[var(--text-body)]'>Diagram error: </span>
294+
<span className='font-medium text-[var(--text-primary)]'>Diagram error: </span>
295295
{error}
296296
</div>
297297
)

apps/sim/app/workspace/[workspaceId]/files/components/file-viewer/preview-shared.tsx

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,9 @@ import { Skeleton } from '@/components/emcn'
55
export function PreviewError({ label, error }: { label: string; error: string }) {
66
return (
77
<div className='flex flex-1 flex-col items-center justify-center gap-[8px]'>
8-
<p className='font-medium text-[14px] text-[var(--text-body)]'>Failed to preview {label}</p>
8+
<p className='font-medium text-[14px] text-[var(--text-primary)]'>
9+
Failed to preview {label}
10+
</p>
911
<p className='text-[13px] text-[var(--text-muted)]'>{error}</p>
1012
</div>
1113
)

0 commit comments

Comments
 (0)