"use client"; import { Search, X, SlidersHorizontal, Download } from "lucide-react"; import { Input } from "@/components/ui/input"; import { Button } from "@/components/ui/button"; import { Badge } from "@/components/ui/badge"; import { DropdownMenu, DropdownMenuCheckboxItem, DropdownMenuContent, DropdownMenuLabel, DropdownMenuSeparator, DropdownMenuTrigger, } from "@/components/ui/dropdown-menu"; import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue, } from "@/components/ui/select"; import { ProjectStatus, STATUS_CONFIG, Project } from "@/types/project"; import { ColumnVisibilityInfo } from "./data-table"; // Mapeo de IDs de columna a nombres legibles const COLUMN_NAMES: Record = { ref: "Referencia", name: "Nombre", client: "Cliente", status: "Estado", progress: "Progreso", budget: "Presupuesto", startDate: "Fecha inicio", endDate: "Fecha fin", }; interface DataTableToolbarProps { searchValue: string; onSearchChange: (value: string) => void; statusFilter: string; onStatusFilterChange: (value: string) => void; selectedCount: number; onClearFilters: () => void; columns?: ColumnVisibilityInfo[]; onExport?: (projects: Project[]) => void; getSelectedProjects?: () => Project[]; getAllVisibleProjects?: () => Project[]; } export function DataTableToolbar({ searchValue, onSearchChange, statusFilter, onStatusFilterChange, selectedCount, onClearFilters, columns, onExport, getSelectedProjects, getAllVisibleProjects, }: DataTableToolbarProps) { const isFiltered = searchValue !== "" || statusFilter !== "all"; // Obtener proyectos para exportar const handleExport = () => { if (!onExport) return; if (selectedCount > 0 && getSelectedProjects) { // Exportar solo los seleccionados onExport(getSelectedProjects()); } else if (getAllVisibleProjects) { // Exportar todos los visibles (filtrados) onExport(getAllVisibleProjects()); } }; return (
{/* Búsqueda */}
onSearchChange(e.target.value)} className="pl-8" />
{/* Filtro por estado */} {/* Botón limpiar filtros */} {isFiltered && ( )}
{/* Contador de seleccionados */} {selectedCount > 0 && ( {selectedCount} seleccionado(s) )} {/* Opciones de vista - columnas visibles */} {columns && columns.length > 0 && ( Columnas visibles {columns .filter((col) => col.canHide) .map((column) => ( { column.toggleVisibility(checked); }} onSelect={(e) => e.preventDefault()} > {COLUMN_NAMES[column.id] || column.id} ))} )} {/* Exportar */}
); }