"use client"; import React from "react"; import { Search, Filter, X } from "lucide-react"; import { Input } from "@/components/ui/input"; import { Button } from "@/components/ui/button"; import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue, } from "@/components/ui/select"; export interface FilterOption { label: string; value: string; } export interface FilterConfig { key: string; // O nome do estado que vai guardar esse valor (ex: 'specialty') label: string; // O placeholder do select (ex: 'Especialidade') options: FilterOption[] | string[]; // Opções do dropdown } interface FilterBarProps { onSearch: (term: string) => void; searchTerm: string; searchPlaceholder?: string; filters?: FilterConfig[]; activeFilters: Record; onFilterChange: (key: string, value: string) => void; onClearFilters?: () => void; className?: string; children?: React.ReactNode; // Para botões extras (ex: "Novo Médico", paginação) } export function FilterBar({ onSearch, searchTerm, searchPlaceholder = "Pesquisar...", filters = [], activeFilters, onFilterChange, onClearFilters, children, className, }: FilterBarProps) { // Verifica se tem algum filtro ativo para mostrar o botão de limpar const hasActiveFilters = searchTerm !== "" || Object.values(activeFilters).some(val => val !== "all" && val !== ""); return (
{/* Barra de Pesquisa */}
onSearch(e.target.value)} className="pl-10 w-full bg-muted border-border focus:bg-card transition-colors" />
{/* Filtros Dinâmicos (Selects) */}
{filters.map((filter) => (
))} {/* Botão de Limpar Filtros */} {hasActiveFilters && onClearFilters && ( )} {/* Botões Extras (ex: Novo Médico, Paginação) passados como children */} {children}
); }