All files / src/stock-operations/stock-operations-forms/stock-operation-stepper stock-operation-stepper.component.tsx

100% Statements 5/5
100% Branches 4/4
100% Functions 3/3
100% Lines 5/5

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52                                        5x             63x       247x 247x         8x                            
import React from 'react';
import { Layer } from '@carbon/react';
import styles from './stepper.scss';
 
export type Step = {
  title: string;
  subTitle?: string;
  icon?: React.ReactNode;
  component: React.ReactElement;
  disabled?: boolean;
};
 
type StockOperationStepperProps = {
  steps: Step[];
  title?: string;
  hasContainer?: boolean;
  selectedIndex?: number;
  onChange?: (index: number) => void;
};
 
const StockOperationStepper: React.FC<StockOperationStepperProps> = ({
  steps,
  hasContainer,
  onChange,
  selectedIndex,
  title,
}) => {
  return (
    <Layer className={styles.layer}>
      <ol className={styles.stepperContainer}>
        {steps.map(({ title, subTitle, icon, disabled }, index) => {
          const active = selectedIndex >= index;
          return (
            <li
              role="button"
              className={`${styles.stepperItem} ${active ? styles.stepperItemActive : ''}`}
              key={index}
              onClick={!disabled ? () => onChange?.(index) : undefined}
              aria-disabled={disabled}
            >
              <p className={styles.title}>{title}</p>
            </li>
          );
        })}
      </ol>
      <Layer className={styles.content}>{steps[selectedIndex].component}</Layer>
    </Layer>
  );
};
 
export default StockOperationStepper;