Skip to content

Commit 0f53c3d

Browse files
Fix Critical bug with tree view, bump versions (#163)
* chore: bump versions [skip ci] * revert back to xbind [skip ci] * chore: bump versions [skip ci] * update treeview based on winui bug
1 parent 6c13cd5 commit 0f53c3d

10 files changed

Lines changed: 153 additions & 227 deletions

File tree

src/uno/AzureKeyVaultStudio/AzureKeyVaultStudio/AzureKeyVaultStudio.csproj

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
<AssemblyName>AzureKeyVaultStudio</AssemblyName>
1313
<ApplicationId>io.github.cricketthomas.AzureKeyVaultExplorer</ApplicationId>
1414

15-
<ApplicationDisplayVersion>2.0.2.0</ApplicationDisplayVersion>
15+
<ApplicationDisplayVersion>2.0.4.0</ApplicationDisplayVersion>
1616
<ApplicationVersion>2</ApplicationVersion>
1717

1818
<ApplicationPublisher>cricketthomas</ApplicationPublisher>
@@ -46,7 +46,6 @@
4646

4747
<PackageProjectUrl>https://github.com/cricketthomas/AzureKeyVaultExplorer</PackageProjectUrl>
4848
<RepositoryUrl>https://github.com/cricketthomas/AzureKeyVaultExplorer</RepositoryUrl>
49-
<!--<PackageCertificateThumbprint>E4195D2ADEDE635ECA12FE4B675B3399C8D3B74A</PackageCertificateThumbprint>-->
5049
<AppxPackageSigningEnabled>False</AppxPackageSigningEnabled>
5150
<GenerateTemporaryStoreCertificate>True</GenerateTemporaryStoreCertificate>
5251
<GenerateAppInstallerFile>False</GenerateAppInstallerFile>

src/uno/AzureKeyVaultStudio/AzureKeyVaultStudio/Models/FilterService.cs

Lines changed: 5 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
11
using System.Collections.ObjectModel;
2+
using System.Linq;
3+
using static AzureKeyVaultStudio.Models.KvTreeNodeModel;
24

35
namespace AzureKeyVaultStudio.Models;
46

@@ -58,7 +60,7 @@ static void SetResourceGroupExpanded(KvResourceGroupModel model, bool value)
5860
SetSubscriptionExpanded(subscription, true);
5961
}
6062

61-
foreach (var resourceGroup in subscription.ResourceGroups)
63+
foreach (var resourceGroup in subscription.Children.OfType<KvResourceGroupModel>())
6264
{
6365
bool resourceGroupMatch = false;
6466

@@ -76,9 +78,9 @@ static void SetResourceGroupExpanded(KvResourceGroupModel model, bool value)
7678

7779
if (!resourceGroupMatch)
7880
{
79-
foreach (var keyVault in resourceGroup.KeyVaultResources)
81+
foreach (var keyVault in resourceGroup.Children.OfType<KvKeyVaultResourceModel>())
8082
{
81-
if (keyVault.HasData && ContainsQuery(keyVault.Data.Name, querySpan))
83+
if (keyVault.VaultResource?.HasData == true && ContainsQuery(keyVault.VaultResource.Data.Name, querySpan))
8284
{
8385
SetResourceGroupExpanded(resourceGroup, true);
8486
SetSubscriptionExpanded(subscription, true);
@@ -92,19 +94,6 @@ static void SetResourceGroupExpanded(KvResourceGroupModel model, bool value)
9294
SetResourceGroupExpanded(resourceGroup, true);
9395
}
9496

95-
if (!isMatch)
96-
{
97-
foreach (var pinnedItem in subscription.PinnedItems)
98-
{
99-
if (pinnedItem.HasData && ContainsQuery(pinnedItem.Data.Name, querySpan))
100-
{
101-
SetSubscriptionExpanded(subscription, true);
102-
isMatch = true;
103-
break;
104-
}
105-
}
106-
}
107-
10897
if (isMatch)
10998
{
11099
results.Add(subscription);
Lines changed: 62 additions & 62 deletions
Original file line numberDiff line numberDiff line change
@@ -1,97 +1,97 @@
11
using System.Collections.ObjectModel;
2-
using System.Diagnostics;
32
using Azure.ResourceManager.KeyVault;
43
using Azure.ResourceManager.Resources;
4+
using Microsoft.UI;
55

66
namespace AzureKeyVaultStudio.Models;
77

8-
public partial class PinnedItemModel : ObservableObject
8+
public abstract partial class KvTreeNodeModel : ObservableObject
99
{
1010
[ObservableProperty]
11-
public partial bool HasSubNodeDataBeenFetched { get; set; } = false;
11+
public partial bool HasSubNodeDataBeenFetched { get; set; }
1212

1313
[ObservableProperty]
14-
public partial bool IsExpanded { get; set; }
14+
public partial bool IsSelected { get; set; }
1515

1616
[ObservableProperty]
17-
public partial bool IsSelected { get; set; }
17+
public partial bool IsExpanded { get; set; }
1818

1919
public string DisplayName { get; set; } = null!;
2020

21-
public virtual ObservableCollection<KeyVaultResource> KeyVaultResources { get; set; } = [];
22-
}
21+
public ObservableCollection<KvTreeNodeModel> Children { get; } = [];
2322

24-
public partial class KvSubscriptionModel : ObservableObject
25-
{
23+
public virtual KeyVaultResource? VaultResource => null;
2624

27-
[ObservableProperty]
28-
public partial bool HasSubNodeDataBeenFetched { get; set; } = false;
25+
public abstract string Glyph { get; }
2926

30-
[ObservableProperty]
31-
public partial bool IsExpanded { get; set; }
27+
internal static readonly Brush GrayBrush = new SolidColorBrush(ColorHelper.FromArgb(0xFF, 0x8A, 0x8A, 0x8A));
28+
internal static readonly Brush OrangeBrush = new SolidColorBrush(ColorHelper.FromArgb(0xFF, 0xFF, 0x66, 0x00));
3229

33-
[ObservableProperty]
34-
public partial bool IsSelected { get; set; }
30+
public virtual Brush? IconForeground => GetThemeBrush("TextFillColorSecondaryBrush");
3531

36-
public enum ExplorerItemType
37-
{ QuickAccess, ResourceGroup };
32+
protected static Brush? GetThemeBrush(string key)
33+
{
34+
if (Application.Current?.Resources.TryGetValue(key, out var value) == true)
35+
{
36+
return value as Brush;
37+
}
3838

39-
public ExplorerItemType Type { get; set; } = ExplorerItemType.ResourceGroup;
39+
if (key != "TextFillColorSecondaryBrush"
40+
&& Application.Current?.Resources.TryGetValue("TextFillColorSecondaryBrush", out var secondaryValue) == true)
41+
{
42+
return secondaryValue as Brush;
43+
}
4044

41-
public ObservableCollection<KvResourceGroupModel> ResourceGroups { get; set; } = [];
42-
public virtual ObservableCollection<KeyVaultResource> PinnedItems { get; set; } = [];
43-
//adding this to avoid crashing the application.
44-
public virtual ObservableCollection<KeyVaultResource> KeyVaultResources { get; set; } = [];
45-
public SubscriptionResource Subscription { get; set; } = null!;
46-
public string DisplayName { get; set; } = null!;
47-
public string? SubscriptionId { get; set; }
48-
}
45+
return GrayBrush;
46+
}
4947

50-
public partial class KvResourceGroupModel : ObservableObject
51-
{
52-
[ObservableProperty]
53-
public partial bool IsExpanded { get; set; }
48+
protected static Brush CreateThemeContrastBrush()
49+
{
50+
var isDark = Application.Current?.RequestedTheme == ApplicationTheme.Dark;
51+
return new SolidColorBrush(isDark ? Colors.White : Colors.Black);
52+
}
5453

55-
[ObservableProperty]
56-
public partial bool IsSelected { get; set; }
54+
public partial class KvSubscriptionModel : KvTreeNodeModel
55+
{
56+
public enum ExplorerItemType
57+
{ QuickAccess, ResourceGroup };
5758

58-
public ObservableCollection<KeyVaultResource> KeyVaultResources { get; set; } = [];
59-
public string DisplayName { get; set; } = null!;
59+
public ExplorerItemType Type { get; set; } = ExplorerItemType.ResourceGroup;
60+
public SubscriptionResource Subscription { get; set; } = null!;
61+
public string? SubscriptionId { get; set; }
6062

61-
public ResourceGroupResource ResourceGroupResource { get; set; } = null!;
62-
}
63+
public override string Glyph => Type == ExplorerItemType.QuickAccess ? "\uE840" : "\uE774";
6364

64-
internal partial class ExplorerItemTemplateSelector : DataTemplateSelector
65-
{
66-
public DataTemplate SubscriptionTemplate { get; set; }
67-
public DataTemplate ResourceGroupTemplate { get; set; }
68-
public DataTemplate KeyVaultResourceTemplate { get; set; }
69-
public DataTemplate PinnedItemTemplate { get; set; }
65+
public override Brush? IconForeground => Type == ExplorerItemType.QuickAccess
66+
? GrayBrush
67+
: GetThemeBrush("IconForegroundColorBrush");
68+
}
7069

71-
protected override DataTemplate SelectTemplateCore(object item)
70+
public partial class KvResourceGroupModel : KvTreeNodeModel
7271
{
73-
try
74-
{
75-
if (item is KvSubscriptionModel model)
76-
{
77-
if (model.Type == KvSubscriptionModel.ExplorerItemType.QuickAccess)
78-
return PinnedItemTemplate;
79-
else return SubscriptionTemplate;
80-
}
72+
public ResourceGroupResource ResourceGroupResource { get; set; } = null!;
8173

82-
if (item is KvResourceGroupModel)
83-
return ResourceGroupTemplate;
74+
public override string Glyph => "\uE8B7";
8475

85-
if (item is KeyVaultResource)
86-
return KeyVaultResourceTemplate;
76+
public override Brush? IconForeground => new SolidColorBrush(ColorHelper.FromArgb(0xFF, 0x99, 0x6F, 0x00));
77+
}
8778

88-
return base.SelectTemplateCore(item);
89-
}
90-
catch (Exception ex)
91-
{
92-
Debug.WriteLine($"Error selecting template for item: {item}");
93-
return base.SelectTemplateCore(item);
79+
public partial class KvKeyVaultResourceModel : KvTreeNodeModel
80+
{
81+
public KeyVaultResource Resource { get; set; } = null!;
9482

95-
}
83+
public bool IsPlaceholder { get; set; }
84+
85+
public override KeyVaultResource? VaultResource => IsPlaceholder ? null : Resource;
86+
87+
public override string Glyph => "\uEC19";
88+
89+
public override Brush? IconForeground => GetThemeBrush("IconForegroundSecondaryColorBrush");
90+
91+
public static KvKeyVaultResourceModel CreatePlaceholder() => new()
92+
{
93+
IsPlaceholder = true,
94+
DisplayName = string.Empty,
95+
};
9696
}
9797
}

src/uno/AzureKeyVaultStudio/AzureKeyVaultStudio/Package.appxmanifest

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
xmlns:uap18="http://schemas.microsoft.com/appx/manifest/uap/windows10/18"
77
IgnorableNamespaces="uap rescap uap18">
88

9-
<Identity Version="2.0.3.0" Publisher="CN=FE9032D7-9FA7-4DED-9087-469BC45B4D99" Name="ArthurThomasIV.AzureKeyVaultExplorer-forAzure"/>
9+
<Identity Version="2.0.4.0" Publisher="CN=FE9032D7-9FA7-4DED-9087-469BC45B4D99" Name="ArthurThomasIV.AzureKeyVaultExplorer-forAzure"/>
1010
<Properties>
1111
<DisplayName>Key Vault Explorer</DisplayName>
1212
<PublisherDisplayName>Arthur Thomas IV</PublisherDisplayName>

src/uno/AzureKeyVaultStudio/AzureKeyVaultStudio/Presentation/SettingsPage.xaml.cs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@ public sealed partial class SettingsPage : Page
77
public SettingsPage()
88
{
99
this.InitializeComponent();
10-
//DataContextChanged += (s, e) => Bindings.Update();
1110
}
1211

1312
}

src/uno/AzureKeyVaultStudio/AzureKeyVaultStudio/Presentation/SettingsViewModel.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -187,7 +187,7 @@ private async Task SignOut()
187187
Severity = InfoBarSeverity.Informational,
188188
Message = _localizer?["SignOutMessage"] ?? "You have been signed out.",
189189
Title = "Info",
190-
Duration = TimeSpan.FromSeconds(10),
190+
Duration = TimeSpan.FromSeconds(5),
191191
}));
192192
await _navigator.NavigateViewModelAsync<LoginViewModel>(this, qualifier: Qualifiers.ClearBackStack);
193193
}

src/uno/AzureKeyVaultStudio/AzureKeyVaultStudio/Services/VaultService.cs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
using AzureKeyVaultStudio.Database;
1010
using AzureKeyVaultStudio.Exceptions;
1111
using Microsoft.Extensions.Caching.Memory;
12+
using static AzureKeyVaultStudio.Models.KvTreeNodeModel;
1213

1314
namespace AzureKeyVaultStudio.Services;
1415
public partial class VaultService
@@ -205,15 +206,15 @@ public async IAsyncEnumerable<KvSubscriptionModel> GetKeyVaultResourceBySubscrip
205206
{
206207
var rgPlaceholder = new KvResourceGroupModel() //needed to show chevron
207208
{
208-
KeyVaultResources = [new KeyVaultResourcePlaceholder()],
209+
Children = { KvKeyVaultResourceModel.CreatePlaceholder() },
209210
};
210211

211212
var resource = new KvSubscriptionModel
212213
{
213214
DisplayName = subscription.Data.DisplayName,
214215
SubscriptionId = subscription.Data.Id,
215216
Subscription = subscription,
216-
ResourceGroups = [rgPlaceholder]
217+
Children = { rgPlaceholder }
217218
};
218219
yield return resource;
219220
}

0 commit comments

Comments
 (0)