import { useState } from 'react'; import { useTranslation } from 'react-i18next'; import { useMutation, useQuery, useQueryClient } from '@tanstack/react-query'; import { Loader2, ChevronDown, ArrowRightLeft } from 'lucide-react'; import { api, multiVirtualPrinterApi } from '../api/client'; import { Card, CardContent } from './Card'; import { Button } from './Button'; import { useToast } from '../contexts/ToastContext'; type Mode = 'immediate' | 'review' | 'print_queue' | 'proxy'; const MODE_LABELS: Record = { immediate: 'archive', review: 'review', print_queue: 'queue', proxy: 'proxy', }; interface VirtualPrinterAddDialogProps { onClose: () => void; } export function VirtualPrinterAddDialog({ onClose }: VirtualPrinterAddDialogProps) { const { t } = useTranslation(); const queryClient = useQueryClient(); const { showToast } = useToast(); const [name, setName] = useState(''); const [mode, setMode] = useState('immediate'); const [targetPrinterId, setTargetPrinterId] = useState(null); const { data: printers } = useQuery({ queryKey: ['printers'], queryFn: api.getPrinters, }); const createMutation = useMutation({ mutationFn: () => multiVirtualPrinterApi.create({ name: name.trim() || 'Bambuddy', mode, target_printer_id: mode === 'proxy' ? (targetPrinterId ?? undefined) : undefined, }), onSuccess: () => { queryClient.invalidateQueries({ queryKey: ['virtual-printers'] }); showToast(t('virtualPrinter.toast.created')); onClose(); }, onError: (error: Error) => { showToast(error.message || t('virtualPrinter.toast.failedToCreate'), 'error'); }, }); return (
e.stopPropagation()} >

{t('virtualPrinter.addDialog.title')}

{/* Name */}
setName(e.target.value)} placeholder="Bambuddy" className="w-full bg-bambu-dark-secondary border border-bambu-dark-tertiary rounded-md px-3 py-2 text-white text-sm placeholder-bambu-gray" autoFocus />
{/* Mode */}
{(['immediate', 'review', 'print_queue', 'proxy'] as const).map((m) => ( ))}
{/* Target Printer - only for proxy mode */} {mode === 'proxy' && (
)}

{t('virtualPrinter.addDialog.hint')}

{/* Actions */}
); }