@@ -12,21 +12,24 @@ import './index.module.scss';
1212import styles from './index.module.scss' ;
1313import { useScreenSize } from '../../hooks' ;
1414
15+ export const extendLink = ( link : BreadcrumbLinkType ) => ( {
16+ // Use default `rel`, but actual optional rel should override this
17+ rel : link . current ? undefined : link . href === '/' ? 'home' : 'up' ,
18+ ...link ,
19+ } ) ;
20+
1521const css = classnames . bind ( styles ) ;
1622type BreadcrumbLinkType = {
1723 href : string ;
1824 label : string ;
1925 current : boolean ;
26+ rel ?: string ;
2027} ;
2128
2229interface BreadcrumbProps extends BreadcrumbNavProps {
2330 links : BreadcrumbLinkType [ ] ;
2431 Link ?: ComponentType < any > ;
25- backLink ?: {
26- href : string ;
27- label : string ;
28- current : boolean ;
29- } ;
32+ backLink ?: BreadcrumbLinkType ;
3033 breakpoint ?: number ;
3134}
3235
@@ -41,59 +44,51 @@ export const Breadcrumbs = ({
4144
4245 const smallScreen = Number ( screenSize ) <= breakpoint ;
4346
44- if ( smallScreen && backLink ?. href && backLink . label ) {
47+ const linkData = links . map ( extendLink ) ;
48+ const backLinkData = backLink && extendLink ( backLink ) ;
49+
50+ if (
51+ ( smallScreen && backLinkData ?. href && backLinkData . label ) ||
52+ ( links . length === 1 && backLinkData ?. href && backLinkData . label )
53+ ) {
4554 return (
4655 < BreadcrumbNav className = { css ( 'utrecht-breadcrumb-nav-theme' ) } { ...restBreadcrumbProps } >
47- < Fragment >
48- < BreadcrumbNavLink
49- className = { css ( 'utrecht-link' , 'utrecht-link--html-a' , 'utrecht-breadcrumb-nav__link-custom' ) }
50- href = { backLink . href }
51- rel = { backLink . href === '/' ? 'home' : 'up' }
52- current = { backLink . current }
53- Link = { Link }
54- >
55- { backLink ?. label ?. toLowerCase ( ) !== 'home' && (
56- < BreadcrumbNavSeparator >
57- < UtrechtIconChevronLeft />
58- </ BreadcrumbNavSeparator >
59- ) }
60- { backLink . label }
61- </ BreadcrumbNavLink >
62- </ Fragment >
56+ < BreadcrumbNavLink
57+ className = { css ( 'utrecht-link' , 'utrecht-link--html-a' , 'utrecht-breadcrumb-nav__link-custom' ) }
58+ href = { backLinkData . href }
59+ rel = { backLinkData . rel }
60+ current = { backLinkData . current }
61+ Link = { Link }
62+ >
63+ { backLinkData ?. rel === 'up' && < UtrechtIconChevronLeft /> } { backLinkData . label }
64+ </ BreadcrumbNavLink >
6365 </ BreadcrumbNav >
6466 ) ;
6567 }
6668
6769 return (
6870 < BreadcrumbNav className = { css ( 'utrecht-breadcrumb-nav-theme' ) } { ...restBreadcrumbProps } >
69- { links &&
70- links . length > 0 &&
71- links
72- . filter ( ( { label } ) => label )
73- . map ( ( { href, label, current } : any , index : number ) => (
74- < Fragment key = { `${ href } -${ index } ` } >
75- { links . length === 1 && label ?. toLowerCase ( ) !== 'home' && (
76- < BreadcrumbNavSeparator >
77- < UtrechtIconChevronLeft />
78- </ BreadcrumbNavSeparator >
79- ) }
80- < BreadcrumbNavLink
81- className = { css ( 'utrecht-link' , 'utrecht-link--html-a' , 'utrecht-breadcrumb-nav__link-custom' ) }
82- href = { href }
83- rel = { href === '/' ? 'home' : 'up' }
84- index = { index }
85- current = { current }
86- Link = { UtrechtLink }
87- >
88- { label }
89- </ BreadcrumbNavLink >
90- { index !== links . length - 1 && (
91- < BreadcrumbNavSeparator >
92- < UtrechtIconChevronRight />
93- </ BreadcrumbNavSeparator >
94- ) }
95- </ Fragment >
96- ) ) }
71+ { linkData
72+ . filter ( ( { label } ) => label )
73+ . map ( ( { href, label, current, rel } : any , index : number ) => (
74+ < Fragment key = { `${ href } -${ index } ` } >
75+ < BreadcrumbNavLink
76+ className = { css ( 'utrecht-link' , 'utrecht-link--html-a' , 'utrecht-breadcrumb-nav__link-custom' ) }
77+ href = { href }
78+ rel = { rel }
79+ index = { index }
80+ current = { current }
81+ Link = { UtrechtLink }
82+ >
83+ { label }
84+ </ BreadcrumbNavLink >
85+ { index !== links . length - 1 && (
86+ < BreadcrumbNavSeparator >
87+ < UtrechtIconChevronRight />
88+ </ BreadcrumbNavSeparator >
89+ ) }
90+ </ Fragment >
91+ ) ) }
9792 </ BreadcrumbNav >
9893 ) ;
9994} ;
0 commit comments