1
0
Fork 0
freesewing/sites/dev/hooks/use-navigation.mjs

51 lines
1.4 KiB
JavaScript
Raw Normal View History

2023-03-26 06:50:59 +02:00
import get from 'lodash.get'
import { prebuildNavigation as pbn } from 'site/prebuild/navigation.mjs'
import orderBy from 'lodash.orderby'
/*
* prebuildNavvigation.en holds the naigation structure based on MDX content.
* The entire website only has a few pages that are now MDX-based:
* - 404 => no navigation shown
* - home page => no navvigation shown
* - /contact => Added below
2023-03-26 08:32:44 +02:00
*
* Note: Set 'h' to truthy to not show a top-level entry as a section
*/
pbn.en.contact = { t: 'Contact information', s: 'contact', h: 1 }
2023-03-26 06:56:43 +02:00
const createCrumbs = (path) =>
path.map((crumb, i) => {
const entry = get(pbn.en, path.slice(0, i + 1))
2023-03-26 06:50:59 +02:00
const val = { t: entry.t, s: entry.s }
if (entry.o) val.o = entry.o
return val
})
const createSections = () => {
const sections = {}
for (const slug of Object.keys(pbn.en)) {
const entry = pbn.en[slug]
const val = { t: entry.t, s: entry.s }
if (entry.o) val.o = entry.o
if (!entry.h) sections[slug] = val
2023-03-26 06:50:59 +02:00
}
return orderBy(sections, 'o')
}
export const useNavigation = (path = []) => {
2023-03-26 06:50:59 +02:00
// Creat crumbs array
2023-03-26 06:56:43 +02:00
const crumbs = createCrumbs(path)
2023-03-26 08:49:21 +02:00
const sections = createSections()
2023-03-26 06:50:59 +02:00
return {
2023-03-26 06:56:43 +02:00
path,
slug: path.join('/'),
2023-03-26 06:50:59 +02:00
crumbs,
2023-03-26 08:49:21 +02:00
sections,
nav: path.length > 1 ? get(pbn.en, path[0]) : path.length === 0 ? sections : pbn.en[path[0]],
title: crumbs.length > 0 ? crumbs.slice(-1)[0].t : '',
2023-03-26 06:50:59 +02:00
}
}