import { IStep } from "@/data"; import styles from "./styles.module.css"; import { useEffect, useState } from "react"; interface IStepperProps { steps: IStep[]; currentStep: number; currentQuestion: number; } function Stepper({ steps, currentStep, currentQuestion }: IStepperProps) { const [filterSteps, setFilterSteps] = useState(steps); const [currentStepIndex, setCurrentStepIndex] = useState(currentStep); const lastStepIndex = filterSteps.length - 1; useEffect(() => { if ( ![ "relationship_pattern", "relationships", "personalityTraits", "partnerProfile", ].includes(steps[currentStep].id) ) { return setFilterSteps( steps.filter( (item) => !["relationship_pattern", "personalityTraits"].includes(item.id) ) ); } if (steps[currentStep].id === "personalityTraits") { return setFilterSteps( steps.filter( (item) => !["relationship_pattern", "partnerProfile"].includes(item.id) ) ); } if (steps[currentStep].id === "partnerProfile") { return setFilterSteps( steps.filter( (item) => !["relationships", "personalityTraits"].includes(item.id) ) ); } if (steps[currentStep].id === "relationship_pattern") { return setFilterSteps( steps.filter( (item) => !["relationships", "personalityTraits"].includes(item.id) ) ); } if (steps[currentStep].id === "relationships") { return setFilterSteps( steps.filter( (item) => !["relationship_pattern", "personalityTraits"].includes(item.id) ) ); } }, [currentStep, steps]); useEffect(() => { const idCurrentStep = steps[currentStep].id; setCurrentStepIndex( filterSteps.findIndex((step) => step.id === idCurrentStep) ); }, [currentStep, filterSteps, steps]); const getLinePercent = (index: number) => { if (index < currentStepIndex) { return 100; } else if (index === currentStepIndex) { const percent = (currentQuestion / filterSteps[index].questions.length) * 100; if (percent > 100) { return 100; } return percent; } else { return 0; } }; const getIndexOfStep = (id: string) => { return filterSteps.findIndex((item) => item.id === id); }; return (
{filterSteps.map((step, index) => { return (
currentStepIndex ? "transparent" : step.color, borderColor: step.color, color: step.color, }} > {index > currentStepIndex ? getIndexOfStep(step.id) : null}
); })}
= currentStepIndex ? "transparent" : "#bb6bd9", borderColor: "#bb6bd9", color: "#bb6bd9", }} > {lastStepIndex >= currentStepIndex ? lastStepIndex + 1 : null}
); } export default Stepper;