From ec54e1921ac6d92aea30baef64f85d54b7c1845f Mon Sep 17 00:00:00 2001 From: Caen De Silva Date: Sun, 26 Nov 2023 16:42:10 +0100 Subject: [PATCH] Add index page to the sidebar when it's the only page Automatically include the index page in the documentation sidebar when it is the only page present. This ensures the sidebar is not empty for a single-page documentation site, providing a more user-friendly experience. --- .../Navigation/DocumentationSidebar.php | 5 ++++ .../Services/DocumentationSidebarTest.php | 25 +++++++++++++++++++ 2 files changed, 30 insertions(+) diff --git a/packages/framework/src/Framework/Features/Navigation/DocumentationSidebar.php b/packages/framework/src/Framework/Features/Navigation/DocumentationSidebar.php index ebbe51129c0..b1181cba85f 100644 --- a/packages/framework/src/Framework/Features/Navigation/DocumentationSidebar.php +++ b/packages/framework/src/Framework/Features/Navigation/DocumentationSidebar.php @@ -22,6 +22,11 @@ protected function generate(): void $this->items->put($route->getRouteKey(), NavItem::fromRoute($route)); } }); + + // If there are no pages other than the index page, we add it to the sidebar so that it's not empty + if ($this->items->count() === 0 && DocumentationPage::home() !== null) { + $this->items->push(NavItem::fromRoute(DocumentationPage::home())); + } } public function hasGroups(): bool diff --git a/packages/framework/tests/Feature/Services/DocumentationSidebarTest.php b/packages/framework/tests/Feature/Services/DocumentationSidebarTest.php index b1cadcbd394..9ac37522cc1 100644 --- a/packages/framework/tests/Feature/Services/DocumentationSidebarTest.php +++ b/packages/framework/tests/Feature/Services/DocumentationSidebarTest.php @@ -376,6 +376,31 @@ public function test_is_group_active_for_index_page_with_no_groups() $this->assertFalse(DocumentationSidebar::create()->isGroupActive('foo')); } + public function test_index_page_added_to_sidebar_when_it_is_the_only_page() + { + Filesystem::touch('_docs/index.md'); + $sidebar = DocumentationSidebar::create(); + + $this->assertCount(1, $sidebar->items); + $this->assertEquals( + collect([NavItem::fromRoute(Routes::get('docs/index'))]), + $sidebar->items + ); + } + + public function test_index_page_not_added_to_sidebar_when_other_pages_exist() + { + $this->createTestFiles(1); + Filesystem::touch('_docs/index.md'); + $sidebar = DocumentationSidebar::create(); + + $this->assertCount(1, $sidebar->items); + $this->assertEquals( + collect([NavItem::fromRoute(Routes::get('docs/test-0'))]), + $sidebar->items + ); + } + protected function createTestFiles(int $count = 5): void { for ($i = 0; $i < $count; $i++) {