import { useQuery, useMutation, useQueryClient } from '@tanstack/react-query'; import { useTranslation } from 'react-i18next'; import { Loader2, Trash2, Clock } from 'lucide-react'; import { api } from '../api/client'; import type { SpoolUsageRecord } from '../api/client'; import { Button } from './Button'; import { useToast } from '../contexts/ToastContext'; interface SpoolUsageHistoryProps { spoolId: number; } function formatDate(dateStr: string): string { const date = new Date(dateStr); return date.toLocaleDateString('en-GB', { day: '2-digit', month: '2-digit', year: '2-digit' }) + ' ' + date.toLocaleTimeString('en-GB', { hour: '2-digit', minute: '2-digit' }); } const STATUS_COLORS: Record = { completed: 'text-bambu-green', failed: 'text-red-400', aborted: 'text-yellow-400', }; export function SpoolUsageHistory({ spoolId }: SpoolUsageHistoryProps) { const { t } = useTranslation(); const queryClient = useQueryClient(); const { showToast } = useToast(); const { data: history, isLoading } = useQuery({ queryKey: ['spool-usage', spoolId], queryFn: () => api.getSpoolUsageHistory(spoolId), }); const clearMutation = useMutation({ mutationFn: () => api.clearSpoolUsageHistory(spoolId), onSuccess: () => { queryClient.invalidateQueries({ queryKey: ['spool-usage', spoolId] }); showToast(t('inventory.historyCleared'), 'success'); }, }); if (isLoading) { return (
); } if (!history || history.length === 0) { return (
{t('inventory.noUsageHistory')}
); } return (

{t('inventory.usageHistory')}

{history.map((record: SpoolUsageRecord) => (
{formatDate(record.created_at)} {record.print_name && ( {record.print_name} )}
{record.weight_used.toFixed(1)}g ({record.percent_used}%) {record.status}
))}
); }