Files
twenty_crm/front/src/modules/ui/step-bar/components/StepBar.tsx
Weiko 9b34a0ff3d Add styled component rule (#1261)
* Add StyledComponent rule

* update doc

* update doc

* update doc
2023-08-17 20:58:02 -07:00

43 lines
1.1 KiB
TypeScript

import React from 'react';
import styled from '@emotion/styled';
import { Step, StepProps } from './Step';
const StyledContainer = styled.div`
display: flex;
flex: 1;
justify-content: space-between;
`;
export type StepsProps = React.PropsWithChildren &
React.ComponentProps<'div'> & {
activeStep: number;
};
export const StepBar = ({ children, activeStep, ...restProps }: StepsProps) => {
return (
<StyledContainer {...restProps}>
{React.Children.map(children, (child, index) => {
if (!React.isValidElement(child)) {
return null;
}
// If the child is not a Step, return it as-is
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
// @ts-expect-error
if (child.type?.displayName !== Step.displayName) {
return child;
}
return React.cloneElement<StepProps>(child as any, {
index,
isActive: index <= activeStep,
isLast: index === React.Children.count(children) - 1,
});
})}
</StyledContainer>
);
};
StepBar.Step = Step;