diff --git a/skyvern-frontend/src/components/BrowserStream.tsx b/skyvern-frontend/src/components/BrowserStream.tsx index 8724da89..c69ac7e1 100644 --- a/skyvern-frontend/src/components/BrowserStream.tsx +++ b/skyvern-frontend/src/components/BrowserStream.tsx @@ -44,6 +44,7 @@ type Props = { workflow?: { run: WorkflowRunStatusApiResponse; }; + resizeTrigger?: number; // -- onClose?: () => void; }; @@ -54,6 +55,7 @@ function BrowserStream({ showControlButtons = undefined, task = undefined, workflow = undefined, + resizeTrigger, // -- onClose, }: Props) { @@ -291,6 +293,19 @@ function BrowserStream({ // eslint-disable-next-line react-hooks/exhaustive-deps }, [interactive, isCommandConnected, userIsControlling]); + // Effect to handle window resize trigger for NoVNC canvas + useEffect(() => { + if (!resizeTrigger || !canvasContainer || !rfbRef.current) { + return; + } + + // const originalDisplay = canvasContainer.style.display; + // canvasContainer.style.display = "none"; + // canvasContainer.offsetHeight; + // canvasContainer.style.display = originalDisplay; + // window.dispatchEvent(new Event("resize")); + }, [resizeTrigger, canvasContainer]); + // Effect to show toast when task or workflow reaches a final state based on hook updates useEffect(() => { const run = task ? task.run : workflow ? workflow.run : null; diff --git a/skyvern-frontend/src/routes/workflows/editor/Workspace.tsx b/skyvern-frontend/src/routes/workflows/editor/Workspace.tsx index d82cf714..3f3aa3cb 100644 --- a/skyvern-frontend/src/routes/workflows/editor/Workspace.tsx +++ b/skyvern-frontend/src/routes/workflows/editor/Workspace.tsx @@ -126,6 +126,7 @@ function Workspace({ useState(null); const [showPowerButton, setShowPowerButton] = useState(true); const [reloadKey, setReloadKey] = useState(0); + const [windowResizeTrigger, setWindowResizeTrigger] = useState(0); const [isReloading, setIsReloading] = useState(false); const credentialGetter = useCredentialGetter(); const queryClient = useQueryClient(); @@ -263,6 +264,16 @@ function Workspace({ }; }); + // Add window resize listener to trigger NoVNC canvas resize + useEffect(() => { + const handleResize = () => { + setWindowResizeTrigger((prev) => prev + 1); + }; + + window.addEventListener("resize", handleResize); + return () => window.removeEventListener("resize", handleResize); + }, []); + useEffect(() => { blockScriptStore.setScripts(blockScripts ?? {}); // eslint-disable-next-line react-hooks/exhaustive-deps @@ -720,7 +731,7 @@ function Workspace({
{/* infinite canvas */}
@@ -744,11 +755,11 @@ function Workspace({ {/* browser & timeline & sub-panels in debug mode */} {showBrowser && ( -
+
{/* sub panels */} {workflowPanelState.active && (
) : (
@@ -831,7 +843,8 @@ function Workspace({ {/* timeline */}
);