The Node.js® Website
at main 1.3 kB view raw
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;