From 0bb7800671ae8723d09a70a67c2cabce075edca7 Mon Sep 17 00:00:00 2001 From: Martijn Laarman Date: Wed, 9 Apr 2025 12:49:49 +0200 Subject: [PATCH] Fix navigation ordering --- .../IO/Navigation/DocumentationGroup.cs | 2 +- .../Navigation/GlobalNavigation.cs | 62 +++++++++---------- 2 files changed, 30 insertions(+), 34 deletions(-) diff --git a/src/Elastic.Markdown/IO/Navigation/DocumentationGroup.cs b/src/Elastic.Markdown/IO/Navigation/DocumentationGroup.cs index 6fcfbe46d..229dd209e 100644 --- a/src/Elastic.Markdown/IO/Navigation/DocumentationGroup.cs +++ b/src/Elastic.Markdown/IO/Navigation/DocumentationGroup.cs @@ -15,7 +15,7 @@ public interface INavigationItem string Id { get; } } -[DebuggerDisplay("Group >{Depth} #{Order} {Group.FolderName}")] +[DebuggerDisplay("Toc >{Depth} #{Order} {Group.FolderName}")] public record TocNavigationItem(int Order, int Depth, DocumentationGroup Group, Uri Source) : GroupNavigationItem(Order, Depth, Group) { diff --git a/src/docs-assembler/Navigation/GlobalNavigation.cs b/src/docs-assembler/Navigation/GlobalNavigation.cs index 6b74c8361..f2de93b80 100644 --- a/src/docs-assembler/Navigation/GlobalNavigation.cs +++ b/src/docs-assembler/Navigation/GlobalNavigation.cs @@ -35,10 +35,6 @@ private IReadOnlyCollection BuildNavigation(IReadOnlyCollection var i = 0; foreach (var toc in node) { - if (toc.Source == new Uri("docs-content://reference/apm/")) - { - } - if (!_assembleSources.TreeCollector.TryGetTableOfContentsTree(toc.Source, out var tree)) { _navigationFile.EmitWarning($"No {nameof(TableOfContentsTree)} found for {toc.Source}"); @@ -83,44 +79,44 @@ private IReadOnlyCollection BuildNavigation(IReadOnlyCollection var tocChildren = toc.Children.OfType().ToArray(); var tocNavigationItems = BuildNavigation(tocChildren, depth + 1); - var allNavigationItems = new List(); - var seenSources = new HashSet(); + var allNavigationItems = + depth == 0 + ? tocNavigationItems.Concat(tree.NavigationItems) + : tree.NavigationItems.Concat(tocNavigationItems); - AddNavigationItems(allNavigationItems, tree.NavigationItems, seenSources, tree); - AddNavigationItems(allNavigationItems, tocNavigationItems, seenSources, tree); + var cleanNavigationItems = new List(); + var seenSources = new HashSet(); + foreach (var allNavigationItem in allNavigationItems) + { + if (allNavigationItem is not TocNavigationItem tocNav) + { + cleanNavigationItems.Add(allNavigationItem); + continue; + } + if (seenSources.Contains(tocNav.Source)) + continue; - tree.NavigationItems = allNavigationItems.ToArray(); - var navigationItem = new TocNavigationItem(i, depth, tree, toc.Source); + if (!_assembleSources.TocTopLevelMappings.TryGetValue(tocNav.Source, out var mapping)) + continue; - list.Add(navigationItem); - i++; - } + if (mapping.ParentSource != tree.Source) + continue; - return list.ToArray().AsReadOnly(); - } + _ = seenSources.Add(tocNav.Source); + cleanNavigationItems.Add(allNavigationItem); + } - private void AddNavigationItems(List navigationItems, IEnumerable? toAdd, HashSet seenSources, TableOfContentsTree tree) - { - if (toAdd is null) - return; - foreach (var navigationItem in toAdd) - { - if (navigationItem is not TocNavigationItem tocNav) + tree.NavigationItems = cleanNavigationItems.ToArray(); + var navigationItem = new TocNavigationItem(i, depth, tree, toc.Source); + if (toc.Source == new Uri("docs-content://reference")) { - navigationItems.Add(navigationItem); - continue; } - if (seenSources.Contains(tocNav.Source)) - continue; - - if (!_assembleSources.TocTopLevelMappings.TryGetValue(tocNav.Source, out var mapping)) - continue; - if (mapping.ParentSource != tree.Source) - continue; - _ = seenSources.Add(tocNav.Source); - navigationItems.Add(navigationItem); + list.Add(navigationItem); + i++; } + + return list.ToArray().AsReadOnly(); } }