The Node.js® Website
1import type { FC } from 'react';
2
3import CrossLink from '@/components/Common/CrossLink';
4import { useClientContext, useSiteNavigation } from '@/hooks/server';
5import type { NavigationKeys } from '@/types';
6
7type WithCrossLinksProps = { navKey: NavigationKeys };
8
9const WithSidebarCrossLinks: FC<WithCrossLinksProps> = ({ navKey }) => {
10 const { getSideNavigation } = useSiteNavigation();
11 const { pathname } = useClientContext();
12
13 const [[, sidebarNavigation]] = getSideNavigation([navKey]);
14
15 const crossLinkItems = sidebarNavigation.items
16 .map(([, { items }]) => items.map(([, item]) => item))
17 .flat();
18
19 const currentItem = crossLinkItems.findIndex(({ link }) => link === pathname);
20
21 const [previousCrossLink, nextCrossLink] = [
22 crossLinkItems[currentItem - 1],
23 crossLinkItems[currentItem + 1],
24 ];
25
26 return (
27 <div className="mt-4 grid w-full grid-cols-2 gap-4 xs:grid-cols-1">
28 {(previousCrossLink && (
29 <CrossLink
30 type="previous"
31 text={previousCrossLink.label}
32 link={previousCrossLink.link}
33 />
34 )) || <div />}
35
36 {nextCrossLink && (
37 <CrossLink
38 type="next"
39 text={nextCrossLink.label}
40 link={nextCrossLink.link}
41 />
42 )}
43 </div>
44 );
45};
46
47export default WithSidebarCrossLinks;