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 BmsPanel from './components/BmsPanel';
|
||||||
import AcsControls from './components/AcsControls';
|
import AcsControls from './components/AcsControls';
|
||||||
import AgvStatusPanel from './components/AgvStatusPanel';
|
import AgvStatusPanel from './components/AgvStatusPanel';
|
||||||
|
import AgvAutoRunControls from './components/AgvAutoRunControls';
|
||||||
import SystemLogPanel from './components/SystemLogPanel';
|
import SystemLogPanel from './components/SystemLogPanel';
|
||||||
import { SerialPortHandler } from './services/serialService';
|
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="w-80 border-r border-gray-800 bg-gray-900 flex flex-col shrink-0">
|
||||||
<div className="flex-1 overflow-hidden">
|
<div className="flex-1 overflow-hidden">
|
||||||
<AgvStatusPanel agvState={agvState} />
|
<AgvStatusPanel agvState={agvState} />
|
||||||
|
|
||||||
</div>
|
</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) */}
|
{/* Middle 2: ACS Panel (Fixed) */}
|
||||||
<div className="flex-shrink-0">
|
<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 { StopCircle, Play, Square, AlertTriangle, ChevronsUp, ChevronsDown, Magnet, Radar, ArrowLeft, ArrowRight } from 'lucide-react';
|
||||||
import { AgvState, AgvMotionState, AgvRunConfig } from '../types';
|
import { AgvState, AgvMotionState, AgvRunConfig } from '../types';
|
||||||
import AgvManualControls from './AgvManualControls';
|
import AgvManualControls from './AgvManualControls';
|
||||||
import AgvAutoRunControls from './AgvAutoRunControls';
|
|
||||||
|
|
||||||
interface AgvControlsProps {
|
interface AgvControlsProps {
|
||||||
agvState: AgvState;
|
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 = () => {
|
const handleMarkStop = () => {
|
||||||
if (agvState.motionState === AgvMotionState.RUNNING) {
|
if (agvState.motionState === AgvMotionState.RUNNING) {
|
||||||
@@ -152,14 +137,7 @@ const AgvControls: React.FC<AgvControlsProps> = ({ agvState, setMotion, setLift,
|
|||||||
|
|
||||||
{/* Auto Run Controls */}
|
{/* Auto Run Controls */}
|
||||||
{/* Auto Run Controls (분리된 콤포넌트) */}
|
{/* Auto Run Controls (분리된 콤포넌트) */}
|
||||||
<AgvAutoRunControls
|
|
||||||
agvState={agvState}
|
|
||||||
updateRunConfig={updateRunConfig}
|
|
||||||
toggleRun={toggleRun}
|
|
||||||
isRunning={isRunning}
|
|
||||||
isError={isError}
|
|
||||||
setLidar={setLidar}
|
|
||||||
/>
|
|
||||||
</div>
|
</div>
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|||||||
Reference in New Issue
Block a user