import { Button } from '../Button'; import { H2Styled } from '../../styles/StyledElements'; import { Icon } from '../Icon'; import { Loading } from '../Loading'; import { StepperProps } from './types'; import { Typography } from '../Typography'; import color from '../../styles/colors'; import HeaderStyles from './Stepper.styles'; import React, { useEffect, useRef, useState, Fragment } from 'react'; const { DivStyled, DivStyledHelper, FooterStyled, ListItemStyled, NavStyled, OrderedListStyled, SectionStyled, SpanStyled, HeaderStyled, } = HeaderStyles; const Stepper: React.FC = ({ step = 0, stepData, hasNavButtons = true, helperContent, completeTitle = 'all done, nice!', completeMessage = 'You should tell the user what to do next, or use the onComplete function to programmatically fire an event', onComplete = () => null, headerWidth, ...props }) => { const [activeStep, setActiveStep] = useState(step); const myStepRef = useRef(activeStep); useEffect(() => { // subscribe event document.addEventListener('prev', prevStep); document.addEventListener('next', nextStep); return () => { // unsubscribe event document.removeEventListener('prev', prevStep); document.removeEventListener('next', nextStep); }; }, []); const setStep = (data: number) => { myStepRef.current = data; setActiveStep(data); }; const prevStep = () => { if (myStepRef.current <= 1) return; setStep(myStepRef.current - 1); }; const nextStep = () => { if (activeStep === stepData.length + 1) { onComplete(); return; } setStep(myStepRef.current + 1); }; const handleContentClick = (event: React.MouseEvent) => { const target = event.target as Element; if (!target.id) return; if (target.id === 'prev') prevStep(); if (target.id === 'next') nextStep(); return; }; const renderPreloader = () => ( ); const renderContent = () => (
{activeStep <= stepData.length ? ( ) : ( completeTitle )}
{activeStep <= stepData.length ? ( ) : ( completeMessage )}
); const renderStepperNumbers = () => ( {stepData.map((step, index) => ( {activeStep <= Number(index + 1) ? ( Number(index + 1) ) : ( )} ))} ); return ( {renderStepperNumbers()} {activeStep === 0 ? renderPreloader() : renderContent()} {hasNavButtons && (