import React, { useState, useMemo } from 'react'; import { Navigation, Package, Zap, ChevronRight, Hash, Type } from 'lucide-react'; import { SimulationMap } from '../types'; interface AcsControlsProps { onSend: (cmd: number, data?: number[]) => void; isConnected: boolean; mapData: SimulationMap; } const AcsControls: React.FC = ({ onSend, isConnected, mapData }) => { const [tagId, setTagId] = useState('0001'); const [alias, setAlias] = useState('charger1'); const PRESET_ALIASES = [ 'charger1', 'charger2', 'loader', 'unloader', 'cleaner', 'buffer1', 'buffer2', 'buffer3', 'buffer4', 'buffer5', 'buffer6' ]; const availableTags = useMemo(() => { // Extract unique, non-empty RFID tags from map nodes const tags = mapData.nodes .filter(n => n.rfidId && n.rfidId.trim() !== '') .map(n => n.rfidId); return Array.from(new Set(tags)).sort(); }, [mapData]); const handleSend = (cmd: number, dataStr?: string, dataByte?: number) => { if (!isConnected) return; let payload: number[] = []; if (dataStr !== undefined) { // Convert string to ASCII bytes for (let i = 0; i < dataStr.length; i++) { payload.push(dataStr.charCodeAt(i)); } } else if (dataByte !== undefined) { payload.push(dataByte); } onSend(cmd, payload); }; return (

ACS Control EXT CMD

{/* Navigation Commands */}
{/* Goto Tag */}
setTagId(e.target.value)} className="w-full bg-gray-900 border border-gray-600 rounded py-1 pl-7 pr-2 text-xs text-white font-mono focus:border-green-500 outline-none" placeholder="Tag ID" /> {availableTags.map(tag => (
{/* Goto Alias */}
setAlias(e.target.value)} className="w-full bg-gray-900 border border-gray-600 rounded py-1 pl-7 pr-2 text-xs text-white font-mono focus:border-green-500 outline-none" placeholder="Alias Name" /> {PRESET_ALIASES.map(item => (
{/* Action Buttons Grid */}
{/* Lift Controls (New) */}

Lift Control

{/* System Controls (New) */}

System Control

Mark Stop
); }; export default AcsControls;