diff --git a/.github/workflows/uno-dotnet.yml b/.github/workflows/uno-dotnet.yml index 65970027..43622b06 100644 --- a/.github/workflows/uno-dotnet.yml +++ b/.github/workflows/uno-dotnet.yml @@ -5,15 +5,13 @@ on: push: branches: - master - - release/** pull_request: types: [opened, synchronize, reopened] branches: - master - - release/** - + permissions: contents: write @@ -22,25 +20,6 @@ env: CONFIGURATION: Release dotnetVersion: 10.0.x jobs: - # smoke_test: - # name: Smoke Test (Debug Build of AzureKeyVaultStudio) - # runs-on: windows-latest - # steps: - # - uses: actions/checkout@v3 - # with: - # fetch-depth: 0 - - # - name: Install Dependencies - # timeout-minutes: ${{ fromJSON(env.STEP_TIMEOUT_MINUTES) }} - # uses: "./.github/steps/install_dependencies" - - # - name: Setup MSBuild - # uses: microsoft/setup-msbuild@v1.3.1 - - # - name: Build AzureKeyVaultStudio (Debug) - # shell: pwsh - # run: msbuild ./src/uno/AzureKeyVaultStudio/AzureKeyVaultStudio.csproj /r - build_windows_x64: name: Build Windows x64 runs-on: windows-latest @@ -203,7 +182,7 @@ jobs: name: Release Packages needs: [build_windows_x64, build_windows_arm64, build_macos_x64, build_macos_arm64, build_linux] runs-on: ubuntu-latest - if: github.event_name == 'push' && github.ref == 'refs/heads/master' + if: github.ref == 'refs/heads/master' steps: - uses: actions/checkout@v4 - name: Download all artifacts diff --git a/src/uno/AzureKeyVaultStudio/AzureKeyVaultStudio/Models/FilterService.cs b/src/uno/AzureKeyVaultStudio/AzureKeyVaultStudio/Models/FilterService.cs index 0037414c..2d669620 100644 --- a/src/uno/AzureKeyVaultStudio/AzureKeyVaultStudio/Models/FilterService.cs +++ b/src/uno/AzureKeyVaultStudio/AzureKeyVaultStudio/Models/FilterService.cs @@ -6,6 +6,14 @@ namespace AzureKeyVaultStudio.Models; public static class FilterService { + public static void ResetVisibility(IEnumerable nodes, bool isVisible = true) + { + foreach (var node in nodes) + { + node.IsVisible = isVisible; + ResetVisibility(node.Children, isVisible); + } + } public static IList Filter(IList allSubscriptions, string query) { if (allSubscriptions == null || allSubscriptions.Count == 0) @@ -14,6 +22,7 @@ public static IList Filter(IList allSu } if (string.IsNullOrWhiteSpace(query)) { + ResetVisibility(allSubscriptions); return allSubscriptions; } @@ -30,7 +39,14 @@ static void SetSubscriptionExpanded(KvSubscriptionModel model, bool value) model.IsExpanded = value; } } + static void SetResourceGroupVisible(KvResourceGroupModel model, bool value) + { + if (model.IsVisible != value) + { + model.IsVisible = value; + } + } static void SetResourceGroupExpanded(KvResourceGroupModel model, bool value) { if (model.IsExpanded != value) @@ -59,7 +75,6 @@ static void SetResourceGroupExpanded(KvResourceGroupModel model, bool value) { SetSubscriptionExpanded(subscription, true); } - foreach (var resourceGroup in subscription.Children.OfType()) { bool resourceGroupMatch = false; @@ -70,6 +85,7 @@ static void SetResourceGroupExpanded(KvResourceGroupModel model, bool value) SetSubscriptionExpanded(subscription, true); resourceGroupMatch = true; isMatch = true; + resourceGroup.Children.ForEach(x => x.IsVisible = true); } else { @@ -84,14 +100,22 @@ static void SetResourceGroupExpanded(KvResourceGroupModel model, bool value) { SetResourceGroupExpanded(resourceGroup, true); SetSubscriptionExpanded(subscription, true); + SetResourceGroupVisible(resourceGroup, true); resourceGroupMatch = true; isMatch = true; + keyVault.IsVisible = true; break; } + else + { + SetResourceGroupVisible(resourceGroup, value: false); + keyVault.IsVisible = false; + } } } - SetResourceGroupExpanded(resourceGroup, true); + SetResourceGroupExpanded(resourceGroup, resourceGroupMatch); + SetResourceGroupVisible(resourceGroup, value: resourceGroupMatch); } if (isMatch) @@ -101,6 +125,7 @@ static void SetResourceGroupExpanded(KvResourceGroupModel model, bool value) else { SetSubscriptionExpanded(subscription, true); + ResetVisibility(subscription.Children, true); } } diff --git a/src/uno/AzureKeyVaultStudio/AzureKeyVaultStudio/Models/KeyVaultModel.cs b/src/uno/AzureKeyVaultStudio/AzureKeyVaultStudio/Models/KeyVaultModel.cs index f6fb8e7e..71faf356 100644 --- a/src/uno/AzureKeyVaultStudio/AzureKeyVaultStudio/Models/KeyVaultModel.cs +++ b/src/uno/AzureKeyVaultStudio/AzureKeyVaultStudio/Models/KeyVaultModel.cs @@ -16,6 +16,9 @@ public abstract partial class KvTreeNodeModel : ObservableObject [ObservableProperty] public partial bool IsExpanded { get; set; } + [ObservableProperty] + public partial bool IsVisible { get; set; } = true; + public string DisplayName { get; set; } = null!; public ObservableCollection Children { get; } = []; diff --git a/src/uno/AzureKeyVaultStudio/AzureKeyVaultStudio/UserControls/ItemDetails.xaml b/src/uno/AzureKeyVaultStudio/AzureKeyVaultStudio/UserControls/ItemDetails.xaml index 8e0f53d4..ae0700be 100644 --- a/src/uno/AzureKeyVaultStudio/AzureKeyVaultStudio/UserControls/ItemDetails.xaml +++ b/src/uno/AzureKeyVaultStudio/AzureKeyVaultStudio/UserControls/ItemDetails.xaml @@ -70,12 +70,12 @@ x:Uid="ItemDetailsEditAppBarButton" Click="OnEditVersionClick" Icon="Edit" - Visibility="{x:Bind ViewModel.ShowEditVersionButton, Mode=OneWay, Converter={StaticResource BoolToVisibilityConverter}, ConverterParameter=ViewModel.ShowEditVersionButton}" /> + Visibility="{x:Bind ViewModel.ShowEditVersionButton, Mode=OneWay, Converter={StaticResource BoolToVisibilityConverter}}" /> + Visibility="{x:Bind ViewModel.ShowNewVersionButton, Mode=OneWay, Converter={StaticResource BoolToVisibilityConverter}}" /> + ItemsSource="{x:Bind Children, Mode=OneWay}" + Visibility="{x:Bind IsVisible, Mode=OneWay, Converter={StaticResource BoolToVisibilityConverter}}"> (); + var subscriptionModel = new List(); var resource = _vaultService.GetKeyVaultResourceBySubscription(); try @@ -164,8 +165,8 @@ private async Task InitializeTreeDataSource(CancellationToken token) }; var savedItems = DbContext.GetQuickAccessItemsAsyncEnumerable(_authService.TenantId ?? null); - var tokenString = await _authService.GetAzureArmTokenSilent(); - var tokenCredential = new CustomTokenCredential(tokenString); + var tokenResult = await _authService.GetAzureArmTokenSilent(); + var tokenCredential = new CustomTokenCredential(tokenResult); var armClient = new ArmClient(tokenCredential); await foreach (var item in savedItems) @@ -213,7 +214,6 @@ private async Task InitializeTreeDataSource(CancellationToken token) TreeDataSource = new ObservableCollection(subscriptionModel); }); } - TreeDataSourceReadOnly = [.. subscriptionModel]; } finally @@ -321,21 +321,15 @@ private Task ExecuteSearch(CancellationToken token) { _dispatcher.TryEnqueue(() => { - SelectedItem = null; - TreeDataSource = []; + FilterService.ResetVisibility(TreeDataSourceReadOnly, true); TreeDataSource = new ObservableCollection(TreeDataSourceReadOnly); }); return Task.CompletedTask; } - var source = TreeDataSourceReadOnly.Count > 0 - ? TreeDataSourceReadOnly - : [.. TreeDataSource]; - - var results = FilterService.Filter(source, SearchQuery); + var results = FilterService.Filter(TreeDataSourceReadOnly, SearchQuery); _dispatcher.TryEnqueue(() => { - SelectedItem = null; TreeDataSource = new ObservableCollection(results); }); @@ -351,7 +345,7 @@ private async Task OpenInAzure(KeyVaultResource model) } [RelayCommand] - private void OpenInNewTab(KeyVaultResource model) + private static void OpenInNewTab(KeyVaultResource model) { if (model is KeyVaultResource) {