import React, { useEffect, useState } from 'react'; import { Button } from '../Button'; import { Fade } from '../Transition/Fade'; import { IconArrowLeft } from '../Icon/IconArrowLeft'; import { IconArrowRight } from '../Icon/IconArrowRight'; import { Modal } from '../Modal'; import { Video } from '../Video'; export interface ITourData { title: string; content: string; image?: string; video?: string; } export interface ITour { data: ITourData[]; show: boolean; onHide(): void; onComplete?(): void; } export function Tour(props: ITour) { const { data, show, onComplete, onHide } = props; // #region state const [currentStepIndex, setCurrentStepIndex] = useState(0); const [step, setStep] = useState(data[0]); // #endregion state // #region functions const handlePrevClick = () => { if (currentStepIndex === 0) return; const prevStepIndex = currentStepIndex - 1; setStep(data[prevStepIndex]); setCurrentStepIndex(prevStepIndex); }; const handleNextClick = () => { if (currentStepIndex === data?.length - 1) return; const nextStepIndex = currentStepIndex + 1; setStep(data[nextStepIndex]); setCurrentStepIndex(nextStepIndex); }; const handleNavDotClick = (index: number) => { setStep(data[index]); setCurrentStepIndex(index); }; const handleDoneClick = () => { onHide(); onComplete && onComplete(); }; const prevButtonVisible = (currentStepIndex: number): boolean => { return currentStepIndex > 0; }; const progressButtonsVisible = (data: ITourData[], currentStepIndex: number): boolean => { return currentStepIndex === data?.length - 1 || currentStepIndex < data?.length - 1; }; const doneButtonVisible = (data: ITourData[], currentStepIndex: number): boolean => { return currentStepIndex === data?.length - 1; }; const nextButtonVisible = (data: ITourData[], currentStepIndex: number): boolean => { return currentStepIndex < data?.length - 1; }; // #endregion functions useEffect(() => { if (show) { setCurrentStepIndex(0); setStep(data[0]); } }, [show]); return ( onHide()}> {step?.title}
{(step?.video || step.image) && (
{step?.video &&
)}
{doneButtonVisible(data, currentStepIndex) && ( )} {nextButtonVisible(data, currentStepIndex) && ( )}
); }