1
0
Fork 0
freesewing/sites/shared/components/mdx/read-more.mjs

78 lines
2.1 KiB
JavaScript
Raw Normal View History

2021-12-24 18:17:02 +01:00
import get from 'lodash.get'
import Link from 'next/link'
2023-05-15 20:00:45 +02:00
import { useContext } from 'react'
import { NavigationContext } from 'shared/context/navigation-context.mjs'
import { useNavigation } from 'site/hooks/use-navigation.mjs'
const getRoot = {
2023-05-21 09:58:59 +02:00
dev: (root, nav) => {
if (!root) return nav
if (root.indexOf('/') === -1) return nav[root]
return get(nav, root.split('/'))
},
2023-05-21 09:58:59 +02:00
org: (root, nav) => {
// Fixme: make this work for org
2023-05-21 09:58:59 +02:00
if (!root) return nav
if (root.indexOf('/') === -1) return get(nav, root)
2023-05-21 09:58:59 +02:00
return get(nav, root.split('/'))
},
}
/*
* This is a recursive function, so it needs to be lean
*/
2023-07-13 18:18:07 +02:00
const RenderTree = ({ tree, recurse, depth = 1, level = 0, lead = [] }) => (
<ul>
{Object.keys(tree)
.filter((key) => key.length > 1)
.map((key, i) => (
<li key={i}>
2023-07-13 18:18:07 +02:00
{lead}
<Link href={`/${tree[key].s}`}>{tree[key].t}</Link>
2023-07-13 18:18:07 +02:00
{recurse && (!depth || level < depth) && Object.keys(tree[key]).length > 1 && (
<RenderTree
tree={tree[key]}
{...{ recurse, depth }}
level={level + 1}
lead={[
...lead,
<span className="text-sm pr-2" key={key}>
{tree[key].t}
</span>,
<span className="text-sm pr-2" key={key + 's'}>
&raquo;
</span>,
]}
/>
)}
</li>
))}
</ul>
)
2023-07-13 18:18:07 +02:00
export const ReadMore = ({
recurse = 0,
root = false,
site = 'org',
depth = 99,
ignoreControl,
}) => {
2023-05-22 17:05:59 +02:00
const { slug } = useContext(NavigationContext)
const siteNav = useNavigation({ ignoreControl })
2023-04-16 16:19:49 +02:00
// Deal with recurse not being a number
if (recurse && recurse !== true) {
2023-04-16 16:19:49 +02:00
if (typeof recurse === 'number') recurse--
else recurse = 1
}
// Deal with root being passed as true
if (root === true) root = ''
2021-12-24 18:17:02 +01:00
const tree = root === false ? getRoot[site](slug, siteNav) : getRoot[site](root, siteNav)
2023-05-22 17:05:59 +02:00
2023-07-13 18:18:07 +02:00
console.log({ tree, recurse })
return <RenderTree {...{ tree, recurse, depth }} />
2021-12-24 18:17:02 +01:00
}