Skip to content

Commit d4df32c

Browse files
committed
address comments
1 parent 9af4e65 commit d4df32c

1 file changed

Lines changed: 55 additions & 47 deletions

File tree

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

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

Lines changed: 55 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -78,8 +78,14 @@ export const PdfViewerCore = memo(function PdfViewerCore({ source, filename }: P
7878
const [loadError, setLoadError] = useState<string | null>(null)
7979

8080
const sourceValue = source.kind === 'url' ? source.url : source.buffer
81+
const isEmptyBufferSource = source.kind === 'buffer' && source.buffer.byteLength === 0
8182
const file = useMemo(
82-
() => (source.kind === 'url' ? source.url : { data: new Uint8Array(source.buffer.slice(0)) }),
83+
() =>
84+
source.kind === 'url'
85+
? source.url
86+
: source.buffer.byteLength > 0
87+
? { data: new Uint8Array(source.buffer.slice(0)) }
88+
: null,
8389
[sourceValue]
8490
)
8591

@@ -254,55 +260,57 @@ export const PdfViewerCore = memo(function PdfViewerCore({ source, filename }: P
254260
className='relative flex flex-1 items-start overflow-auto bg-[var(--surface-1)]'
255261
>
256262
{!isDocumentReady && PDF_SKELETON}
257-
<ReactPdfDocument
258-
file={file}
259-
onLoadSuccess={({ numPages }) => {
260-
setPageCount(numPages)
261-
setCurrentPage(1)
262-
setLoadError(null)
263-
setIsDocumentReady(true)
264-
}}
265-
onLoadError={(err) => {
266-
logger.error('PDF load failed', { error: err.message })
267-
setLoadError(err.message)
268-
setIsDocumentReady(true)
269-
}}
270-
error={<PdfError error={loadError ?? 'Failed to load PDF'} />}
271-
className='mx-auto'
272-
>
273-
<div
274-
ref={paddingWrapperRef}
275-
style={{
276-
padding: PDF_VIEWER_PADDING,
277-
minWidth:
278-
pageWidth !== undefined
279-
? `${pageWidth * displayZoom + 2 * PDF_VIEWER_PADDING}px`
280-
: undefined,
263+
{!isEmptyBufferSource && file && (
264+
<ReactPdfDocument
265+
file={file}
266+
onLoadSuccess={({ numPages }) => {
267+
setPageCount(numPages)
268+
setCurrentPage(1)
269+
setLoadError(null)
270+
setIsDocumentReady(true)
281271
}}
272+
onLoadError={(err) => {
273+
logger.error('PDF load failed', { error: err.message })
274+
setLoadError(err.message)
275+
setIsDocumentReady(true)
276+
}}
277+
error={<PdfError error={loadError ?? 'Failed to load PDF'} />}
278+
className='mx-auto'
282279
>
283-
<div ref={pagesWrapperRef} style={{ width: pageWidth }}>
284-
{Array.from({ length: pageCount }, (_, i) => (
285-
<div
286-
key={i}
287-
ref={(el) => {
288-
pageRefs.current[i] = el
289-
}}
290-
data-page={i + 1}
291-
className='mb-4 overflow-clip rounded-md shadow-medium'
292-
>
293-
<ReactPdfPage
294-
pageNumber={i + 1}
295-
width={pageWidth}
296-
className='!overflow-clip [&_.textLayer]:!overflow-clip'
297-
renderTextLayer
298-
renderAnnotationLayer={false}
299-
aria-label={`${filename} page ${i + 1}`}
300-
/>
301-
</div>
302-
))}
280+
<div
281+
ref={paddingWrapperRef}
282+
style={{
283+
padding: PDF_VIEWER_PADDING,
284+
minWidth:
285+
pageWidth !== undefined
286+
? `${pageWidth * displayZoom + 2 * PDF_VIEWER_PADDING}px`
287+
: undefined,
288+
}}
289+
>
290+
<div ref={pagesWrapperRef} style={{ width: pageWidth }}>
291+
{Array.from({ length: pageCount }, (_, i) => (
292+
<div
293+
key={i}
294+
ref={(el) => {
295+
pageRefs.current[i] = el
296+
}}
297+
data-page={i + 1}
298+
className='mb-4 overflow-clip rounded-md shadow-medium'
299+
>
300+
<ReactPdfPage
301+
pageNumber={i + 1}
302+
width={pageWidth}
303+
className='!overflow-clip [&_.textLayer]:!overflow-clip'
304+
renderTextLayer
305+
renderAnnotationLayer={false}
306+
aria-label={`${filename} page ${i + 1}`}
307+
/>
308+
</div>
309+
))}
310+
</div>
303311
</div>
304-
</div>
305-
</ReactPdfDocument>
312+
</ReactPdfDocument>
313+
)}
306314
</div>
307315
</div>
308316
)

0 commit comments

Comments
 (0)