diff --git a/packages/oss-console/src/components/Executions/Tables/NodeExecutionActions/ResumeButton.tsx b/packages/oss-console/src/components/Executions/Tables/NodeExecutionActions/ResumeButton.tsx index 996e032dc..5c8840b0d 100644 --- a/packages/oss-console/src/components/Executions/Tables/NodeExecutionActions/ResumeButton.tsx +++ b/packages/oss-console/src/components/Executions/Tables/NodeExecutionActions/ResumeButton.tsx @@ -81,6 +81,7 @@ export const ResumeButton: FC = ({ node }) => { nodeExecutionId={nodeExecution.id as NodeExecutionIdentifier} showLaunchForm={showResumeForm} setShowLaunchForm={setShowResumeForm} + nodeExecutionScopeId={nodeExecution.scopedId} /> ) : null; }} diff --git a/packages/oss-console/src/components/Launch/LaunchForm/LaunchFormDialog.tsx b/packages/oss-console/src/components/Launch/LaunchForm/LaunchFormDialog.tsx index 815d965e5..cc85832d4 100644 --- a/packages/oss-console/src/components/Launch/LaunchForm/LaunchFormDialog.tsx +++ b/packages/oss-console/src/components/Launch/LaunchForm/LaunchFormDialog.tsx @@ -15,6 +15,7 @@ interface LaunchFormDialogProps { setShowLaunchForm: React.Dispatch>; compiledNode?: CompiledNode; nodeExecutionId?: NodeExecutionIdentifier; + nodeExecutionScopeId?: string; } function getLaunchProps(id: ResourceIdentifier) { @@ -34,6 +35,7 @@ export const LaunchFormDialog = ({ setShowLaunchForm, compiledNode, nodeExecutionId, + nodeExecutionScopeId, }: LaunchFormDialogProps): JSX.Element => { const onCancelLaunch = (_?: any) => { setShowLaunchForm(false); @@ -48,7 +50,7 @@ export const LaunchFormDialog = ({ const dialogOnClick = (e: React.MouseEvent) => { e.stopPropagation(); }; - + console.log('kai', nodeExecutionScopeId); return ( - ) : compiledNode && nodeExecutionId ? ( + ) : compiledNode && nodeExecutionId && nodeExecutionScopeId ? ( ) : null} diff --git a/packages/oss-console/src/components/Launch/LaunchForm/ResumeForm.tsx b/packages/oss-console/src/components/Launch/LaunchForm/ResumeForm.tsx index 46a0a1f1e..9b0bfd9ed 100644 --- a/packages/oss-console/src/components/Launch/LaunchForm/ResumeForm.tsx +++ b/packages/oss-console/src/components/Launch/LaunchForm/ResumeForm.tsx @@ -10,6 +10,7 @@ interface ResumeFormProps extends BaseLaunchFormProps { compiledNode: CompiledNode; initialParameters?: TaskInitialLaunchParameters; nodeExecutionId: NodeExecutionIdentifier; + nodeExecutionScopeId: string; } /** Renders the form for requesting a resume request on a gate node */ diff --git a/packages/oss-console/src/components/Launch/LaunchForm/ResumeSignalForm.tsx b/packages/oss-console/src/components/Launch/LaunchForm/ResumeSignalForm.tsx index 62a2db6b0..e1ee80b2e 100644 --- a/packages/oss-console/src/components/Launch/LaunchForm/ResumeSignalForm.tsx +++ b/packages/oss-console/src/components/Launch/LaunchForm/ResumeSignalForm.tsx @@ -26,6 +26,7 @@ export interface ResumeSignalFormProps extends BaseLaunchFormProps { compiledNode: CompiledNode; initialParameters?: TaskInitialLaunchParameters; nodeExecutionId: NodeExecutionIdentifier; + nodeExecutionScopeId: string; } /** Renders the form for requesting a resume request on a gate node */ @@ -33,6 +34,7 @@ export const ResumeSignalForm: React.FC = ({ compiledNode, nodeExecutionId, onClose, + nodeExecutionScopeId, }) => { const { formInputsRef, state, service } = useResumeFormState({ compiledNode, @@ -41,14 +43,15 @@ export const ResumeSignalForm: React.FC = ({ }); const { nodeExecutionsById } = useNodeExecutionsById(); const [nodeExecution, setNodeExecution] = useState( - nodeExecutionsById[nodeExecutionId.nodeId], + nodeExecutionsById[nodeExecutionScopeId], ); + window.console.log('kai', nodeExecutionScopeId, nodeExecution); const styles = useStyles(); const baseState = state as BaseInterpretedLaunchState; const baseService = service as BaseLaunchService; const [isError, setIsError] = useState(false); const nodeExecutionDataQuery = useNodeExecutionDataQuery({ - id: nodeExecution.id, + id: nodeExecution?.id, }); // Any time the inputs change (even if it's just re-ordering), we must // change the form key so that the inputs component will re-mount. @@ -57,9 +60,9 @@ export const ResumeSignalForm: React.FC = ({ }, [state.context.parsedInputs]); useEffect(() => { - const newNodeExecution = nodeExecutionsById[nodeExecutionId.nodeId]; + const newNodeExecution = nodeExecutionsById[nodeExecutionScopeId]; setNodeExecution(newNodeExecution); - }, [nodeExecutionId.nodeId]); + }, [nodeExecutionScopeId]); return ( <> diff --git a/packages/oss-console/src/components/WorkflowGraph/transformerWorkflowToDag.tsx b/packages/oss-console/src/components/WorkflowGraph/transformerWorkflowToDag.tsx index b45b213bd..a3dbbf5a4 100644 --- a/packages/oss-console/src/components/WorkflowGraph/transformerWorkflowToDag.tsx +++ b/packages/oss-console/src/components/WorkflowGraph/transformerWorkflowToDag.tsx @@ -451,7 +451,6 @@ const parseWorkflow = ({ } const templateNodeList = context.template.nodes; - /* Build Nodes from template */ for (let i = 0; i < templateNodeList.length; i++) { const compiledNode: CompiledNode = templateNodeList[i]; @@ -475,6 +474,28 @@ const parseWorkflow = ({ }; } + /* Build failure node and add downstream connection for edges building */ + const failureNode = { ...context.template.failureNode, failureNode: true }; + if (failureNode && failureNode.id) { + parseNode({ + node: failureNode as CompiledNode, + root, + nodeMetadataMap, + staticExecutionIdsMap, + compiledWorkflowClosure, + }); + nodeMap[failureNode.id] = { + dNode: root.nodes[root.nodes.length - 1], + compiledNode: failureNode as CompiledNode, + }; + if (!context.connections.downstream[startNodeId].ids.includes(failureNode.id)) { + context.connections.downstream[startNodeId].ids.push(failureNode.id); + context.connections.downstream[failureNode.id] = { + ids: [endNodeId], + }; + } + } + /* Build Edges */ buildWorkflowEdges({ root, diff --git a/packages/oss-console/src/components/flytegraph/ReactFlow/PausedTasksComponent.tsx b/packages/oss-console/src/components/flytegraph/ReactFlow/PausedTasksComponent.tsx index 68ce178c7..9866970d7 100644 --- a/packages/oss-console/src/components/flytegraph/ReactFlow/PausedTasksComponent.tsx +++ b/packages/oss-console/src/components/flytegraph/ReactFlow/PausedTasksComponent.tsx @@ -94,6 +94,7 @@ export const PausedTasksComponent: React.FC = ({ nodeExecutionId={nodeExecutionsById[selectedNode.scopedId].id} showLaunchForm={showResumeForm} setShowLaunchForm={setShowResumeForm} + nodeExecutionScopeId={selectedNode.scopedId} /> ) : null} diff --git a/packages/oss-console/src/components/flytegraph/ReactFlow/customNodeComponents.tsx b/packages/oss-console/src/components/flytegraph/ReactFlow/customNodeComponents.tsx index 557554bdb..450a8861e 100644 --- a/packages/oss-console/src/components/flytegraph/ReactFlow/customNodeComponents.tsx +++ b/packages/oss-console/src/components/flytegraph/ReactFlow/customNodeComponents.tsx @@ -315,6 +315,7 @@ const ReactFlowGateNodeInner = ({ data }: RFNode) => { nodeExecutionId={nodeExecution?.id} showLaunchForm={showResumeForm} setShowLaunchForm={setShowResumeForm} + nodeExecutionScopeId={nodeExecution?.scopedId} /> )}