Skip to content

Commit 12f746a

Browse files
committed
fix(files): add key to IframePreview and use monotonic seq for streaming PDF key
- Add key={file.id} to IframePreview so React remounts on file switch, preventing stale renderError from persisting across different files - Replace key={streamingBuffer.byteLength} with a monotonic sequence counter so same-size successive PDF compilations still trigger a remount
1 parent bf6e630 commit 12f746a

1 file changed

Lines changed: 11 additions & 8 deletions

File tree

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

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

Lines changed: 11 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -94,7 +94,12 @@ export function FileViewer({
9494

9595
if (category === 'iframe-previewable') {
9696
return (
97-
<IframePreview file={file} workspaceId={workspaceId} streamingContent={streamingContent} />
97+
<IframePreview
98+
key={file.id}
99+
file={file}
100+
workspaceId={workspaceId}
101+
streamingContent={streamingContent}
102+
/>
98103
)
99104
}
100105

@@ -151,6 +156,8 @@ const IframePreview = memo(function IframePreview({
151156
}) {
152157
const [streamingBuffer, setStreamingBuffer] = useState<ArrayBuffer | null>(null)
153158
const streamingBufferRef = useRef<ArrayBuffer | null>(null)
159+
const streamingBufferSeqRef = useRef(0)
160+
const [streamingBufferSeq, setStreamingBufferSeq] = useState(0)
154161
const [rendering, setRendering] = useState(false)
155162
const [renderError, setRenderError] = useState<string | null>(null)
156163

@@ -182,7 +189,9 @@ const IframePreview = memo(function IframePreview({
182189
if (cancelled) return
183190

184191
streamingBufferRef.current = buf
192+
streamingBufferSeqRef.current += 1
185193
setStreamingBuffer(buf)
194+
setStreamingBufferSeq(streamingBufferSeqRef.current)
186195
} catch (err) {
187196
if (!cancelled && !(err instanceof DOMException && err.name === 'AbortError')) {
188197
const msg = toError(err).message || 'Failed to render PDF'
@@ -226,13 +235,7 @@ const IframePreview = memo(function IframePreview({
226235

227236
if (streamingContent !== undefined) {
228237
if (!streamingSource) return null
229-
return (
230-
<PdfViewerCore
231-
key={streamingBuffer!.byteLength}
232-
source={streamingSource}
233-
filename={file.name}
234-
/>
235-
)
238+
return <PdfViewerCore key={streamingBufferSeq} source={streamingSource} filename={file.name} />
236239
}
237240

238241
return <PdfViewerCore source={staticSource} filename={file.name} />

0 commit comments

Comments
 (0)