diff --git a/src/ProductConstructionService/ProductConstructionService.BarViz/Pages/Subscriptions.razor b/src/ProductConstructionService/ProductConstructionService.BarViz/Pages/Subscriptions.razor index fbd684338..b93fbbeac 100644 --- a/src/ProductConstructionService/ProductConstructionService.BarViz/Pages/Subscriptions.razor +++ b/src/ProductConstructionService/ProductConstructionService.BarViz/Pages/Subscriptions.razor @@ -33,20 +33,43 @@ Subscriptions – Maestro++ - +
- - + + +

Enter space deliminated search terms that appear in any field.

+ You can also use special keywords: +
    +
  • :codeflow – must be source-enabled (VMR codeflow)
  • +
  • :disabled – must be disabled
  • +
  • :haspr – with an active PR
  • +
  • Prefix the search terms to specify which field they match: +
      +
    • source: – Source repository
    • +
    • target: – Target repository
    • +
    • branch: – Target branch
    • +
    • channel: – Channel name
    • +
    +
  • +
+ Example: target:dotnet/sdk channel:10 :haspr
+ All subscriptions to dotnet/sdk from channel containg 10 that have an ongoing PR. +
+ + + + + ValueChanged="@SetDisabled" />
@@ -94,7 +117,7 @@ } - + @(context.LastAppliedBuild == null ? "N/A" : (DateTime.UtcNow - context.LastAppliedBuild.DateProduced).ToTimeAgo()) @@ -174,20 +197,21 @@ bool IsMatch(Subscription subscription, string filter) { - if (filter.ToLowerInvariant() == "codeflow" && subscription.SourceEnabled) - { - return true; - } - - if (filter.ToLowerInvariant() == "disabled" && !subscription.Enabled) + return filter.Trim().ToLowerInvariant() switch { - return true; - } - - return subscription.SourceRepository.Contains(filter, StringComparison.OrdinalIgnoreCase) - || subscription.TargetRepository.Contains(filter, StringComparison.OrdinalIgnoreCase) - || subscription.TargetBranch.Contains(filter, StringComparison.OrdinalIgnoreCase) - || subscription.Channel.Name.Contains(filter, StringComparison.OrdinalIgnoreCase); + ":codeflow" => subscription.SourceEnabled, + ":disabled" => !subscription.Enabled, + ":haspr" => PullRequests.ContainsKey(subscription.Id), + ['s', 'o', 'u', 'r', 'c', 'e', ':', .. var f] => subscription.SourceRepository.Contains(f, StringComparison.OrdinalIgnoreCase), + ['t', 'a', 'r', 'g', 'e', 't', ':', .. var f] => subscription.TargetRepository.Contains(f, StringComparison.OrdinalIgnoreCase), + ['b', 'r', 'a', 'n', 'c', 'h', ':', .. var f] => subscription.TargetBranch.Contains(f, StringComparison.OrdinalIgnoreCase), + ['c', 'h', 'a', 'n', 'n', 'e', 'l', ':', .. var f] => subscription.Channel.Name.Contains(f, StringComparison.OrdinalIgnoreCase), + _ => subscription.Id.ToString().Contains(filter, StringComparison.OrdinalIgnoreCase) + || subscription.SourceRepository.Contains(filter, StringComparison.OrdinalIgnoreCase) + || subscription.TargetRepository.Contains(filter, StringComparison.OrdinalIgnoreCase) + || subscription.TargetBranch.Contains(filter, StringComparison.OrdinalIgnoreCase) + || subscription.Channel.Name.Contains(filter, StringComparison.OrdinalIgnoreCase) + }; } async Task ShowDetails(Subscription subscription)