Skip to content

Commit

Permalink
Merge pull request #472 from serverlessworkflow/fix-dashboard-graph-t…
Browse files Browse the repository at this point in the history
…ransitions

Fixed transitions issues in the Dashboard graph
  • Loading branch information
cdavernas authored Dec 18, 2024
2 parents d7f3452 + 65f8ba6 commit f500741
Show file tree
Hide file tree
Showing 2 changed files with 25 additions and 5 deletions.
22 changes: 17 additions & 5 deletions src/dashboard/Synapse.Dashboard/Services/WorkflowGraphBuilder.cs
Original file line number Diff line number Diff line change
Expand Up @@ -143,7 +143,7 @@ protected virtual void BuildTransitions(INodeViewModel node, TaskNodeRenderingCo
while (!string.IsNullOrWhiteSpace(nextTask?.Definition?.If))
{
this.Logger.LogTrace("[WorkflowGraphBuilder.BuildTransitions][{nodeId}] if clause found, looking up next task.", node.Id);
nextTask = this.GetNextTask(context.TasksList, nextTask.Name);
nextTask = this.GetNextTask(context.TasksList, nextTask.Name, FlowDirective.Continue);
transitions.Add(nextTask);
this.Logger.LogTrace("[WorkflowGraphBuilder.BuildTransitions][{nodeId}] found transition to '{nextTaskName}'", node.Id, nextTask?.Name);
}
Expand Down Expand Up @@ -214,7 +214,7 @@ protected INodeViewModel BuildTaskNode(TaskNodeRenderingContext context)
SwitchTaskDefinition => this.BuildSwitchTaskNode(context.OfType<SwitchTaskDefinition>()),
TryTaskDefinition => this.BuildTryTaskNode(context.OfType<TryTaskDefinition>()),
WaitTaskDefinition => this.BuildWaitTaskNode(context.OfType<WaitTaskDefinition>()),
_ => throw new NotSupportedException($"The specified task type '{context.TaskDefinition?.GetType()}' is not supported")
_ => throw new NotSupportedException($"The specified task type '{context.TaskDefinition?.GetType()}' is not supported. (reference: '{context.TaskReference}')")
} ?? throw new Exception($"Unable to define a last node for task '{context.TaskName}'");
}

Expand Down Expand Up @@ -259,7 +259,8 @@ protected virtual NodeViewModel BuildCallTaskNode(TaskNodeRenderingContext<CallT
break;
}
default:
callType = context.TaskDefinition.Call.ToLower();
callType = "custom-function";
content = context.TaskDefinition.Call.ToLower();
break;
}
var node = new CallTaskNodeViewModel(context.TaskReference, context.TaskName!, content, callType);
Expand Down Expand Up @@ -482,8 +483,19 @@ protected virtual NodeViewModel BuildSwitchTaskNode(TaskNodeRenderingContext<Swi
foreach (var switchCase in context.TaskDefinition.Switch)
{
var switchCaseTask = this.GetNextTask(context.TasksList, context.TaskName, switchCase.Value.Then)!;
var switchCaseNode = this.BuildTaskNode(new(context.Workflow, context.Graph, context.TasksList, switchCaseTask.Index, switchCaseTask.Name, switchCaseTask.Definition, context.TaskGroup, context.ParentReference, context.ParentContext, context.EntryNode, context.ExitNode));
this.BuildEdge(context.Graph, this.GetNodeAnchor(node, NodePortType.Exit), GetNodeAnchor(switchCaseNode, NodePortType.Entry));
if (switchCaseTask.Index != -1)
{
var switchCaseNode = this.BuildTaskNode(new(context.Workflow, context.Graph, context.TasksList, switchCaseTask.Index, switchCaseTask.Name, switchCaseTask.Definition, context.TaskGroup, context.ParentReference, context.ParentContext, context.EntryNode, context.ExitNode));
this.BuildEdge(context.Graph, this.GetNodeAnchor(node, NodePortType.Exit), GetNodeAnchor(switchCaseNode, NodePortType.Entry));
}
else if (switchCaseTask.Name == FlowDirective.Exit)
{
this.BuildEdge(context.Graph, this.GetNodeAnchor(node, NodePortType.Exit), context.ExitNode);
}
else if (switchCaseTask.Name == FlowDirective.End)
{
this.BuildEdge(context.Graph, this.GetNodeAnchor(node, NodePortType.Exit), context.Graph.AllNodes.Skip(1).First().Value);
}
}
if (!context.TaskDefinition.Switch.Any(switchCase => string.IsNullOrEmpty(switchCase.Value.When)))
{
Expand Down
8 changes: 8 additions & 0 deletions src/dashboard/Synapse.Dashboard/wwwroot/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -148,6 +148,14 @@
</g>
<path d="m28 1.6c-1.4-1.4-3.6-1.4-5 0-1 1.1-1.3 2.7-0.6 4l-7.7 7.7c-1.3-0.7-2.9-0.5-4 0.6-1.4 1.4-1.4 3.6 0 5 1.4 1.3 3.6 1.3 5 0 1-1.1 1.3-2.7 0.6-4.1l7.7-7.6c1.3 0.7 2.9 0.4 4-0.7 1.4-1.3 1.4-3.5 0-4.9z" />
</svg>

<!--- from https://www.svgrepo.com/svg/479272/function-1 -->
<svg id="custom-function-symbol" viewBox="0 0 30 30">
<g>
<path d="m15.1 13.9h-2.9c0.1-1 0.3-2 0.4-2.8 0.5-2.6 1.1-5.2 1.7-6.1 0.7-1 2.1-0.6 2.6 0.8 0.3 0.8 1.1 1.3 2 1.2 1.2-0.1 2.1-1.1 2-2.2 0-0.6-0.5-1.4-1.2-1.8-1-0.5-2.2-0.8-3.4-0.8-3.1 0.2-5.5 2.8-6.4 5.8-0.3 1.1-0.8 3.5-1.3 5.9h-3.4l-0.5 2.1h3.5c-0.3 1.5-0.5 2.8-0.6 3.5-0.5 2-1 5.7-2.9 5.9-0.8-0.3-1.1-0.6-1.4-0.9-0.3-0.4-0.9-0.6-1.5-0.6-1.1 0.1-1.9 1-1.8 2 0.1 1.1 1 1.7 2 1.8 5.9 0.5 8.1-3.7 9-7.2 0.1-0.8 0.5-2.6 0.8-4.5h2.8z" />
<path d="m29.6 21.3c-0.4 0-0.8 0.2-0.7 0.6 0.2 1.4-1.4 2.1-2.8 2-2-0.2-2.6-2.3-3.3-4.4q0-0.2-0.1-0.3c0.4-0.7 0.8-1.4 1.1-1.9 0.7-1.2 1.5-2.4 1.9-2.7 0 0 1.1-0.6 1.1 0.9 0 0.4 0.3 0.8 0.7 0.9 0.6 0.2 1.2-0.1 1.4-0.7 0.1-0.3 0-0.8-0.3-1.1-0.4-0.4-1.1-0.8-1.7-1-1.5-0.5-3.1 0.3-4 1.6-0.3 0.3-0.6 0.8-1 1.4-0.5-1.5-1.1-2.7-2.2-3.1-2.5-0.9-3.9 1.1-3.9 1.7 0 0.7 2.1-0.3 3.1 2.3 0.4 0.9 0.7 1.7 1 2.5-0.5 0.8-1.1 1.8-1.4 2.4-0.7 1.2-1.5 2.4-1.9 2.7-0.5 0.4-1.1-0.1-1.1-0.9 0-0.4-0.3-0.7-0.7-0.9-0.6-0.1-1.2 0.2-1.4 0.8-0.1 0.2 0 0.7 0.3 1 0.4 0.4 1.1 0.9 1.7 1.1 1.5 0.4 3.1-0.4 4-1.7 0.3-0.4 0.8-1.2 1.4-2.1q0.1 0.3 0.2 0.6c0.9 2.4 2.8 3.6 5 3.3 3-0.4 3.9-3.4 4-4.6 0 0-0.1-0.4-0.4-0.4z" />
</g>
</svg>
<!-- from https://www.svgrepo.com/svg/435631/exception -->
<svg id="raise-symbol" viewBox="0 0 30 30">
<path fill-rule="evenodd" d="m27.3 10c0.6 1.6 1 3.3 1 5 0 1.8-0.4 3.5-1 5.1-0.7 1.6-1.7 3.1-2.9 4.3-3.8 3.7-9.4 4.8-14.3 2.8-4.9-2.1-8.1-6.9-8.1-12.2 0-5.2 3.2-10 8.1-12.1 4.9-2 10.5-0.9 14.3 2.8 1.2 1.2 2.2 2.7 2.9 4.3zm-10.7 10.8h-3.2v3.2h3.2zm0.3-14.8h-3.8l0.3 11.3h3.2z" />
Expand Down

0 comments on commit f500741

Please sign in to comment.