import { RouterLogo } from '@expo/styleguide'; import { Cube01Icon, CpuChip01Icon, EasMetadataIcon, LayersTwo02Icon, Rocket01Icon, TerminalBrowserIcon, EasSubmitIcon, Bell03Icon, PlanEnterpriseIcon, PaletteIcon, DataIcon, } from '@expo/styleguide-icons'; import { SidebarNodeProps } from './Sidebar'; import { SidebarTitle, SidebarLink, SidebarSection } from './index'; import { NavigationRoute } from '~/types/common'; import { HandWaveIcon } from '~/ui/components/CustomIcons/HandWaveIcon'; export const SidebarGroup = ({ route, parentRoute }: SidebarNodeProps) => { const title = route.sidebarTitle ?? route.name; const Icon = getIconElement(title); return (
{!shouldSkipTitle(route, parentRoute) && {title}} {(route.children || []).map(child => child.type === 'page' ? ( {child.sidebarTitle || child.name} ) : ( ) )}
); }; function shouldSkipTitle(info: NavigationRoute, parentGroup?: NavigationRoute) { if (info.name === parentGroup?.name) { // If the title of the group is Expo SDK and the section within it has the same name // then we shouldn't show the title twice. You might want to organize your group like // so it is collapsable return true; } else if ( info.children && ((info.children[0] || {}).sidebarTitle || (info.children[0] || {}).name) === info.name ) { // If the first child post in the group has the same name as the group, then hide the // group title, lest we be very repetitive return true; } return false; } function getIconElement(iconName?: string) { switch (iconName) { case 'Develop': return TerminalBrowserIcon; case 'Deploy': return Rocket01Icon; case 'EAS Build': return Cube01Icon; case 'EAS Submit': return EasSubmitIcon; case 'EAS Update': return LayersTwo02Icon; case 'EAS Metadata': return EasMetadataIcon; case 'EAS Insights': return DataIcon; case 'Expo Modules API': return CpuChip01Icon; case 'Expo Router': return RouterLogo; case 'Push notifications': return Bell03Icon; case 'UI programming': return PaletteIcon; case 'EAS': return PlanEnterpriseIcon; case 'Get started': return HandWaveIcon; default: return undefined; } }