import { useMemo } from 'react' import type { ClienteMaestro } from '../services/clientes-maestro' interface Props { datos: ClienteMaestro[] total: number pagina: number limite: number cargando: boolean onPageChange: (pagina: number) => void onExportar: () => void onRowClick?: (cliente: ClienteMaestro) => void } /** Tabla paginada de clientes maestro con dark mode completo */ export function ClientesMaestroTable({ datos, total, pagina, limite, cargando, onPageChange, onExportar, onRowClick }: Props) { const totalPaginas = Math.ceil(total / limite) const inicio = (pagina - 1) * limite + 1 const fin = Math.min(pagina * limite, total) const paginasVisibles = useMemo(() => { const paginas: number[] = [] const start = Math.max(1, pagina - 2) const end = Math.min(totalPaginas, pagina + 2) for (let i = start; i <= end; i++) paginas.push(i) return paginas }, [pagina, totalPaginas]) const formatCurrency = (v: number | null) => { if (v == null) return 'β' return new Intl.NumberFormat('es-MX', { style: 'currency', currency: 'MXN', maximumFractionDigits: 0 }).format(v) } return (
{total > 0 ? ( <> Mostrando {inicio}β{fin} de{' '} {total.toLocaleString()} clientes > ) : ( 'Sin resultados' )}
No hay clientes para mostrar.
) : ( <> {/* Mobile: cards */}{c.nombre} {c.apellidoPaterno} {c.apellidoMaterno ?? ''}
{c.estatus && ( {c.estatus} )}#{c.numCliente}
| # | Nombre completo | TelΓ©fono | Desarrollo | Estatus | Valor | Vendedor | |
|---|---|---|---|---|---|---|---|
| {c.numCliente} | {c.nombre} {c.apellidoPaterno} {c.apellidoMaterno ?? ''} | {c.telefono ?? 'β'} | {c.email ?? 'β'} | {c.desarrollo ?? 'β'} | {c.estatus ? ( {c.estatus} ) : ( β )} | {formatCurrency(c.valorTotal)} | {c.vendedor ?? 'β'} |