Hide variants from page breadcrumbs

Luke Karrys committed Oct 16, 2023 at 21:57 UTC c06c056dbb1717800abbb4b80554dca6dd78eb9a
3 files changed +24 -17
src/components/breadcrumbs.js
+1 -2
@@ -5,7 +5,6 @@ import * as getNav from '../util/get-nav'
5 import {useLocation} from '../layout'
6
7 const BreadcrumbItem = ({item, path}) => {
8 - // TODO: hide variant name
8 const href = getNav.getLocation(item.url)
9 const selected = getNav.isPathForItem(path, getNav.getItem(href))
10
@@ -19,7 +18,7 @@ const BreadcrumbItem = ({item, path}) => {
18 const Breadcrumbs = () => {
19 const location = useLocation()
20 const path = getNav.getLocation(location.pathname)
22 - const items = getNav.getItemBreadcrumbs(location.pathname)
21 + const items = getNav.getItemBreadcrumbs(location.pathname, {hideVariants: true})
22
23 if (!items || items.length <= 1) {
24 return null
src/components/search-results.js
+6 -7
@@ -5,14 +5,13 @@ import * as getNav from '../util/get-nav'
5
6 const Breadcrumbs = ({item, highlighted}) => {
7 const siteMetadata = useSiteMetadata()
8 - const hierarchy = getNav.getItemBreadcrumbs(item.path)
8 + let hierarchy = getNav.getItemBreadcrumbs(item.path)
9
10 - const text = hierarchy
11 - ? hierarchy
12 - .slice(0, -1)
13 - .map(s => s.title)
14 - .join(' / ')
15 - : siteMetadata.shortName
10 + if (hierarchy) {
11 + hierarchy = hierarchy.slice(0, -1)
12 + }
13 +
14 + const text = hierarchy && hierarchy.length ? hierarchy.map(s => s.title).join(' / ') : siteMetadata.shortName
15
16 return <Text sx={{fontSize: 0, color: highlighted ? 'blue.2' : 'gray.7'}}>{text}</Text>
17 }
src/util/get-nav.js
+17 -8
@@ -1,14 +1,23 @@
1 import {withPrefix} from 'gatsby'
2 import navItems from '../../content/nav.yml'
3
4 -export const getItemBreadcrumbs = path => {
5 - const hierarchy = getItemHierarchy(path)
6 - return hierarchy
7 - ? hierarchy.map(item => {
8 - item.title = item.shortName || item.title
9 - return item
10 - })
11 - : null
4 +export const getItemBreadcrumbs = (path, props = {}) => {
5 + let hierarchy = getItemHierarchy(path)
6 +
7 + if (!hierarchy) {
8 + return null
9 + }
10 +
11 + if (props.hideVariants) {
12 + const root = getVariantRoot(path)
13 + const vp = getVariantAndPage(root, path)
14 + hierarchy = hierarchy.filter(item => (vp ? item.shortName !== vp.variant : true))
15 + }
16 +
17 + return hierarchy.map(item => ({
18 + ...item,
19 + title: item.shortName || item.title,
20 + }))
21 }
22
23 export const getLocation = path => {