1- import {
2- RevisionPage ,
3- RevisionPageDocument ,
4- RevisionPageGroup ,
5- RevisionPageType ,
6- } from '@gitbook/api' ;
1+ import { RevisionPage , RevisionPageDocument } from '@gitbook/api' ;
72import { Icon } from '@gitbook/icons' ;
83
94import { pageHref } from '@/lib/links' ;
5+ import { AncestorRevisionPage } from '@/lib/pages' ;
106import { tcls } from '@/lib/tailwind' ;
117
128import { PageIcon } from '../PageIcon' ;
139import { StyledLink } from '../primitives' ;
1410
15- export function PageHeader ( props : { page : RevisionPageDocument ; pages : RevisionPage [ ] } ) {
16- const { page, pages } = props ;
11+ export function PageHeader ( props : {
12+ page : RevisionPageDocument ;
13+ ancestors : AncestorRevisionPage [ ] ;
14+ pages : RevisionPage [ ] ;
15+ } ) {
16+ const { page, ancestors, pages } = props ;
1717
1818 if ( ! page . layout . title && ! page . layout . description ) {
1919 return null ;
2020 }
2121
22- const pathSegments = page . path . split ( '/' ) . slice ( 0 , - 1 ) ; // Exclude the current page from the breadcrumbs
23- const flattenedPages = flattenPages ( pages ) ;
24- const breadcrumbs = pathSegments
25- . map ( ( pathSegment ) =>
26- flattenedPages . find ( ( page ) => 'slug' in page && page . slug == pathSegment ) ,
27- )
28- . filter ( ( page ) : page is RevisionPageDocument | RevisionPageGroup => page !== undefined ) ;
29-
3022 return (
3123 < header
3224 className = { tcls ( 'max-w-3xl' , 'mx-auto' , 'mb-6' , 'space-y-3' , 'page-api-block:ml-0' ) }
3325 >
34- { breadcrumbs ? .length > 0 && (
26+ { ancestors . length > 0 && (
3527 < nav >
3628 < ol className = { tcls ( 'flex' , 'flex-wrap' , 'items-center' , 'gap-2' ) } >
37- { breadcrumbs . map ( ( breadcrumb , index ) => (
29+ { ancestors . map ( ( breadcrumb , index ) => (
3830 < >
3931 < li key = { breadcrumb . id } >
4032 < StyledLink
@@ -58,7 +50,7 @@ export function PageHeader(props: { page: RevisionPageDocument; pages: RevisionP
5850 { breadcrumb . title }
5951 </ StyledLink >
6052 </ li >
61- { index != breadcrumbs . length - 1 && (
53+ { index != ancestors . length - 1 && (
6254 < Icon
6355 icon = "chevron-right"
6456 className = { tcls (
@@ -87,10 +79,3 @@ export function PageHeader(props: { page: RevisionPageDocument; pages: RevisionP
8779 </ header >
8880 ) ;
8981}
90-
91- function flattenPages ( pages : RevisionPage [ ] ) : RevisionPage [ ] {
92- return pages . reduce < RevisionPage [ ] > ( ( acc , page ) => {
93- const nestedPages = 'pages' in page && page . pages ? flattenPages ( page . pages ) : [ ] ;
94- return acc . concat ( page , ...nestedPages ) ;
95- } , [ ] ) ;
96- }
0 commit comments