reduce complexity in Workspace (#3377)

This commit is contained in:
Jonathan Dobson
2025-09-05 12:49:03 -04:00
committed by GitHub
parent 50e0597c84
commit 6f91d247ac

View File

@@ -506,6 +506,7 @@ function Workspace({
return ( return (
<div className="relative h-full w-full"> <div className="relative h-full w-full">
{/* cycle browser dialog */}
<Dialog <Dialog
open={openCycleBrowserDialogue} open={openCycleBrowserDialogue}
onOpenChange={(open) => { onOpenChange={(open) => {
@@ -553,6 +554,7 @@ function Workspace({
</DialogContent> </DialogContent>
</Dialog> </Dialog>
{/* cache key value delete dialog */}
<Dialog <Dialog
open={openConfirmCacheKeyValueDeleteDialogue} open={openConfirmCacheKeyValueDeleteDialogue}
onOpenChange={(open) => { onOpenChange={(open) => {
@@ -611,7 +613,7 @@ function Workspace({
</Dialog> </Dialog>
{/* header panel */} {/* header panel */}
<div className="absolute left-6 right-6 top-8 z-10 h-20"> <div className="absolute left-6 right-6 top-8 z-40 h-20">
<WorkflowHeader <WorkflowHeader
cacheKeyValue={cacheKeyValue} cacheKeyValue={cacheKeyValue}
cacheKeyValues={cacheKeyValues} cacheKeyValues={cacheKeyValues}
@@ -692,63 +694,11 @@ function Workspace({
/> />
</div> </div>
{/* sub panels in design mode */} {/* infinite canvas and sub panels when not in debug mode */}
{!showBrowser && workflowPanelState.active && ( {!showBrowser && (
<div <div className="relative flex h-full w-full overflow-hidden overflow-x-hidden">
className="absolute right-6 top-[8.5rem]" {/* infinite canvas */}
style={{
height:
workflowPanelState.content === "nodeLibrary"
? "calc(100vh - 9.5rem)"
: "unset",
}}
onMouseDownCapture={() => {}}
>
{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" && (
<WorkflowNodeLibraryPanel
onNodeClick={(props) => {
addNode(props);
}}
/>
)}
</div>
)}
<div className="relative flex h-full w-full overflow-hidden overflow-x-hidden">
{/* infinite canvas */}
<div
className={cn("skyvern-split-left h-full", {
"w-full": !showBrowser,
})}
style={{
width: showBrowser ? workflowWidth : "100%",
maxWidth: showBrowser ? workflowWidth : "100%",
}}
>
<FlowRenderer <FlowRenderer
hideBackground={showBrowser}
nodes={nodes} nodes={nodes}
edges={edges} edges={edges}
setNodes={setNodes} setNodes={setNodes}
@@ -758,15 +708,84 @@ function Workspace({
initialTitle={initialTitle} initialTitle={initialTitle}
workflow={workflow} workflow={workflow}
/> />
{/* sub panels */}
{workflowPanelState.active && (
<div
className="pointer-events-none absolute right-6 top-[5rem] z-30"
style={{
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" && (
<div className="pointer-events-auto relative right-0 top-[3.5rem] z-30">
<WorkflowParametersPanel />
</div>
)}
{workflowPanelState.content === "nodeLibrary" && (
<div className="pointer-events-auto relative right-0 top-[3.5rem] z-30 h-full w-[25rem]">
<WorkflowNodeLibraryPanel
onNodeClick={(props) => {
addNode(props);
}}
/>
</div>
)}
</div>
)}
</div> </div>
)}
{/* divider if browser is in play */} {/* infinite canvas, sub panels, browser, and timeline when in debug mode */}
{showBrowser && ( {showBrowser && (
<div className="relative flex h-full w-full overflow-hidden overflow-x-hidden">
{/* infinite canvas */}
<div
className="skyvern-split-left h-full"
style={{
width: workflowWidth,
maxWidth: workflowWidth,
}}
>
<FlowRenderer
hideBackground={true}
nodes={nodes}
edges={edges}
setNodes={setNodes}
setEdges={setEdges}
onNodesChange={onNodesChange}
onEdgesChange={onEdgesChange}
initialTitle={initialTitle}
workflow={workflow}
/>
</div>
{/* divider*/}
<div className="mt-[8rem] h-[calc(100%_-_8rem)] w-[1px] bg-slate-800" /> <div className="mt-[8rem] h-[calc(100%_-_8rem)] w-[1px] bg-slate-800" />
)}
{/* browser & timeline & sub-panels in debug mode */} {/* browser & timeline & sub-panels in debug mode */}
{showBrowser && (
<div <div
className="skyvern-split-right relative flex h-full items-end justify-center bg-[#020617] p-4 pl-6" className="skyvern-split-right relative flex h-full items-end justify-center bg-[#020617] p-4 pl-6"
style={{ style={{
@@ -776,11 +795,10 @@ function Workspace({
{/* sub panels */} {/* sub panels */}
{workflowPanelState.active && ( {workflowPanelState.active && (
<div <div
className={cn("absolute right-6 top-[8.5rem] z-20", { className={cn("absolute right-6 top-[8.5rem] z-30", {
"left-6": workflowPanelState.content === "nodeLibrary", "left-6": workflowPanelState.content === "nodeLibrary",
})} })}
style={{ style={{
top: "10.5rem",
height: height:
workflowPanelState.content === "nodeLibrary" workflowPanelState.content === "nodeLibrary"
? "calc(100vh - 14rem)" ? "calc(100vh - 14rem)"
@@ -863,7 +881,7 @@ function Workspace({
{/* timeline */} {/* timeline */}
<div <div
className={cn("h-full w-[5rem] overflow-visible", { className={cn("z-20 h-full w-[5rem] overflow-visible", {
"pointer-events-none hidden w-[0px] overflow-hidden": "pointer-events-none hidden w-[0px] overflow-hidden":
!blockLabel, !blockLabel,
})} })}
@@ -904,7 +922,7 @@ function Workspace({
{/* slide indicator */} {/* slide indicator */}
<div <div
className="absolute left-0 top-0 z-10 flex h-full items-center justify-center p-1 opacity-30 transition-opacity hover:opacity-100 group-hover:opacity-100" className="absolute left-0 top-0 z-20 flex h-full items-center justify-center p-1 opacity-30 transition-opacity hover:opacity-100 group-hover:opacity-100"
onClick={(e) => { onClick={(e) => {
e.stopPropagation(); e.stopPropagation();
setTimelineMode( setTimelineMode(
@@ -932,55 +950,8 @@ function Workspace({
</div> </div>
</div> </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>
); );
} }