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;