import React, { useState } from 'react'; import { X, Printer } from 'lucide-react'; import { useAlert } from '../contexts/AlertContext'; interface ManualPrintDialogProps { isOpen: boolean; onClose: () => void; onPrint: (data: PrintData) => Promise<{ success: boolean; message: string }>; } export interface PrintData { sid: string; venderLot: string; qty: string; mfg: string; rid: string; spy: string; partNo: string; printer: 'left' | 'right'; count: number; deleteAfterPrint: boolean; } export const ManualPrintDialog: React.FC = ({ isOpen, onClose, onPrint }) => { const [sid, setSid] = useState(''); const [venderLot, setVenderLot] = useState(''); const [qty, setQty] = useState(''); const [mfg, setMfg] = useState(''); const [rid, setRid] = useState(''); const [spy, setSpy] = useState(''); const [partNo, setPartNo] = useState(''); const [printer, setPrinter] = useState<'left' | 'right'>('right'); const [count, setCount] = useState(1); const [deleteAfterPrint, setDeleteAfterPrint] = useState(false); const [barcodeInput, setBarcodeInput] = useState(''); const { showAlert } = useAlert(); if (!isOpen) return null; const handlePrint = async () => { // Validate qty is a number if (qty && isNaN(Number(qty))) { showAlert({ type: 'error', title: 'Invalid Input', message: 'Please enter quantity as a number' }); return; } const printData: PrintData = { sid, venderLot, qty, mfg, rid, spy, partNo, printer, count, deleteAfterPrint }; try { const result = await onPrint(printData); if (result.success) { showAlert({ type: 'success', title: 'Print Success', message: result.message }); if (deleteAfterPrint) { setSid(''); setVenderLot(''); setQty(''); setMfg(''); setRid(''); setSpy(''); setPartNo(''); } } else { showAlert({ type: 'error', title: 'Print Failed', message: result.message }); } } catch (error: any) { showAlert({ type: 'error', title: 'Print Error', message: error.message || 'Unknown error' }); } }; const clearField = (setter: React.Dispatch>) => { setter(''); }; return (
{/* Backdrop */}
{/* Dialog */}
{/* Header */}

MANUAL PRINT

{/* Content */}
{/* Printer Selection */}
setCount(Number(e.target.value))} className="w-24 px-3 py-1 bg-slate-900 border border-white/20 rounded text-white text-center font-mono" />
{/* Input Fields */}
{[ { label: 'SID', value: sid, setter: setSid }, { label: 'Vendor Lot', value: venderLot, setter: setVenderLot }, { label: 'Quantity', value: qty, setter: setQty }, { label: 'MFG Date', value: mfg, setter: setMfg }, { label: 'Reel ID', value: rid, setter: setRid }, { label: 'Supplier', value: spy, setter: setSpy }, { label: 'Part No', value: partNo, setter: setPartNo }, ].map((field) => (
field.setter(e.target.value)} className="flex-1 px-4 py-2 bg-slate-900 border border-white/20 rounded text-white font-mono focus:border-neon-blue focus:outline-none" />
))}
{/* Barcode Input */}
setBarcodeInput(e.target.value)} className="w-full px-4 py-2 bg-slate-900 border border-white/20 rounded text-white font-mono focus:border-neon-blue focus:outline-none" placeholder="Scan or enter barcode..." />
{/* Footer */}
); };