layout fixes 1 (#3341)
This commit is contained in:
@@ -44,6 +44,7 @@ type Props = {
|
|||||||
workflow?: {
|
workflow?: {
|
||||||
run: WorkflowRunStatusApiResponse;
|
run: WorkflowRunStatusApiResponse;
|
||||||
};
|
};
|
||||||
|
resizeTrigger?: number;
|
||||||
// --
|
// --
|
||||||
onClose?: () => void;
|
onClose?: () => void;
|
||||||
};
|
};
|
||||||
@@ -54,6 +55,7 @@ function BrowserStream({
|
|||||||
showControlButtons = undefined,
|
showControlButtons = undefined,
|
||||||
task = undefined,
|
task = undefined,
|
||||||
workflow = undefined,
|
workflow = undefined,
|
||||||
|
resizeTrigger,
|
||||||
// --
|
// --
|
||||||
onClose,
|
onClose,
|
||||||
}: Props) {
|
}: Props) {
|
||||||
@@ -291,6 +293,19 @@ function BrowserStream({
|
|||||||
// eslint-disable-next-line react-hooks/exhaustive-deps
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
||||||
}, [interactive, isCommandConnected, userIsControlling]);
|
}, [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
|
// Effect to show toast when task or workflow reaches a final state based on hook updates
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
const run = task ? task.run : workflow ? workflow.run : null;
|
const run = task ? task.run : workflow ? workflow.run : null;
|
||||||
|
|||||||
@@ -126,6 +126,7 @@ function Workspace({
|
|||||||
useState<DebugSessionApiResponse | null>(null);
|
useState<DebugSessionApiResponse | null>(null);
|
||||||
const [showPowerButton, setShowPowerButton] = useState(true);
|
const [showPowerButton, setShowPowerButton] = useState(true);
|
||||||
const [reloadKey, setReloadKey] = useState(0);
|
const [reloadKey, setReloadKey] = useState(0);
|
||||||
|
const [windowResizeTrigger, setWindowResizeTrigger] = useState(0);
|
||||||
const [isReloading, setIsReloading] = useState(false);
|
const [isReloading, setIsReloading] = useState(false);
|
||||||
const credentialGetter = useCredentialGetter();
|
const credentialGetter = useCredentialGetter();
|
||||||
const queryClient = useQueryClient();
|
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(() => {
|
useEffect(() => {
|
||||||
blockScriptStore.setScripts(blockScripts ?? {});
|
blockScriptStore.setScripts(blockScripts ?? {});
|
||||||
// eslint-disable-next-line react-hooks/exhaustive-deps
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
||||||
@@ -720,7 +731,7 @@ function Workspace({
|
|||||||
<div className="relative flex h-full w-full overflow-hidden overflow-x-hidden">
|
<div className="relative flex h-full w-full overflow-hidden overflow-x-hidden">
|
||||||
{/* infinite canvas */}
|
{/* infinite canvas */}
|
||||||
<div
|
<div
|
||||||
className={cn("skyvern-split-left h-full w-[33rem]", {
|
className={cn("skyvern-split-left h-full w-[33rem] min-w-[33rem]", {
|
||||||
"w-full": !showBrowser,
|
"w-full": !showBrowser,
|
||||||
})}
|
})}
|
||||||
>
|
>
|
||||||
@@ -744,11 +755,11 @@ function Workspace({
|
|||||||
|
|
||||||
{/* browser & timeline & sub-panels in debug mode */}
|
{/* browser & timeline & sub-panels in debug mode */}
|
||||||
{showBrowser && (
|
{showBrowser && (
|
||||||
<div className="skyvern-split-right relative flex h-full flex-1 items-end justify-center bg-[#020617] p-4 pl-6">
|
<div className="skyvern-split-right relative flex h-full w-[calc(100%-33rem)] items-end justify-center bg-[#020617] p-4 pl-6">
|
||||||
{/* sub panels */}
|
{/* sub panels */}
|
||||||
{workflowPanelState.active && (
|
{workflowPanelState.active && (
|
||||||
<div
|
<div
|
||||||
className={cn("absolute right-6 top-[8.5rem]", {
|
className={cn("absolute right-6 top-[8.5rem] z-20", {
|
||||||
"left-6": workflowPanelState.content === "nodeLibrary",
|
"left-6": workflowPanelState.content === "nodeLibrary",
|
||||||
})}
|
})}
|
||||||
style={{
|
style={{
|
||||||
@@ -803,6 +814,7 @@ function Workspace({
|
|||||||
interactive={interactor === "human"}
|
interactive={interactor === "human"}
|
||||||
browserSessionId={activeDebugSession.browser_session_id}
|
browserSessionId={activeDebugSession.browser_session_id}
|
||||||
showControlButtons={interactor === "human"}
|
showControlButtons={interactor === "human"}
|
||||||
|
resizeTrigger={windowResizeTrigger}
|
||||||
/>
|
/>
|
||||||
) : (
|
) : (
|
||||||
<div className="flex aspect-video w-full flex-col items-center justify-center gap-2 rounded-md border border-slate-800 pb-2 pt-4 text-sm text-slate-400">
|
<div className="flex aspect-video w-full flex-col items-center justify-center gap-2 rounded-md border border-slate-800 pb-2 pt-4 text-sm text-slate-400">
|
||||||
@@ -831,7 +843,8 @@ function Workspace({
|
|||||||
{/* timeline */}
|
{/* timeline */}
|
||||||
<div
|
<div
|
||||||
className={cn("h-full w-[5rem] overflow-visible", {
|
className={cn("h-full w-[5rem] overflow-visible", {
|
||||||
"pointer-events-none w-[0px] overflow-hidden": !blockLabel,
|
"pointer-events-none hidden w-[0px] overflow-hidden":
|
||||||
|
!blockLabel,
|
||||||
})}
|
})}
|
||||||
>
|
>
|
||||||
<div
|
<div
|
||||||
@@ -899,6 +912,53 @@ function Workspace({
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
)}
|
)}
|
||||||
|
|
||||||
|
{!showBrowser && workflowPanelState.active && (
|
||||||
|
<div
|
||||||
|
className={cn(
|
||||||
|
"pointer-events-none absolute right-6 top-[5rem] z-20",
|
||||||
|
)}
|
||||||
|
style={{
|
||||||
|
top: "8.5rem",
|
||||||
|
height:
|
||||||
|
workflowPanelState.content === "nodeLibrary"
|
||||||
|
? "calc(100vh - 14rem)"
|
||||||
|
: "unset",
|
||||||
|
}}
|
||||||
|
>
|
||||||
|
{workflowPanelState.content === "cacheKeyValues" && (
|
||||||
|
<WorkflowCacheKeyValuesPanel
|
||||||
|
cacheKeyValues={cacheKeyValues}
|
||||||
|
pending={cacheKeyValuesLoading}
|
||||||
|
scriptKey={workflow.cache_key ?? "default"}
|
||||||
|
onDelete={(cacheKeyValue) => {
|
||||||
|
setToDeleteCacheKeyValue(cacheKeyValue);
|
||||||
|
setOpenConfirmCacheKeyValueDeleteDialogue(true);
|
||||||
|
}}
|
||||||
|
onPaginate={(page) => {
|
||||||
|
setPage(page);
|
||||||
|
}}
|
||||||
|
onSelect={(cacheKeyValue) => {
|
||||||
|
setCacheKeyValue(cacheKeyValue);
|
||||||
|
setCacheKeyValueFilter("");
|
||||||
|
closeWorkflowPanel();
|
||||||
|
}}
|
||||||
|
/>
|
||||||
|
)}
|
||||||
|
{workflowPanelState.content === "parameters" && (
|
||||||
|
<WorkflowParametersPanel />
|
||||||
|
)}
|
||||||
|
{workflowPanelState.content === "nodeLibrary" && (
|
||||||
|
<div className="pointer-events-auto relative right-0 top-0 z-20 h-full w-[25rem]">
|
||||||
|
<WorkflowNodeLibraryPanel
|
||||||
|
onNodeClick={(props) => {
|
||||||
|
addNode(props);
|
||||||
|
}}
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
)}
|
||||||
|
</div>
|
||||||
|
)}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
);
|
);
|
||||||
|
|||||||
Reference in New Issue
Block a user