Skip to content

Commit c32360f

Browse files
committed
fix(files): suppress transient streaming preview errors for docx and pptx
1 parent e2ded16 commit c32360f

3 files changed

Lines changed: 8 additions & 56 deletions

File tree

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

Lines changed: 4 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -6,12 +6,7 @@ import { toError } from '@sim/utils/errors'
66
import { cn } from '@/lib/core/utils/cn'
77
import type { WorkspaceFileRecord } from '@/lib/uploads/contexts/workspace'
88
import { useWorkspaceFileBinary } from '@/hooks/queries/workspace-files'
9-
import {
10-
PDF_PAGE_SKELETON,
11-
PreviewError,
12-
resolvePreviewError,
13-
shouldSuppressStreamingDocumentError,
14-
} from './preview-shared'
9+
import { PDF_PAGE_SKELETON, PreviewError, resolvePreviewError } from './preview-shared'
1510

1611
const logger = createLogger('DocxPreview')
1712

@@ -136,12 +131,7 @@ export const DocxPreview = memo(function DocxPreview({
136131
setHasRenderedPreview(true)
137132
}
138133
const msg = toError(err).message || 'Failed to render document'
139-
if (previousHtml || shouldSuppressStreamingDocumentError(msg)) {
140-
logger.info('Suppressing transient DOCX streaming preview error', { error: msg })
141-
} else {
142-
logger.error('DOCX render failed', { error: msg })
143-
setRenderError(msg)
144-
}
134+
logger.info('Transient DOCX streaming preview error (suppressed)', { error: msg })
145135
}
146136
} finally {
147137
if (!cancelled) {
@@ -157,17 +147,11 @@ export const DocxPreview = memo(function DocxPreview({
157147
}
158148
}, [streamingContent, workspaceId])
159149

160-
const error =
161-
hasRenderedPreview && streamingContent !== undefined
162-
? null
163-
: streamingContent !== undefined
164-
? renderError
165-
: resolvePreviewError(fetchError, renderError)
150+
const error = streamingContent !== undefined ? null : resolvePreviewError(fetchError, renderError)
166151
if (error) return <PreviewError label='document' error={error} />
167152

168153
const showSkeleton =
169-
!hasRenderedPreview &&
170-
((streamingContent !== undefined && rendering) || (streamingContent === undefined && isLoading))
154+
!hasRenderedPreview && (streamingContent !== undefined || isLoading || rendering)
171155

172156
return (
173157
<div className='relative h-full w-full overflow-auto bg-[var(--surface-1)]'>

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

Lines changed: 4 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -6,11 +6,7 @@ import { toError } from '@sim/utils/errors'
66
import { Skeleton } from '@/components/emcn'
77
import type { WorkspaceFileRecord } from '@/lib/uploads/contexts/workspace'
88
import { useWorkspaceFileBinary } from '@/hooks/queries/workspace-files'
9-
import {
10-
PreviewError,
11-
resolvePreviewError,
12-
shouldSuppressStreamingDocumentError,
13-
} from './preview-shared'
9+
import { PreviewError, resolvePreviewError } from './preview-shared'
1410

1511
const logger = createLogger('PptxPreview')
1612

@@ -44,15 +40,6 @@ function pptxCacheKey(fileId: string, dataUpdatedAt: number, byteLength: number)
4440
return `${fileId}:${dataUpdatedAt}:${byteLength}`
4541
}
4642

47-
function shouldSuppressStreamingPptxError(message: string): boolean {
48-
return (
49-
shouldSuppressStreamingDocumentError(message) ||
50-
message.includes('SyntaxError: Invalid or unexpected token') ||
51-
message.includes('PPTX generation cancelled') ||
52-
message.includes('SyntaxError: Unexpected end of input')
53-
)
54-
}
55-
5643
function pptxCacheSet(key: string, slides: string[]): void {
5744
pptxSlideCache.set(key, slides)
5845
if (pptxSlideCache.size > 5) {
@@ -197,12 +184,7 @@ export function PptxPreview({
197184
} catch (err) {
198185
if (!cancelled && !(err instanceof DOMException && err.name === 'AbortError')) {
199186
const msg = toError(err).message || 'Failed to render presentation'
200-
if (shouldSuppressStreamingPptxError(msg)) {
201-
logger.info('Suppressing transient PPTX streaming preview error', { error: msg })
202-
} else {
203-
logger.error('PPTX render failed', { error: msg })
204-
setRenderError(msg)
205-
}
187+
logger.info('Transient PPTX streaming preview error (suppressed)', { error: msg })
206188
}
207189
} finally {
208190
if (!cancelled) setRendering(false)
@@ -264,12 +246,12 @@ export function PptxPreview({
264246
}
265247
}, [fileData, streamingContent, cacheKey])
266248

267-
const error = resolvePreviewError(fetchError, renderError)
249+
const error = streamingContent !== undefined ? null : resolvePreviewError(fetchError, renderError)
268250
const loading = isFetching || rendering
269251

270252
if (error) return <PreviewError label='presentation' error={error} />
271253

272-
if (loading && slides.length === 0) {
254+
if ((loading || streamingContent !== undefined) && slides.length === 0) {
273255
return PPTX_SLIDE_SKELETON
274256
}
275257

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

Lines changed: 0 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -19,20 +19,6 @@ export function resolvePreviewError(
1919
return renderError
2020
}
2121

22-
export function shouldSuppressStreamingDocumentError(message: string): boolean {
23-
const lower = message.toLowerCase()
24-
return (
25-
lower.includes('preview failed') ||
26-
lower.includes('aborterror') ||
27-
lower.includes('unexpected end') ||
28-
lower.includes('unexpected eof') ||
29-
lower.includes('invalid or unexpected token') ||
30-
lower.includes('end of central directory') ||
31-
lower.includes('corrupted zip') ||
32-
lower.includes('end of data reached')
33-
)
34-
}
35-
3622
export const PDF_PAGE_SKELETON = (
3723
<div className='absolute inset-0 flex flex-col items-center gap-4 overflow-y-auto bg-[var(--surface-1)] p-6'>
3824
{[0, 1].map((i) => (

0 commit comments

Comments
 (0)