From b50a8a132577693817a15ab43fc4cc22670a8a65 Mon Sep 17 00:00:00 2001 From: Christian Georgi Date: Sun, 17 Mar 2024 10:38:57 +0100 Subject: [PATCH] fix(theme): ignore inner-page items in next/prev link (#3663) Co-authored-by: Divyansh Singh <40380293+brc-dd@users.noreply.github.com> --- src/client/theme-default/composables/prev-next.ts | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/src/client/theme-default/composables/prev-next.ts b/src/client/theme-default/composables/prev-next.ts index 5bc39eca..7deb00f2 100644 --- a/src/client/theme-default/composables/prev-next.ts +++ b/src/client/theme-default/composables/prev-next.ts @@ -8,7 +8,10 @@ export function usePrevNext() { return computed(() => { const sidebar = getSidebar(theme.value.sidebar, page.value.relativePath) - const candidates = getFlatSideBarLinks(sidebar) + const links = getFlatSideBarLinks(sidebar) + + // ignore inner-page links with hashes + const candidates = uniqBy(links, (link) => link.link.replace(/[?#].*$/, '')) const index = candidates.findIndex((link) => { return isActive(page.value.relativePath, link.link) @@ -61,3 +64,11 @@ export function usePrevNext() { } }) } + +function uniqBy(array: T[], keyFn: (item: T) => any): T[] { + const seen = new Set() + return array.filter((item) => { + const k = keyFn(item) + return seen.has(k) ? false : seen.add(k) + }) +}