import React, { useState, useEffect } from "react"; import { Loader2, CheckCircle2, Circle, Activity, Cpu, Scan, ShieldCheck, Binary, RefreshCw } from "lucide-react"; import GlassCard from "./GlassCard"; interface Step { label: string; icon: React.ReactNode; } interface ProcessingOverlayProps { isOpen: boolean; type: "diagnosis" | "segmentation"; } const DIAGNOSIS_STEPS: Step[] = [ { label: "Resizing Image", icon: }, { label: "Input to Diagnosis mode", icon: }, { label: "Region identified", icon: }, { label: "Status determined", icon: }, { label: "Stage diagnosed", icon: }, ]; const SEGMENTATION_STEPS: Step[] = [ { label: "Image resizing", icon: }, { label: "Input to model", icon: }, { label: "Reconstructing image and then segmenting cells", icon: }, { label: "Lastly cleaning the mask", icon: }, ]; const ProcessingOverlay: React.FC = ({ isOpen, type }) => { const [currentStep, setCurrentStep] = useState(0); const steps = type === "diagnosis" ? DIAGNOSIS_STEPS : SEGMENTATION_STEPS; useEffect(() => { if (!isOpen) { setCurrentStep(0); return; } const interval = setInterval(() => { setCurrentStep((prev) => { if (prev < steps.length - 1) return prev + 1; return prev; }); }, 2000); // Change step every 2 seconds return () => clearInterval(interval); }, [isOpen, steps.length]); if (!isOpen) return null; return ( {/* Main Loader Icon */} {type === "diagnosis" ? "Running Diagnosis" : "Generating Segmentation"} Please wait while our AI models process your sample... {/* Steps List */} {steps.map((step, index) => { const isCompleted = index < currentStep; const isCurrent = index === currentStep; return ( {isCompleted ? : step.icon} {step.label} {isCurrent && } ); })} ); }; export default ProcessingOverlay;
Please wait while our AI models process your sample...
{step.label}