-
Notifications
You must be signed in to change notification settings - Fork 19
Expand file tree
/
Copy pathNavigationViewHelper.cs
More file actions
76 lines (66 loc) · 3.07 KB
/
NavigationViewHelper.cs
File metadata and controls
76 lines (66 loc) · 3.07 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
// See the LICENSE file in the project root for more information.
using CommunityToolkit.Tooling.SampleGen.Metadata;
namespace CommunityToolkit.App.Shared.Helpers;
public static class NavigationViewHelper
{
public static IEnumerable<MUXC.NavigationViewItem> GenerateNavItemTree(IEnumerable<ToolkitFrontMatter> sampleMetadata)
{
// Make categories
var categoryData = GenerateCategoryNavItems(sampleMetadata);
foreach (var navData in categoryData)
{
var samplesBySubcategory = navData.SampleMetadata!.GroupBy(x => x.Subcategory)
.OrderBy(g => g.Key.ToString());
foreach (var subcategoryGroup in samplesBySubcategory)
{
navData.NavItem.MenuItems.Add(new MUXC.NavigationViewItemHeader() { Content = subcategoryGroup.Key.ToString() });
foreach (var sampleNavItem in GenerateSampleNavItems(subcategoryGroup))
{
navData.NavItem.MenuItems.Add(sampleNavItem);
}
}
yield return navData.NavItem;
}
}
private static IEnumerable<MUXC.NavigationViewItem> GenerateSampleNavItems(IEnumerable<ToolkitFrontMatter> sampleMetadata)
{
foreach (var metadata in sampleMetadata.OrderBy(meta => meta.Title))
{
MUXC.NavigationViewItem navItem = new MUXC.NavigationViewItem
{
Content = metadata.Title,
Icon = new BitmapIcon()
{
ShowAsMonochrome = false,
UriSource = new Uri(IconHelper.GetIconPath(metadata.Icon))
},
Tag = metadata,
};
// Check if this is a Labs component
if (metadata.IsExperimental == true)
{
navItem.InfoBadge = new MUXC.InfoBadge() { Style = (Style)App.Current.Resources["LabsIconBadgeStyle"] };
}
yield return navItem;
}
}
private static IEnumerable<GroupNavigationItemData> GenerateCategoryNavItems(IEnumerable<ToolkitFrontMatter> sampleMetadata)
{
var samplesByCategory = sampleMetadata.GroupBy(x => x.Category)
.OrderBy(g => g.Key.ToString());
foreach (var categoryGroup in samplesByCategory)
{
yield return new GroupNavigationItemData(new MUXC.NavigationViewItem
{
Content = categoryGroup.Key,
Icon = IconHelper.GetCategoryIcon(categoryGroup.Key),
SelectsOnInvoked = false,
}, categoryGroup.ToArray());
}
}
/// <param name="NavItem">A navigation item to contain items in this group.</param>
/// <param name="SampleMetadata">The samples that belong under <see cref="NavItem"/>.</param>
private record GroupNavigationItemData(MUXC.NavigationViewItem NavItem, IEnumerable<ToolkitFrontMatter> SampleMetadata);
}