import { useState } from 'react'; import { useMutation, useQueryClient } from '@tanstack/react-query'; import { api, isConfirmationRequired } from '../../api/client'; import type { PrinterStatus } from '../../api/client'; import { Pause, Play, Square, Loader2 } from 'lucide-react'; import { ConfirmModal } from '../ConfirmModal'; interface PrintControlsProps { printerId: number; status: PrinterStatus | null | undefined; } export function PrintControls({ printerId, status }: PrintControlsProps) { const queryClient = useQueryClient(); const [confirmModal, setConfirmModal] = useState<{ action: string; token: string; warning: string; } | null>(null); const isConnected = status?.connected ?? false; const isPrinting = status?.state === 'RUNNING'; const isPaused = status?.state === 'PAUSE'; const pauseMutation = useMutation({ mutationFn: () => api.pausePrint(printerId), onSuccess: () => { queryClient.invalidateQueries({ queryKey: ['printerStatuses'] }); }, }); const resumeMutation = useMutation({ mutationFn: () => api.resumePrint(printerId), onSuccess: () => { queryClient.invalidateQueries({ queryKey: ['printerStatuses'] }); }, }); const stopMutation = useMutation({ mutationFn: (token?: string) => api.stopPrint(printerId, token), onSuccess: (result) => { if (isConfirmationRequired(result)) { setConfirmModal({ action: 'stop', token: result.token, warning: result.warning, }); } else { queryClient.invalidateQueries({ queryKey: ['printerStatuses'] }); } }, }); const handleStop = () => { stopMutation.mutate(undefined); }; const handleConfirmStop = () => { if (confirmModal) { stopMutation.mutate(confirmModal.token); setConfirmModal(null); } }; const isLoading = pauseMutation.isPending || resumeMutation.isPending || stopMutation.isPending; return ( <>
{(pauseMutation.error || resumeMutation.error || stopMutation.error)?.message}
)}