Ir al contenido

Búsqueda y Filtros

Filtra proveedores por múltiples criterios para encontrarlos rápidamente.

Busca en los siguientes campos simultáneamente:

  • Nombre comercial
  • CIF/NIF
  • Email
  • Razón social

Ejemplo: Escribe “merc” y encontrará “Mercadona”, “A46103834” o “info@mercadona.es”.

FiltroOpcionesDescripcion
EstadoTodos / Activos / InactivosMuestra solo proveedores con ese estado
CategoríaTodas / 13 categoríasFiltra por categoría por defecto

Puedes combinar búsqueda + estado + categoría:

  • Búsqueda: “mercadona”
  • Estado: Activos
  • Categoría: Suministros
  • 50 resultados por página (por defecto).
  • Botones “Anterior” / “Siguiente” para navegar.
  • Contador: “Mostrando 1 - 50 de 127”.
Detalles técnicos — Búsqueda y Filtros
Detalles técnicos

Componente: Vendors.tsxfilteredVendors useMemo

Lógica de filtrado:

vendors.filter(vendor => {
// Búsqueda por texto (OR)
const matchesSearch =
vendor.name.includes(searchTerm) ||
vendor.tax_id?.includes(searchTerm) ||
vendor.email?.includes(searchTerm) ||
vendor.legal_name?.includes(searchTerm);
// Estado (AND)
const matchesStatus =
statusFilter === "all" ||
(statusFilter === "active" && vendor.is_active) ||
(statusFilter === "inactive" && !vendor.is_active);
// Categoría (AND)
const matchesCategory =
categoryFilter === "all" ||
vendor.default_category === categoryFilter;
return matchesSearch && matchesStatus && matchesCategory;
});

Query SQL equivalente:

SELECT * FROM vendors
WHERE business_id = '<business_id>'
AND (
name ILIKE '%<search>%' OR
tax_id ILIKE '%<search>%' OR
email ILIKE '%<search>%' OR
legal_name ILIKE '%<search>%'
)
AND (is_active = <status> OR <status> IS NULL)
AND (default_category = '<cat>' OR '<cat>' IS NULL)
ORDER BY name ASC
LIMIT 50 OFFSET <page * 50>;