'use client' import { useCallback, useEffect, useState } from 'react' import { loadingSheets } from '@/lib/api/index' import type { LoadingSheetResponse } from '@/types/api' import { Skeleton } from '@/components/ui/skeleton' import { Badge } from '@/components/ui/badge' const STATUS_VARIANT: Record = { Pending: 'outline', DispatchConfirmed: 'secondary', ReceiptConfirmed: 'default', DiscrepancyFlagged: 'destructive', Resolved: 'default', } const STATUS_LABEL: Record = { Pending: 'Pending', DispatchConfirmed: 'Dispatched', ReceiptConfirmed: 'Received', DiscrepancyFlagged: 'Discrepancy', Resolved: 'Resolved', } export function LoadingSheetsWidget() { const [data, setData] = useState([]) const [total, setTotal] = useState(0) const [loading, setLoading] = useState(true) const fetchData = useCallback(async () => { setLoading(true) try { const res = await loadingSheets.list({ status: 'Pending', pageSize: 5, page: 1 }) setData(res.items ?? []) setTotal(res.total ?? 0) } catch { // silent } finally { setLoading(false) } }, []) useEffect(() => { fetchData() }, [fetchData]) if (loading) { return (
) } return (
{total} pending sheet{total !== 1 ? 's' : ''}
{data.length === 0 ? (

No pending loading sheets

) : ( data.map(sheet => (
{sheet.warehouseName} {sheet.items.length} item{sheet.items.length !== 1 ? 's' : ''}
{STATUS_LABEL[sheet.status] ?? sheet.status}
)) )}
) }