From d1a2c76f33ab55ad8d43357b57c9ae3de55e9d0c Mon Sep 17 00:00:00 2001 From: YiZhi Date: Sat, 23 Jul 2022 22:26:15 +0800 Subject: [PATCH] feat(theme): support multi-level sidebar (#851) Co-authored-by: Divyansh Singh <40380293+brc-dd@users.noreply.github.com> --- .../components/VPSidebarLink.vue | 33 ++++++++++++++----- src/client/theme-default/support/sidebar.ts | 12 +++++-- types/default-theme.d.ts | 7 ++-- 3 files changed, 36 insertions(+), 16 deletions(-) diff --git a/src/client/theme-default/components/VPSidebarLink.vue b/src/client/theme-default/components/VPSidebarLink.vue index 80958603c59..77f7eb59422 100644 --- a/src/client/theme-default/components/VPSidebarLink.vue +++ b/src/client/theme-default/components/VPSidebarLink.vue @@ -1,37 +1,47 @@ diff --git a/src/client/theme-default/support/sidebar.ts b/src/client/theme-default/support/sidebar.ts index a22cef54c87..6ce6ee0a3e8 100644 --- a/src/client/theme-default/support/sidebar.ts +++ b/src/client/theme-default/support/sidebar.ts @@ -32,11 +32,17 @@ export function getFlatSideBarLinks( ): DefaultTheme.SidebarItem[] { const links: DefaultTheme.SidebarItem[] = [] - for (const group of sidebar) { - for (const link of group.items) { - links.push(link) + function recursivelyExtractLinks(items: DefaultTheme.SidebarItem[]) { + for (const item of items) { + item.link && links.push(item) + if ('items' in item) { + recursivelyExtractLinks(item.items) + } } } + for (const group of sidebar) { + recursivelyExtractLinks(group.items) + } return links } diff --git a/types/default-theme.d.ts b/types/default-theme.d.ts index 2f1148b82bc..6bdcd6c0096 100644 --- a/types/default-theme.d.ts +++ b/types/default-theme.d.ts @@ -139,10 +139,9 @@ export namespace DefaultTheme { collapsed?: boolean } - export interface SidebarItem { - text: string - link: string - } + export type SidebarItem = + | { text: string; link: string } + | { text: string; link?: string; items: SidebarItem[] } // edit link -----------------------------------------------------------------