From 79578e5daa22683a7a8a2cc66f73977fe087fcad Mon Sep 17 00:00:00 2001 From: Nils Schneider Date: Sat, 22 Nov 2025 02:57:44 +0100 Subject: [PATCH] fix --- frontend/src/desktop/DesktopWorkspace.tsx | 16 ++++++++++++++-- frontend/src/documents/DocumentsManager.ts | 12 +++++++++++- frontend/src/preview/DocumentViewerPanel.tsx | 13 +++++++++---- 3 files changed, 34 insertions(+), 7 deletions(-) diff --git a/frontend/src/desktop/DesktopWorkspace.tsx b/frontend/src/desktop/DesktopWorkspace.tsx index fe0337b..1a308f1 100644 --- a/frontend/src/desktop/DesktopWorkspace.tsx +++ b/frontend/src/desktop/DesktopWorkspace.tsx @@ -408,9 +408,21 @@ const DesktopWorkspace: React.FC = ({ commitSize(); - const observer = new ResizeObserver(commitSize); + let rafId: number | null = null; + const observer = new ResizeObserver(() => { + if (rafId != null) return; + rafId = requestAnimationFrame(() => { + rafId = null; + commitSize(); + }); + }); observer.observe(container); - return () => observer.disconnect(); + return () => { + observer.disconnect(); + if (rafId != null) { + cancelAnimationFrame(rafId); + } + }; }, [engine]); const resolvePreviewDimensions = useCallback( diff --git a/frontend/src/documents/DocumentsManager.ts b/frontend/src/documents/DocumentsManager.ts index dba5090..357ad5f 100644 --- a/frontend/src/documents/DocumentsManager.ts +++ b/frontend/src/documents/DocumentsManager.ts @@ -15,6 +15,8 @@ class DocumentsManager { private listeners: Set<() => void>; + private emitScheduled: boolean; + constructor( fetchDocument?: FetchDocument, ) { @@ -22,10 +24,18 @@ class DocumentsManager { this.fetcher = fetchDocument; this.inflight = new Map(); this.listeners = new Set(); + this.emitScheduled = false; } private emit() { - this.listeners.forEach((fn) => fn()); + if (this.emitScheduled) { + return; + } + this.emitScheduled = true; + setTimeout(() => { + this.emitScheduled = false; + this.listeners.forEach((fn) => fn()); + }, 0); } subscribe(listener: () => void) { diff --git a/frontend/src/preview/DocumentViewerPanel.tsx b/frontend/src/preview/DocumentViewerPanel.tsx index 8934803..31e7b97 100644 --- a/frontend/src/preview/DocumentViewerPanel.tsx +++ b/frontend/src/preview/DocumentViewerPanel.tsx @@ -1,5 +1,4 @@ import React, { - Children, useCallback, useEffect, useMemo, @@ -431,9 +430,15 @@ const DocumentViewerPanel: React.FC = ({ : null; const headerLeadingButtons = isSidebarVariant - ? [collapseButton, maximizeButton].filter(Boolean) - : [sidebarToggle, closeButton].filter(Boolean); - const headerLeadingContent = headerLeadingButtons.length ? Children.toArray(headerLeadingButtons) : null; + ? [ + collapseButton ? {collapseButton} : null, + maximizeButton ? {maximizeButton} : null, + ].filter(Boolean) + : [ + sidebarToggle ? {sidebarToggle} : null, + closeButton ? {closeButton} : null, + ].filter(Boolean); + const headerLeadingContent = headerLeadingButtons.length ? headerLeadingButtons : null; const resizeHandle = isSidebarVariant ? (