import React from 'react'; import { StopCircle, Play, Square, AlertTriangle, ChevronsUp, ChevronsDown, Magnet, Radar, ArrowLeft, ArrowRight } from 'lucide-react'; import { AgvState, AgvMotionState, AgvRunConfig } from '../types'; import AgvManualControls from './AgvManualControls'; import AgvAutoRunControls from './AgvAutoRunControls'; interface AgvControlsProps { agvState: AgvState; setMotion: (state: AgvMotionState) => void; setLift: (val: number) => void; setRunConfig: (config: AgvRunConfig) => void; setError: (error: string | null) => void; onTurn180: (direction: 'LEFT' | 'RIGHT') => void; setMagnet: (isOn: boolean) => void; setLiftStatus: (status: 'IDLE' | 'UP' | 'DOWN') => void; setLidar: (isOn: boolean) => void; } const AgvControls: React.FC = ({ agvState, setMotion, setLift, setRunConfig, setError, onTurn180, setMagnet, setLiftStatus, setLidar }) => { const isRunning = agvState.motionState === AgvMotionState.RUNNING || agvState.motionState === AgvMotionState.MARK_STOPPING; const isError = agvState.error !== null; const updateRunConfig = (key: keyof AgvRunConfig, value: any) => { if (isError) return; setRunConfig({ ...agvState.runConfig, [key]: value }); }; const toggleRun = () => { if (isError) return; if (isRunning) { setMotion(AgvMotionState.IDLE); } else { const isFwd = agvState.runConfig.direction === 'FWD'; const hasLine = isFwd ? agvState.sensorLineFront : agvState.sensorLineRear; if (!hasLine) { setError('LINE_OUT'); return; } setMotion(AgvMotionState.RUNNING); } }; const handleMarkStop = () => { if (agvState.motionState === AgvMotionState.RUNNING) { setRunConfig({ ...agvState.runConfig, speedLevel: 'L' }); setMotion(AgvMotionState.MARK_STOPPING); } }; const resetError = () => { setError(null); }; const handleLiftSliderChange = (e: React.ChangeEvent) => { if (agvState.liftStatus !== 'IDLE') { setLiftStatus('IDLE'); } setLift(parseInt(e.target.value)); }; return (
{/* Error Overlay */} {isError && (
{agvState.error}
)} {/* Manual Operation (분리된 콤포넌트) */} {/* Lift & Magnet */}
Lift Height {Math.round(agvState.liftHeight)}%
{/* Auto Run Controls */} {/* Auto Run Controls (분리된 콤포넌트) */}
); }; export default AgvControls;