Merge pull request #6276 from LarsNijholt/fix/no-ref/improve-workflow-instance-definition-filtering

Implemented name filter to workflow instance filter and added case insensitivity to searching definitions and instances by name
This commit is contained in:
Sipke Schoorstra 2025-01-10 18:39:58 +01:00 committed by GitHub
commit 279d55c22c
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
4 changed files with 10 additions and 3 deletions

View file

@ -206,7 +206,7 @@ public class EFCoreWorkflowDefinitionStore(EntityStore<ManagementElsaDbContext,
if (filter.Name != null) queryable = queryable.Where(x => 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<bool>(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).

View file

@ -38,6 +38,7 @@ internal class List(IWorkflowInstanceStore store) : ElsaEndpoint<Request, Respon
{
IsSystem = request.IsSystem,
SearchTerm = request.SearchTerm,
Name = request.Name,
DefinitionId = request.DefinitionId,
DefinitionIds = request.DefinitionIds?.Any() == true ? request.DefinitionIds : null,
Version = request.Version,

View file

@ -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);

View file

@ -25,6 +25,11 @@ public class WorkflowInstanceFilter
/// Filter workflow instances that match the specified search term.
/// </summary>
public string? SearchTerm { get; set; }
/// <summary>
/// Filter workflow instances that match the specified name.
/// </summary>
public string? Name { get; set; }
/// <summary>
/// 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!.ToLower().Contains(filter.Name.ToLower()));
if (TimestampFilters != null)
{
@ -160,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)