import React from 'react'; import color from '../../styles/colors'; import { Icon } from '../Icon'; import { iconTypes } from '../Icon/collection'; import styles from './Breadcrumbs.styles'; import { IBreadcrumbs, Route } from './types'; const { Breadcrumb, BreadcrumbsSeparator, ListItemStyled, ListStyled, NavStyled, } = styles; function getNumberOfRoutesToRender(routes: Route[], currentLocation?: string) { if (!currentLocation) return routes.length - 1; for (let i = 0; i < routes.length; i++) { if (routes[i].path === currentLocation) return i; } throw new Error('Routes list does not match currentLocation'); } function renderList( routes: Route[], separator?: React.ReactNode, currentLocation?: string, ) { let separatedRoutes: any[] = []; routes.forEach((route, i) => { const crumb = ( {route?.icon} {route.breadcrumb} ); const routesWithSeparator = getNumberOfRoutesToRender( routes, currentLocation, ); if (i < routesWithSeparator) { separatedRoutes = separatedRoutes.concat( crumb, {separator ?? ( )} , ); } else if (routesWithSeparator === i) { separatedRoutes.push(crumb); } }); return separatedRoutes; } const Breadcrumbs: IBreadcrumbs = ({ theme = color.greyIcons, style, routes, separator, currentLocation, ...props }) => { return ( {renderList(routes, separator, currentLocation)} ); }; Breadcrumbs.Item = ListItemStyled; export default Breadcrumbs;