import { Button, Descriptions, Tag, Table, Typography, Spin, Alert, Space, Divider } from 'antd'; import type { TableColumnsType } from 'antd'; import { Link, useNavigate, useParams } from '@tanstack/react-router'; import type { PedidoSummary } from '@sar/api-interface'; import { SITUA_LABEL } from '@sar/api-interface'; import { useClientDetail } from '../../lib/queries/clients'; import { useClientOrders } from '../../lib/queries/orders'; const { Title } = Typography; const ACTIVITY_COLOR: Record = { active: 'success', alert: 'warning', inactive: 'default', }; const ACTIVITY_LABEL: Record = { active: 'Ativo', alert: 'Alerta', inactive: 'Inativo', }; const orderColumns: TableColumnsType = [ { title: 'Nº', dataIndex: 'numPedSar', width: 120, render: (num: string, row: PedidoSummary) => ( {num} ), }, { title: 'Status', dataIndex: 'situa', width: 140, render: (s: number) => { const colorMap: Record = { 1: 'warning', 2: 'processing', 3: 'error', 4: 'success', }; return {SITUA_LABEL[s] ?? String(s)}; }, }, { title: 'Total', dataIndex: 'total', width: 130, align: 'right', render: (v: string) => Number(v).toLocaleString('pt-BR', { style: 'currency', currency: 'BRL' }), }, { title: 'Data', dataIndex: 'dtPedido', width: 130, render: (v: string) => new Date(v).toLocaleDateString('pt-BR'), }, ]; export function ClientDetailPage() { const { id } = useParams({ from: '/clientes/$id' }); const idNum = Number(id); const navigate = useNavigate(); const { data: client, isLoading: clientLoading, error: clientError } = useClientDetail(idNum); const { data: orders, isLoading: ordersLoading } = useClientOrders(idNum); if (clientLoading) return ; if (clientError || !client) return ; return (
← Clientes {client.razao ?? client.nome} {ACTIVITY_LABEL[client.activityStatus]} {client.nome} {client.cgcpf ?? '—'} {client.email ?? '—'} {client.ddd ? `(${client.ddd}) ` : ''} {client.telefone ?? '—'} {client.endereco && ( {client.endereco} {client.numEndereco ? `, ${client.numEndereco}` : ''} {client.bairro ? ` — ${client.bairro}` : ''} {client.cep ? ` — CEP ${client.cep}` : ''} )} {client.limiteCreditoStr ? Number(client.limiteCreditoStr).toLocaleString('pt-BR', { style: 'currency', currency: 'BRL', }) : '—'} {client.dtUltimaCompra ? new Date(client.dtUltimaCompra).toLocaleDateString('pt-BR') : '—'} Últimos Pedidos rowKey="id" columns={orderColumns} dataSource={orders ?? []} loading={ordersLoading} pagination={false} size="small" rowClassName={(row) => (row.situa === 1 ? 'row-pending' : '')} />
); }