'use client'; import { useState } from 'react'; import { Header } from '@/components/layouts/header'; import { Card, CardContent, CardHeader, CardTitle } from '@/components/ui/card'; import { Button } from '@/components/ui/button'; import { Input } from '@/components/ui/input'; import { useCfdis } from '@/lib/hooks/use-cfdi'; import type { CfdiFilters, TipoCfdi } from '@horux/shared'; import { FileText, Search, ChevronLeft, ChevronRight } from 'lucide-react'; export default function CfdiPage() { const [filters, setFilters] = useState({ page: 1, limit: 20, }); const [searchTerm, setSearchTerm] = useState(''); const { data, isLoading } = useCfdis(filters); const handleSearch = () => { setFilters({ ...filters, search: searchTerm, page: 1 }); }; const handleFilterType = (tipo?: TipoCfdi) => { setFilters({ ...filters, tipo, page: 1 }); }; const formatCurrency = (value: number) => new Intl.NumberFormat('es-MX', { style: 'currency', currency: 'MXN', }).format(value); const formatDate = (dateString: string) => new Date(dateString).toLocaleDateString('es-MX', { day: '2-digit', month: 'short', year: 'numeric', }); return ( <>
{/* Filters */}
setSearchTerm(e.target.value)} onKeyDown={(e) => e.key === 'Enter' && handleSearch()} />
{/* Table */} CFDIs ({data?.total || 0}) {isLoading ? (
Cargando...
) : data?.data.length === 0 ? (
No se encontraron CFDIs
) : (
{data?.data.map((cfdi) => ( ))}
Fecha Tipo Serie/Folio Emisor/Receptor Total Estado
{formatDate(cfdi.fechaEmision)} {cfdi.tipo === 'ingreso' ? 'Ingreso' : 'Egreso'} {cfdi.serie || '-'}-{cfdi.folio || '-'}

{cfdi.tipo === 'ingreso' ? cfdi.nombreReceptor : cfdi.nombreEmisor}

{cfdi.tipo === 'ingreso' ? cfdi.rfcReceptor : cfdi.rfcEmisor}

{formatCurrency(cfdi.total)} {cfdi.estado === 'vigente' ? 'Vigente' : 'Cancelado'}
)} {/* Pagination */} {data && data.totalPages > 1 && (

Pagina {data.page} de {data.totalPages}

)}
); }