import React, { forwardRef, ElementRef, ReactNode, Children, cloneElement, } from 'react' import { ComponentProps } from '@stitches/react' import { styled } from '~/theme' import { getIconFromName, IconName } from '~/components' const StyledBreadcrumbs = styled('div', { display: 'flex', alignItems: 'center', }) const StyledSeparator = styled('div', { marginLeft: '8px', marginRight: '8px', }) export interface BreadcrumbsProps extends ComponentProps { separator?: ReactNode separatorIcon?: IconName children: ReactNode } export const Breadcrumbs = forwardRef< ElementRef, BreadcrumbsProps >((properties, forwardedRef) => { const { children, separator, separatorIcon, ...remainingProps } = properties const DefaultIcon = getIconFromName('IconChevronRight') let TargetSeparator: ReactNode = if (separator) { TargetSeparator = separator } else if (separatorIcon) { const TargetIcon = getIconFromName(separatorIcon) TargetSeparator = } const breadcrumbs = Children.toArray(children).reduce( (accumulator: ReactNode[], child: any, index, array) => { accumulator.push(cloneElement(child, { key: `breadcrumb-${index}` })) if (index !== array.length - 1) { accumulator.push( {TargetSeparator} ) } return accumulator }, [] ) return ( {breadcrumbs} ) }) Breadcrumbs.displayName = 'Breadcrumbs'