The Node.js® Website
at main 49 lines 1.3 kB view raw
1import { useTranslations } from 'next-intl'; 2import type { ComponentProps, FC } from 'react'; 3 4import SidebarGroup from '@/components/Containers/Sidebar/SidebarGroup'; 5import WithRouterSelect from '@/components/withRouterSelect'; 6import { useClientContext } from '@/hooks/react-server'; 7 8import styles from './index.module.css'; 9 10type SidebarProps = { 11 groups: Array<ComponentProps<typeof SidebarGroup>>; 12}; 13 14const SideBar: FC<SidebarProps> = ({ groups }) => { 15 const t = useTranslations(); 16 const { pathname } = useClientContext(); 17 18 const selectItems = groups.map(({ items, groupName }) => ({ 19 label: groupName, 20 items: items.map(({ label, link }) => ({ value: link, label })), 21 })); 22 23 const currentItem = selectItems 24 .map(item => item.items) 25 .flat() 26 .find(item => pathname === item.value); 27 28 return ( 29 <aside className={styles.wrapper}> 30 {selectItems.length > 0 && ( 31 <WithRouterSelect 32 label={t('components.common.sidebar.title')} 33 values={selectItems} 34 defaultValue={currentItem?.value} 35 /> 36 )} 37 38 {groups.map(({ groupName, items }) => ( 39 <SidebarGroup 40 key={groupName.toString()} 41 groupName={groupName} 42 items={items} 43 /> 44 ))} 45 </aside> 46 ); 47}; 48 49export default SideBar;