import { LookupDialog } from "@repo/rdx-ui/components"; import DataTable, { TableColumn } from "react-data-table-component"; import { useDebounce } from "use-debounce"; import { buildTextFilters } from "@erp/core/client"; import { Badge, Button, Card, CardContent, Dialog, DialogContent, DialogFooter, DialogHeader, DialogTitle, Label, TableCell, } from "@repo/shadcn-ui/components"; import { Building, Calendar, Mail, MapPin, Phone, Plus, User } from "lucide-react"; import { useState } from "react"; import { ListCustomersResponseDTO } from "../../common"; import { useCustomersQuery } from "../hooks"; type Customer = ListCustomersResponseDTO["items"][number]; const columns: TableColumn[] = [ { name: "Nombre", selector: (row) => row.name, sortable: true, }, { name: "Email", selector: (row) => row.email, sortable: true, }, { name: "Empresa", selector: (row) => row.trade_name ?? row.metadata?.company_name ?? "-", sortable: false, }, { name: "Estado", selector: (row) => row.status, sortable: false, }, ]; const mockCustomers: Customer[] = [ { id: "a1d2e3f4-5678-90ab-cdef-1234567890ab", name: "Juan Pérez", email: "juan@email.com", phone: "+34 600 123 456", company: "Tech Corp", address: "Calle Mayor 123, Madrid", createdAt: "2024-01-15", status: "Activo", }, { id: "b1d2e3f4-5678-90ab-cdef-1234567890ab", name: "María García", email: "maria@email.com", phone: "+34 600 789 012", company: "Design Studio", address: "Av. Diagonal 456, Barcelona", createdAt: "2024-02-20", status: "Activo", }, { id: "c1d2e3f4-5678-90ab-cdef-1234567890ab", name: "Carlos López", email: "carlos@email.com", phone: "+34 600 345 678", company: "Marketing Plus", address: "Gran Vía 789, Valencia", createdAt: "2024-01-30", status: "Inactivo", }, { id: "d1d2e3f4-5678-90ab-cdef-1234567890ab", name: "Ana Martínez", email: "ana@email.com", phone: "+34 600 901 234", company: "Consulting Group", address: "Calle Sierpes 321, Sevilla", createdAt: "2024-03-10", status: "Activo", }, ]; async function fetchClientes(search: string): Promise { await new Promise((res) => setTimeout(res, 500)); const mock: Customer[] = [ { id: "a1", name: "Juan Pérez", email: "juan@email.com", phone: "+34 600 123 456", company: "Tech Corp", address: "Madrid", createdAt: "2024-01-15", status: "Activo", }, { id: "b1", name: "María García", email: "maria@email.com", phone: "+34 600 789 012", company: "Design Studio", address: "Barcelona", createdAt: "2024-02-20", status: "Activo", }, ]; return mock.filter( (c) => c.name.toLowerCase().includes(search.toLowerCase()) || c.email.toLowerCase().includes(search.toLowerCase()) || c.company.toLowerCase().includes(search.toLowerCase()) ); } export const ClientSelector = () => { const [isCreateOpen, setIsCreateOpen] = useState(false); const [open, setOpen] = useState(false); const [search, setSearch] = useState(""); const [pageNumber, setPageNumber] = useState(1); const [pageSize] = useState(10); const [selectedCustomer, setSelectedCustomer] = useState(undefined); const [debouncedSearch] = useDebounce(search, 400); const { data, isLoading, isError, refetch } = useCustomersQuery({ filters: buildTextFilters(["name", "email", "trade_name"], debouncedSearch), pageSize, pageNumber, }); const handleSelectClient = (event): void => { event.preventDefault(); setOpen(true); }; return (
{selectedCustomer && (

{selectedCustomer.name}

{selectedCustomer.status}
{selectedCustomer.company}

{selectedCustomer.email}

)} { setSelectedCustomer(customer); setOpen(false); }} onCreate={(e) => { e.preventDefault(); setOpen(true); console.log("Crear nuevo cliente"); }} page={pageNumber} perPage={pageSize} onPageChange={setPageNumber} renderItem={() => null} // No se usa con DataTable renderContainer={(items) => ( { setSelectedCustomer(item); setOpen(false); }} pagination paginationServer paginationPerPage={pageSize} paginationTotalRows={data?.total_items ?? 0} onChangePage={(p) => setPageNumber(p)} highlightOnHover pointerOnHover noDataComponent='No se encontraron resultados' /> )} /> Nuevo Cliente

Formulario de creación pendiente…

); }; // COMPONENTES VISUALES const CustomerCard = ({ customer }: { customer: Customer }) => (
{customer.name} {customer.status}
{customer.email}
{customer.company}
{customer.phone}
{customer.address}
{new Date(customer.createdAt).toLocaleDateString("es-ES")}
); const CustomerRow = ({ customer }: { customer: Customer }) => ( <> {customer.name} {customer.email} {customer.company} {customer.status} );