fix: re-activate srcDoc transport when exiting Edit mode to prevent blank preview (#2931)

When switching from Edit to Draw mode, the preview could go blank because:
1. exitManualEditModeAfterFlush() clears manualEditFrozenSource
2. previewSource switches back to livePreviewSource
3. But activateSrcDocTransport() was not triggered

This fix adds a useEffect that detects when manualEditMode transitions
from true to false, and explicitly calls activateSrcDocTransport() to
ensure the iframe content is refreshed.

Fixes #2912
This commit is contained in:
Nicholas-Xiong 2026-05-26 14:13:18 +08:00 committed by GitHub
parent 2bab0c2add
commit 0027aa2037
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -4313,6 +4313,23 @@ function HtmlViewer({
wasUrlLoadPreviewRef.current = false;
activateSrcDocTransport();
}, [activateSrcDocTransport, useUrlLoadPreview]);
// Re-activate srcDoc transport when exiting manual edit mode to ensure
// the preview renders correctly when switching from Edit to Draw mode.
// Without this, the preview can remain blank because the frozen source
// is cleared but the iframe content is not refreshed.
const prevManualEditModeRef = useRef(manualEditMode);
useEffect(() => {
const wasInEditMode = prevManualEditModeRef.current;
const isNowInEditMode = manualEditMode;
prevManualEditModeRef.current = isNowInEditMode;
// When exiting edit mode (was true, now false), re-activate the transport
if (wasInEditMode && !isNowInEditMode && !useUrlLoadPreview) {
activateSrcDocTransport();
}
}, [manualEditMode, useUrlLoadPreview, activateSrcDocTransport]);
useEffect(() => {
restorePreviewScrollPosition();
}, [boardMode, manualEditMode, srcDoc, restorePreviewScrollPosition]);