From 35a93ba976147f934a5cb429a832b59db9289aad Mon Sep 17 00:00:00 2001 From: Premek Vysoky Date: Thu, 30 Jan 2025 00:20:51 +0100 Subject: [PATCH 1/5] Improve subscription page UX - Added more filters + a pop-up legend - Fixed sorting by last updated - Fixed the disabled toggle semantics --- .../Pages/Subscriptions.razor | 66 +++++++++++++------ 1 file changed, 45 insertions(+), 21 deletions(-) diff --git a/src/ProductConstructionService/ProductConstructionService.BarViz/Pages/Subscriptions.razor b/src/ProductConstructionService/ProductConstructionService.BarViz/Pages/Subscriptions.razor index fbd684338..9eb081dc3 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
  • +
  • Prefixes 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.SourceRepository.Contains(filter, StringComparison.OrdinalIgnoreCase) + || subscription.Id.ToStrong().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) From 17bd51645815c4a83650a6bf955b158a78074b0f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?P=C5=99emek=20Vysok=C3=BD?= Date: Thu, 30 Jan 2025 13:15:20 +0100 Subject: [PATCH 2/5] Fix the build --- .../ProductConstructionService.BarViz/Pages/Subscriptions.razor | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/ProductConstructionService/ProductConstructionService.BarViz/Pages/Subscriptions.razor b/src/ProductConstructionService/ProductConstructionService.BarViz/Pages/Subscriptions.razor index 9eb081dc3..b167ea8c4 100644 --- a/src/ProductConstructionService/ProductConstructionService.BarViz/Pages/Subscriptions.razor +++ b/src/ProductConstructionService/ProductConstructionService.BarViz/Pages/Subscriptions.razor @@ -207,7 +207,7 @@ ['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.SourceRepository.Contains(filter, StringComparison.OrdinalIgnoreCase) - || subscription.Id.ToStrong().Contains(filter, StringComparison.OrdinalIgnoreCase) + || subscription.Id.ToString().Contains(filter, StringComparison.OrdinalIgnoreCase) || subscription.TargetRepository.Contains(filter, StringComparison.OrdinalIgnoreCase) || subscription.TargetBranch.Contains(filter, StringComparison.OrdinalIgnoreCase) || subscription.Channel.Name.Contains(filter, StringComparison.OrdinalIgnoreCase) From e918325d130a98c412bc6cbcb1dca8dffd010927 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?P=C5=99emek=20Vysok=C3=BD?= Date: Thu, 30 Jan 2025 17:11:37 +0100 Subject: [PATCH 3/5] Update src/ProductConstructionService/ProductConstructionService.BarViz/Pages/Subscriptions.razor --- .../Pages/Subscriptions.razor | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/ProductConstructionService/ProductConstructionService.BarViz/Pages/Subscriptions.razor b/src/ProductConstructionService/ProductConstructionService.BarViz/Pages/Subscriptions.razor index b167ea8c4..1890df8e0 100644 --- a/src/ProductConstructionService/ProductConstructionService.BarViz/Pages/Subscriptions.razor +++ b/src/ProductConstructionService/ProductConstructionService.BarViz/Pages/Subscriptions.razor @@ -206,11 +206,11 @@ ['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.SourceRepository.Contains(filter, StringComparison.OrdinalIgnoreCase) - || subscription.Id.ToString().Contains(filter, StringComparison.OrdinalIgnoreCase) - || subscription.TargetRepository.Contains(filter, StringComparison.OrdinalIgnoreCase) - || subscription.TargetBranch.Contains(filter, StringComparison.OrdinalIgnoreCase) - || subscription.Channel.Name.Contains(filter, StringComparison.OrdinalIgnoreCase) + _ => subscription.Id.ToString().Contains(f, StringComparison.OrdinalIgnoreCase) + || subscription.SourceRepository.Contains(f, StringComparison.OrdinalIgnoreCase) + || subscription.TargetRepository.Contains(f, StringComparison.OrdinalIgnoreCase) + || subscription.TargetBranch.Contains(f, StringComparison.OrdinalIgnoreCase) + || subscription.Channel.Name.Contains(f, StringComparison.OrdinalIgnoreCase) }; } From d89e4a15e562b012414a3eb6ec75029fce079662 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?P=C5=99emek=20Vysok=C3=BD?= Date: Thu, 30 Jan 2025 17:12:11 +0100 Subject: [PATCH 4/5] Update src/ProductConstructionService/ProductConstructionService.BarViz/Pages/Subscriptions.razor --- .../Pages/Subscriptions.razor | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/ProductConstructionService/ProductConstructionService.BarViz/Pages/Subscriptions.razor b/src/ProductConstructionService/ProductConstructionService.BarViz/Pages/Subscriptions.razor index 1890df8e0..d63cf1867 100644 --- a/src/ProductConstructionService/ProductConstructionService.BarViz/Pages/Subscriptions.razor +++ b/src/ProductConstructionService/ProductConstructionService.BarViz/Pages/Subscriptions.razor @@ -206,11 +206,11 @@ ['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(f, StringComparison.OrdinalIgnoreCase) - || subscription.SourceRepository.Contains(f, StringComparison.OrdinalIgnoreCase) - || subscription.TargetRepository.Contains(f, StringComparison.OrdinalIgnoreCase) - || subscription.TargetBranch.Contains(f, StringComparison.OrdinalIgnoreCase) - || 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) }; } From 15910e3beaab0e08541a098d65e349afe0a77fb5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?P=C5=99emek=20Vysok=C3=BD?= Date: Thu, 30 Jan 2025 18:11:41 +0100 Subject: [PATCH 5/5] Update src/ProductConstructionService/ProductConstructionService.BarViz/Pages/Subscriptions.razor --- .../ProductConstructionService.BarViz/Pages/Subscriptions.razor | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/ProductConstructionService/ProductConstructionService.BarViz/Pages/Subscriptions.razor b/src/ProductConstructionService/ProductConstructionService.BarViz/Pages/Subscriptions.razor index d63cf1867..b93fbbeac 100644 --- a/src/ProductConstructionService/ProductConstructionService.BarViz/Pages/Subscriptions.razor +++ b/src/ProductConstructionService/ProductConstructionService.BarViz/Pages/Subscriptions.razor @@ -52,7 +52,7 @@
  • :codeflow – must be source-enabled (VMR codeflow)
  • :disabled – must be disabled
  • :haspr – with an active PR
  • -
  • Prefixes the search terms to specify which field they match: +
  • Prefix the search terms to specify which field they match:
    • source: – Source repository
    • target: – Target repository