import { useState } from "react"; import { useTheme, useMediaQuery, Dialog, DialogProps, Stack, DialogTitle, Typography, IconButton, MobileStepper, DialogActions, Button, Slide, } from "@mui/material"; import CloseIcon from "@mui/icons-material/Close"; import ChevronRightIcon from "@mui/icons-material/ChevronRight"; import ChevronLeftIcon from "@mui/icons-material/ChevronLeft"; import { SlideTransitionMui } from "@src/components/Modal/SlideTransition"; import ScrollableDialogContent from "@src/components/Modal/ScrollableDialogContent"; import { spreadSx } from "@src/utils/ui"; export interface IWizardDialogProps extends DialogProps { title: string; steps: { title: string; description?: React.ReactNode; content: React.ReactNode; disableNext?: boolean; }[]; onFinish: () => void; fullHeight?: boolean; } export default function WizardDialog({ title, steps, onFinish, fullHeight = true, onClose, open: openProp, ...props }: IWizardDialogProps) { const theme = useTheme(); const isMobile = useMediaQuery(theme.breakpoints.down("sm")); const [open, setOpen] = useState(true); const [emphasizeCloseButton, setEmphasizeCloseButton] = useState(false); const handleClose: NonNullable = (event, reason) => { if (reason === "backdropClick" || reason === "escapeKeyDown") { setEmphasizeCloseButton(true); return; } setOpen(false); setEmphasizeCloseButton(false); if (onClose) setTimeout(() => onClose!(event, reason), 300); }; const [step, setStep] = useState(0); const currentStep = steps[step]; const handleNext = () => step < steps.length - 1 ? setStep((s) => s + 1) : onFinish(); const handleBack = () => step > 0 ? setStep((s) => s - 1) : onClose?.({}, "escapeKeyDown"); return ( {title} {currentStep.title && `: ${currentStep.title}`} } backButton={ } /> {currentStep.description && ( {currentStep.description} )} {currentStep.content} ); }