import React, { useState, useRef, useEffect } from 'react'; import { Camera, ChevronRight, X } from 'lucide-react'; import { comms } from '../communication'; import { useAlert } from '../contexts/AlertContext'; interface VisionMenuProps { isOpen: boolean; onClose: () => void; } export const VisionMenu: React.FC = ({ isOpen, onClose }) => { const [activeSubmenu, setActiveSubmenu] = useState(null); const menuRef = useRef(null); const { showAlert } = useAlert(); useEffect(() => { const handleClickOutside = (event: MouseEvent) => { if (menuRef.current && !menuRef.current.contains(event.target as Node)) { onClose(); } }; if (isOpen) { document.addEventListener('mousedown', handleClickOutside); } return () => { document.removeEventListener('mousedown', handleClickOutside); }; }, [isOpen, onClose]); if (!isOpen) return null; const handleVisionCommand = async (commandFn: () => Promise<{ success: boolean; message: string }>, actionName: string) => { try { const result = await commandFn(); if (result.success) { console.log(`[VisionMenu] ${actionName}: ${result.message}`); } else { console.error(`[VisionMenu] ${actionName} failed: ${result.message}`); showAlert({ type: 'error', title: `${actionName} Failed`, message: result.message }); } } catch (error: any) { console.error(`[VisionMenu] ${actionName} error:`, error); showAlert({ type: 'error', title: `${actionName} Error`, message: error.message || 'Unknown error' }); } }; return (
{/* Header */}

VISION

{/* Menu Items */}
{/* Camera (QRCode) */}
{/* QRCode Submenu */} {activeSubmenu === 'qrcode' && (
setActiveSubmenu(null)} >
)}
{/* Barcode (Keyence) */}
{/* Keyence Submenu */} {activeSubmenu === 'keyence' && (
setActiveSubmenu(null)} >
)}
); };