1
- import {
2
- RevisionPage ,
3
- RevisionPageDocument ,
4
- RevisionPageGroup ,
5
- RevisionPageType ,
6
- } from '@gitbook/api' ;
1
+ import { RevisionPage , RevisionPageDocument } from '@gitbook/api' ;
7
2
import { Icon } from '@gitbook/icons' ;
8
3
9
4
import { pageHref } from '@/lib/links' ;
5
+ import { AncestorRevisionPage } from '@/lib/pages' ;
10
6
import { tcls } from '@/lib/tailwind' ;
11
7
12
8
import { PageIcon } from '../PageIcon' ;
13
9
import { StyledLink } from '../primitives' ;
14
10
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 ;
17
17
18
18
if ( ! page . layout . title && ! page . layout . description ) {
19
19
return null ;
20
20
}
21
21
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
-
30
22
return (
31
23
< header
32
24
className = { tcls ( 'max-w-3xl' , 'mx-auto' , 'mb-6' , 'space-y-3' , 'page-api-block:ml-0' ) }
33
25
>
34
- { breadcrumbs ? .length > 0 && (
26
+ { ancestors . length > 0 && (
35
27
< nav >
36
28
< ol className = { tcls ( 'flex' , 'flex-wrap' , 'items-center' , 'gap-2' ) } >
37
- { breadcrumbs . map ( ( breadcrumb , index ) => (
29
+ { ancestors . map ( ( breadcrumb , index ) => (
38
30
< >
39
31
< li key = { breadcrumb . id } >
40
32
< StyledLink
@@ -58,7 +50,7 @@ export function PageHeader(props: { page: RevisionPageDocument; pages: RevisionP
58
50
{ breadcrumb . title }
59
51
</ StyledLink >
60
52
</ li >
61
- { index != breadcrumbs . length - 1 && (
53
+ { index != ancestors . length - 1 && (
62
54
< Icon
63
55
icon = "chevron-right"
64
56
className = { tcls (
@@ -87,10 +79,3 @@ export function PageHeader(props: { page: RevisionPageDocument; pages: RevisionP
87
79
</ header >
88
80
) ;
89
81
}
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