import { Table, Tag, Typography, Badge, Space } from 'antd'; import type { TableColumnsType } from 'antd'; import { Link } from '@tanstack/react-router'; import type { PedidoSummary } from '@sar/api-interface'; import { useOrderList } from '../../lib/queries/orders'; const { Title } = Typography; function hoursWaiting(createdAt: string): number { return Math.floor((Date.now() - new Date(createdAt).getTime()) / 3_600_000); } const columns: TableColumnsType = [ { title: 'Nº', dataIndex: 'numPedSar', width: 120, render: (num: string, row: PedidoSummary) => ( {num} ), }, { title: 'Representante', key: 'rep', width: 160, render: (_: unknown, row: PedidoSummary) => row.nomeVendedor ?? `Cód. ${row.codVendedor}`, }, { title: 'Cliente', key: 'cliente', width: 200, render: (_: unknown, row: PedidoSummary) => row.razaoCliente ?? row.nomeCliente ?? `Cód. ${row.idCliente}`, }, { title: 'Total', dataIndex: 'total', width: 130, align: 'right', render: (v: string) => Number(v).toLocaleString('pt-BR', { style: 'currency', currency: 'BRL' }), }, { title: 'Desc. %', dataIndex: 'descontoPerc', width: 90, align: 'right', render: (v: string) => `${v}%`, }, { title: 'Aguardando', dataIndex: 'createdAt', width: 130, render: (v: string) => { const h = hoursWaiting(v); return 2 ? 'red' : 'orange'}>{h}h; }, }, { title: '', width: 100, render: (_: unknown, row: PedidoSummary) => ( Analisar ), }, ]; export function ApprovalQueuePage() { // situa=1 = Pendente de Aprovação const { data, isLoading } = useOrderList({ situa: 1, limit: 200 }); const urgentCount = data?.data.filter((o) => hoursWaiting(o.createdAt) > 2).length ?? 0; return (
Fila de Aprovações {urgentCount > 0 && ( )} rowKey="id" columns={columns} dataSource={data?.data ?? []} loading={isLoading} rowClassName={(row) => (hoursWaiting(row.createdAt) > 2 ? 'row-urgent' : '')} pagination={false} locale={{ emptyText: 'Nenhum pedido aguardando aprovação.' }} />
); }