Update: Relocate AutoRun controls and cleanup
This commit is contained in:
31
App.tsx
31
App.tsx
@@ -8,6 +8,7 @@ import AgvControls from './components/AgvControls';
|
||||
import BmsPanel from './components/BmsPanel';
|
||||
import AcsControls from './components/AcsControls';
|
||||
import AgvStatusPanel from './components/AgvStatusPanel';
|
||||
import AgvAutoRunControls from './components/AgvAutoRunControls';
|
||||
import SystemLogPanel from './components/SystemLogPanel';
|
||||
import { SerialPortHandler } from './services/serialService';
|
||||
|
||||
@@ -1164,8 +1165,38 @@ const App: React.FC = () => {
|
||||
<div className="w-80 border-r border-gray-800 bg-gray-900 flex flex-col shrink-0">
|
||||
<div className="flex-1 overflow-hidden">
|
||||
<AgvStatusPanel agvState={agvState} />
|
||||
|
||||
</div>
|
||||
|
||||
{/* Auto Run Controls (Left Sidebar) */}
|
||||
<div className="w-80 border-r border-gray-800 bg-gray-900 flex flex-col shrink-0">
|
||||
<div className="flex-1 overflow-hidden">
|
||||
<AgvAutoRunControls
|
||||
agvState={agvState}
|
||||
updateRunConfig={(key, value) => {
|
||||
if (agvState.error) return;
|
||||
setAgvState(s => ({ ...s, runConfig: { ...s.runConfig, [key]: value } }));
|
||||
}}
|
||||
toggleRun={() => {
|
||||
if (agvState.error) return;
|
||||
if (agvState.motionState === AgvMotionState.RUNNING || agvState.motionState === AgvMotionState.MARK_STOPPING) {
|
||||
setAgvState(s => ({ ...s, motionState: AgvMotionState.IDLE }));
|
||||
} else {
|
||||
const isFwd = agvState.runConfig.direction === 'FWD';
|
||||
const hasLine = isFwd ? agvState.sensorLineFront : agvState.sensorLineRear;
|
||||
if (!hasLine) {
|
||||
setAgvState(s => ({ ...s, error: 'LINE_OUT' }));
|
||||
return;
|
||||
}
|
||||
setAgvState(s => ({ ...s, motionState: AgvMotionState.RUNNING }));
|
||||
}
|
||||
}}
|
||||
isRunning={agvState.motionState === AgvMotionState.RUNNING || agvState.motionState === AgvMotionState.MARK_STOPPING}
|
||||
isError={agvState.error !== null}
|
||||
setLidar={(isOn) => setAgvState(s => ({ ...s, lidarEnabled: isOn, sensorStatus: isOn ? '1' : '0' }))}
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{/* Middle 2: ACS Panel (Fixed) */}
|
||||
<div className="flex-shrink-0">
|
||||
|
||||
1
commit_msg_2.txt
Normal file
1
commit_msg_2.txt
Normal file
@@ -0,0 +1 @@
|
||||
Update: Relocate AutoRun controls and cleanup
|
||||
@@ -3,7 +3,7 @@ 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;
|
||||
@@ -29,22 +29,7 @@ const AgvControls: React.FC<AgvControlsProps> = ({ agvState, setMotion, setLift,
|
||||
});
|
||||
};
|
||||
|
||||
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) {
|
||||
@@ -152,14 +137,7 @@ const AgvControls: React.FC<AgvControlsProps> = ({ agvState, setMotion, setLift,
|
||||
|
||||
{/* Auto Run Controls */}
|
||||
{/* Auto Run Controls (분리된 콤포넌트) */}
|
||||
<AgvAutoRunControls
|
||||
agvState={agvState}
|
||||
updateRunConfig={updateRunConfig}
|
||||
toggleRun={toggleRun}
|
||||
isRunning={isRunning}
|
||||
isError={isError}
|
||||
setLidar={setLidar}
|
||||
/>
|
||||
|
||||
</div>
|
||||
);
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user