import React, { useState, useEffect } from 'react'; import { Target, CheckCircle2, Loader2 } from 'lucide-react'; import { TechButton } from './common/TechButton'; interface InitializeModalProps { isOpen: boolean; onClose: () => void; } type AxisStatus = 'pending' | 'initializing' | 'completed'; interface AxisState { name: string; status: AxisStatus; progress: number; } export const InitializeModal: React.FC = ({ isOpen, onClose }) => { const [axes, setAxes] = useState([ { name: 'X-Axis', status: 'pending', progress: 0 }, { name: 'Y-Axis', status: 'pending', progress: 0 }, { name: 'Z-Axis', status: 'pending', progress: 0 }, ]); const [isInitializing, setIsInitializing] = useState(false); // Reset state when modal closes useEffect(() => { if (!isOpen) { setAxes([ { name: 'X-Axis', status: 'pending', progress: 0 }, { name: 'Y-Axis', status: 'pending', progress: 0 }, { name: 'Z-Axis', status: 'pending', progress: 0 }, ]); setIsInitializing(false); } }, [isOpen]); const startInitialization = () => { setIsInitializing(true); // Initialize each axis with 3 second delay between them axes.forEach((axis, index) => { const delay = index * 3000; // 0s, 3s, 6s // Start initialization after delay setTimeout(() => { setAxes(prev => { const next = [...prev]; next[index] = { ...next[index], status: 'initializing', progress: 0 }; return next; }); // Progress animation (3 seconds) const startTime = Date.now(); const duration = 3000; const interval = setInterval(() => { const elapsed = Date.now() - startTime; const progress = Math.min((elapsed / duration) * 100, 100); setAxes(prev => { const next = [...prev]; next[index] = { ...next[index], progress }; return next; }); if (progress >= 100) { clearInterval(interval); setAxes(prev => { const next = [...prev]; next[index] = { ...next[index], status: 'completed', progress: 100 }; return next; }); // Check if all axes are completed setAxes(prev => { if (prev.every(a => a.status === 'completed')) { // Auto close after 500ms setTimeout(() => { onClose(); }, 500); } return prev; }); } }, 50); }, delay); }); }; if (!isOpen) return null; const allCompleted = axes.every(a => a.status === 'completed'); return (

AXIS INITIALIZATION

{axes.map((axis, index) => (
{axis.status === 'completed' ? ( ) : axis.status === 'initializing' ? ( ) : (
)} {axis.name}
{axis.status === 'completed' ? 'COMPLETED' : axis.status === 'initializing' ? `${Math.round(axis.progress)}%` : 'WAITING'}
{/* Progress Bar */}
))}
{allCompleted && (
✓ ALL AXES INITIALIZED SUCCESSFULLY
)}
CANCEL {isInitializing ? 'INITIALIZING...' : 'START INITIALIZATION'}
); };