Implement delete activity
This commit is contained in:
parent
c6d68875c1
commit
7cbfa2d4f1
|
|
@ -4,6 +4,7 @@
|
|||
<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=src_005Cweb_005Cmodules_005CFlowsharp_002EWeb_002EViewComponents_005CClientApp_005Cnode_005Fmodules/@EntryIndexedValue"></s:String>
|
||||
<s:Boolean x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=src_005Cweb_005Cmodules_005CFlowsharp_002EWeb_002EViewComponents_005CClientApp_005Cnode_005Fmodules/@EntryIndexRemoved">True</s:Boolean>
|
||||
<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=src_005Cweb_005Cmodules_005CFlowsharp_002EWeb_002EViewComponents_005CAssets_005Cnode_005Fmodules/@EntryIndexedValue">ExplicitlyExcluded</s:String>
|
||||
<s:Boolean x:Key="/Default/CodeStyle/CodeFormatting/CSharpFormat/SPACE_WITHIN_SINGLE_LINE_ARRAY_INITIALIZER_BRACES/@EntryValue">True</s:Boolean>
|
||||
<s:Boolean x:Key="/Default/CodeStyle/CodeFormatting/CSharpFormat/WRAP_LINES/@EntryValue">False</s:Boolean>
|
||||
<s:Boolean x:Key="/Default/Environment/SettingsMigration/IsMigratorApplied/=JetBrains_002EReSharper_002EPsi_002ECSharp_002ECodeStyle_002ECSharpKeepExistingMigration/@EntryIndexedValue">True</s:Boolean>
|
||||
<s:Boolean x:Key="/Default/Environment/SettingsMigration/IsMigratorApplied/=JetBrains_002EReSharper_002EPsi_002ECSharp_002ECodeStyle_002ECSharpPlaceEmbeddedOnSameLineMigration/@EntryIndexedValue">True</s:Boolean>
|
||||
|
|
|
|||
|
|
@ -2,6 +2,7 @@
|
|||
using System.Collections.Generic;
|
||||
using System.Collections.Immutable;
|
||||
using System.Linq;
|
||||
using ElsaDashboard.Application.Extensions;
|
||||
|
||||
namespace ElsaDashboard.Application.Models
|
||||
{
|
||||
|
|
@ -18,9 +19,23 @@ namespace ElsaDashboard.Application.Models
|
|||
public IImmutableList<ConnectionModel> Connections { get; init; } = Array.Empty<ConnectionModel>().ToImmutableList();
|
||||
|
||||
public static WorkflowModel Blank() => new("New Workflow");
|
||||
public WorkflowModel AddActivity(ActivityModel activity) => this with { Activities = Activities.Add(activity)};
|
||||
public WorkflowModel RemoveActivity(ActivityModel activity) => this with { Activities = Activities.Where(x => x != activity).ToImmutableList()};
|
||||
public WorkflowModel AddConnection(ConnectionModel connection) => this with { Connections = Connections.Add(connection)};
|
||||
public WorkflowModel AddActivity(ActivityModel activity) => this with { Activities = Activities.Add(activity) };
|
||||
public WorkflowModel AddConnection(ConnectionModel connection) => this with { Connections = Connections.Add(connection) };
|
||||
public WorkflowModel AddConnection(string sourceId, string targetId, string outcome) => AddConnection(new ConnectionModel(sourceId, targetId, outcome));
|
||||
public WorkflowModel RemoveConnection(ConnectionModel connection) => this with { Connections = Connections.Remove(connection) };
|
||||
public ActivityModel FindActivity(string activityId) => Activities.First(x => x.ActivityId == activityId);
|
||||
|
||||
public WorkflowModel RemoveActivity(ActivityModel activity)
|
||||
{
|
||||
var inboundConnections = this.GetInboundConnections(activity.ActivityId);
|
||||
var outboundConnections = this.GetOutboundConnections(activity.ActivityId);
|
||||
var connectionsToRemove = inboundConnections.Concat(outboundConnections).ToList();
|
||||
|
||||
return this with
|
||||
{
|
||||
Activities = Activities.Where(x => x != activity).ToImmutableList(),
|
||||
Connections = Connections.Where(x => !connectionsToRemove.Contains(x)).ToImmutableList()
|
||||
};
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -1,4 +1,4 @@
|
|||
<div class="p-10 bg-gray-100">
|
||||
<div class="flex flex-1 bg-gray-100 px-4 pt-4">
|
||||
<div class="space-y-6 sm:px-6 lg:px-0 lg:col-span-9">
|
||||
<section aria-labelledby="payment_details_heading">
|
||||
<EditForm EditContext="@EditContext">
|
||||
|
|
@ -20,7 +20,7 @@
|
|||
|
||||
<div class="col-span-4 sm:col-span-2">
|
||||
<label for="workflowDisplayName" class="block text-sm font-medium text-gray-700">Display Name</label>
|
||||
<InputText @bind-Value="@WorkflowDefinition.DisplayName" type="text" id="workflowDisplayName" class="mt-1 block w-full border border-gray-300 rounded-md shadow-sm py-2 px-3 focus:outline-none sm:text-sm"/>
|
||||
<InputText @bind-Value="WorkflowDefinition.DisplayName" type="text" id="workflowDisplayName" class="mt-1 block w-full border border-gray-300 rounded-md shadow-sm py-2 px-3 focus:outline-none sm:text-sm"/>
|
||||
<p class="mt-2 text-sm text-gray-500">
|
||||
Enter a human-friendly name.
|
||||
</p>
|
||||
|
|
|
|||
|
|
@ -0,0 +1,2 @@
|
|||
@inherits Microsoft.AspNetCore.Components.Forms.InputText
|
||||
<input @attributes="@AdditionalAttributes" class="@CssClass" @bind="@CurrentValueAsString" @bind:event="oninput" />
|
||||
|
|
@ -233,6 +233,27 @@ namespace ElsaDashboard.Application.Shared
|
|||
await FlyoutPanelService.HideAsync();
|
||||
}
|
||||
|
||||
private async Task RemoveActivityAsync(ActivityModel activityModel)
|
||||
{
|
||||
var incomingConnections = Model.GetInboundConnections(activityModel.ActivityId).ToList();
|
||||
var outgoingConnections = Model.GetOutboundConnections(activityModel.ActivityId).ToList();
|
||||
|
||||
// Remove activity (will also remove its connections).
|
||||
var model = Model.RemoveActivity(activityModel);
|
||||
|
||||
// For each incoming activity, try to connect it to a outgoing activity based on outcome.
|
||||
foreach (var incomingConnection in incomingConnections)
|
||||
{
|
||||
var incomingActivity = model.FindActivity(incomingConnection.SourceId);
|
||||
var outgoingConnection = outgoingConnections.FirstOrDefault(x => x.Outcome == incomingConnection.Outcome);
|
||||
|
||||
if (outgoingConnection != null)
|
||||
model = model.AddConnection(incomingActivity.ActivityId, outgoingConnection.TargetId, incomingConnection.Outcome);
|
||||
}
|
||||
|
||||
await UpdateModelAsync(model);
|
||||
}
|
||||
|
||||
private RenderFragment RenderActivity(ActivityModel activityModel)
|
||||
{
|
||||
return builder =>
|
||||
|
|
@ -278,7 +299,7 @@ namespace ElsaDashboard.Application.Shared
|
|||
ButtonDescriptor.Create("OK", _ => AddActivityAsync(activityInfo, sourceActivityId, targetActivityId, outcome), true));
|
||||
}
|
||||
|
||||
private async Task OnActivityDelete(ActivityModel activityModel) => await UpdateModelAsync(Model.RemoveActivity(activityModel));
|
||||
private async Task OnActivityDelete(ActivityModel activityModel) => await RemoveActivityAsync(activityModel);
|
||||
private async ValueTask OnActivityClick(MouseEventArgs e) => await FlyoutPanelService.ShowAsync<ActivityEditor>("Timer Properties");
|
||||
private async Task OnConnectionCreatedAsync(ConnectionModel connection) => await UpdateModelAsync(Model.AddConnection(connection));
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in a new issue