From 1c9328597f07a8a5a9cbc9cd6020bd819ef6f44c Mon Sep 17 00:00:00 2001 From: Lars Nijholt Date: Tue, 7 Jan 2025 14:34:14 +0100 Subject: [PATCH 1/5] Add workflow name property to workflow instance filter. Add the name property to the workflow instance filter to make use of the name property that can be used in the Request class for the list endpoint. This allows us to filter purely on workflow instance name without using the SearchTerm --- .../Endpoints/WorkflowInstances/List/Endpoint.cs | 1 + .../Filters/WorkflowInstanceFilter.cs | 6 ++++++ 2 files changed, 7 insertions(+) diff --git a/src/modules/Elsa.Workflows.Api/Endpoints/WorkflowInstances/List/Endpoint.cs b/src/modules/Elsa.Workflows.Api/Endpoints/WorkflowInstances/List/Endpoint.cs index a69047659..785de7b1d 100644 --- a/src/modules/Elsa.Workflows.Api/Endpoints/WorkflowInstances/List/Endpoint.cs +++ b/src/modules/Elsa.Workflows.Api/Endpoints/WorkflowInstances/List/Endpoint.cs @@ -38,6 +38,7 @@ internal class List(IWorkflowInstanceStore store) : ElsaEndpoint public string? SearchTerm { get; set; } + + /// + /// Filter workflow instances that match the specified name. + /// + public string? Name { get; set; } /// /// Filter workflow instances by definition ID. @@ -125,6 +130,7 @@ public class WorkflowInstanceFilter if (filter.WorkflowSubStatuses != null) query = query.Where(x => filter.WorkflowSubStatuses.Contains(x.SubStatus)); if (filter.HasIncidents != null) query = filter.HasIncidents == true ? query.Where(x => x.IncidentCount > 0) : query.Where(x => x.IncidentCount == 0); if (filter.IsSystem != null) query = query.Where(x => x.IsSystem == filter.IsSystem); + if (filter.Name != null) query = query.Where(x => x.Name!.Contains(filter.Name, StringComparison.InvariantCultureIgnoreCase)); if (TimestampFilters != null) { From e48010e3f93cd04d6d44677ddb534e4fbabe0a66 Mon Sep 17 00:00:00 2001 From: Lars Nijholt Date: Tue, 7 Jan 2025 14:46:03 +0100 Subject: [PATCH 2/5] Use ToLower method for comparison --- .../Elsa.Workflows.Management/Filters/WorkflowInstanceFilter.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/modules/Elsa.Workflows.Management/Filters/WorkflowInstanceFilter.cs b/src/modules/Elsa.Workflows.Management/Filters/WorkflowInstanceFilter.cs index 6b6ea9ec8..89ebafd46 100644 --- a/src/modules/Elsa.Workflows.Management/Filters/WorkflowInstanceFilter.cs +++ b/src/modules/Elsa.Workflows.Management/Filters/WorkflowInstanceFilter.cs @@ -130,7 +130,7 @@ public class WorkflowInstanceFilter if (filter.WorkflowSubStatuses != null) query = query.Where(x => filter.WorkflowSubStatuses.Contains(x.SubStatus)); if (filter.HasIncidents != null) query = filter.HasIncidents == true ? query.Where(x => x.IncidentCount > 0) : query.Where(x => x.IncidentCount == 0); if (filter.IsSystem != null) query = query.Where(x => x.IsSystem == filter.IsSystem); - if (filter.Name != null) query = query.Where(x => x.Name!.Contains(filter.Name, StringComparison.InvariantCultureIgnoreCase)); + if (filter.Name != null) query = query.Where(x => x.Name!.ToLower().Contains(filter.Name.ToLower())); if (TimestampFilters != null) { From 788e6f7a0f099f41c4818c9fcd426e7dded35f76 Mon Sep 17 00:00:00 2001 From: Lars Nijholt Date: Tue, 7 Jan 2025 14:53:21 +0100 Subject: [PATCH 3/5] Add case insensitivity to the name and description of the workflow definition filter --- .../Filters/WorkflowDefinitionFilter.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/modules/Elsa.Workflows.Management/Filters/WorkflowDefinitionFilter.cs b/src/modules/Elsa.Workflows.Management/Filters/WorkflowDefinitionFilter.cs index b69f486ad..9b6d6d16f 100644 --- a/src/modules/Elsa.Workflows.Management/Filters/WorkflowDefinitionFilter.cs +++ b/src/modules/Elsa.Workflows.Management/Filters/WorkflowDefinitionFilter.cs @@ -102,7 +102,7 @@ public class WorkflowDefinitionFilter if (Name != null) queryable = queryable.Where(x => x.Name == Name); if (Names != null) queryable = queryable.Where(x => Names.Contains(x.Name!)); if (UsableAsActivity != null) queryable = queryable.Where(x => x.Options.UsableAsActivity == UsableAsActivity); - if (!string.IsNullOrWhiteSpace(SearchTerm)) queryable = queryable.Where(x => x.Name!.Contains(SearchTerm) || x.Description!.Contains(SearchTerm) || x.Id.Contains(SearchTerm) || x.DefinitionId.Contains(SearchTerm)); + if (!string.IsNullOrWhiteSpace(SearchTerm)) queryable = queryable.Where(x => x.Name!.ToLower().Contains(SearchTerm.ToLower()) || x.Description!.ToLower().Contains(SearchTerm.ToLower()) || x.Id.Contains(SearchTerm) || x.DefinitionId.Contains(SearchTerm)); if (IsSystem != null) queryable = queryable.Where(x => x.IsSystem == IsSystem); if (IsReadonly != null) queryable = queryable.Where(x => x.IsReadonly == IsReadonly); From dc2def3ad9887a89ca161effe0d127cebf27182d Mon Sep 17 00:00:00 2001 From: Lars Nijholt Date: Tue, 7 Jan 2025 15:43:56 +0100 Subject: [PATCH 4/5] Add string comparison for searching definitions case insensitively to EfCoreWorkflowDefinitionStore --- .../Modules/Management/WorkflowDefinitionStore.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/modules/Elsa.EntityFrameworkCore/Modules/Management/WorkflowDefinitionStore.cs b/src/modules/Elsa.EntityFrameworkCore/Modules/Management/WorkflowDefinitionStore.cs index 02e5286c1..226bb40e9 100644 --- a/src/modules/Elsa.EntityFrameworkCore/Modules/Management/WorkflowDefinitionStore.cs +++ b/src/modules/Elsa.EntityFrameworkCore/Modules/Management/WorkflowDefinitionStore.cs @@ -206,7 +206,7 @@ public class EFCoreWorkflowDefinitionStore(EntityStore x.Name == filter.Name); if (filter.Names != null) queryable = queryable.Where(x => filter.Names.Contains(x.Name!)); if (filter.UsableAsActivity != null) queryable = queryable.Where(x => EF.Property(x, "UsableAsActivity") == filter.UsableAsActivity); - if (!string.IsNullOrWhiteSpace(filter.SearchTerm)) queryable = queryable.Where(x => x.Name!.Contains(filter.SearchTerm) || x.Description!.Contains(filter.SearchTerm) || x.Id.Contains(filter.SearchTerm) || x.DefinitionId.Contains(filter.SearchTerm)); + if (!string.IsNullOrWhiteSpace(filter.SearchTerm)) queryable = queryable.Where(x => x.Name!.ToLower().Contains(filter.SearchTerm.ToLower()) || x.Description!.ToLower().Contains(filter.SearchTerm.ToLower()) || x.Id.Contains(filter.SearchTerm) || x.DefinitionId.Contains(filter.SearchTerm)); // TEMP: IsSystem may be null when upgrading from older versions of Elsa to 3.2. See issue #5366. // In a future version, we should remove this check and simply do queryable.Where(x => x.IsSystem == filter.IsSystem). From 05f8bc640b2bead6ee57693232690843cc56ea9e Mon Sep 17 00:00:00 2001 From: Lars Nijholt Date: Tue, 7 Jan 2025 16:00:20 +0100 Subject: [PATCH 5/5] Add case insensitivity to the search term of the WorkflowInstanceFilter --- .../Elsa.Workflows.Management/Filters/WorkflowInstanceFilter.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/modules/Elsa.Workflows.Management/Filters/WorkflowInstanceFilter.cs b/src/modules/Elsa.Workflows.Management/Filters/WorkflowInstanceFilter.cs index 89ebafd46..f279df52a 100644 --- a/src/modules/Elsa.Workflows.Management/Filters/WorkflowInstanceFilter.cs +++ b/src/modules/Elsa.Workflows.Management/Filters/WorkflowInstanceFilter.cs @@ -166,7 +166,7 @@ public class WorkflowInstanceFilter { query = from instance in query - where instance.Name!.Contains(searchTerm) + where instance.Name!.ToLower().Contains(searchTerm.ToLower()) || instance.DefinitionVersionId.Contains(searchTerm) || instance.DefinitionId.Contains(searchTerm) || instance.Id.Contains(searchTerm)