"use client" import * as React from "react" import { Column } from "@tanstack/react-table" import { Input } from "@/components/ui/input" import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue, } from "@/components/ui/select" import { ClientTableColumnMeta } from "./types" interface ClientTableFilterProps { column: Column } export function ClientTableFilter({ column, }: ClientTableFilterProps) { const columnFilterValue = column.getFilterValue() // Cast meta to our local type const meta = column.columnDef.meta as ClientTableColumnMeta | undefined // Handle Boolean Filter if (meta?.filterType === "boolean") { return (
e.stopPropagation()} className="mt-2">
) } // Handle Select Filter (for specific options) if (meta?.filterType === "select" && meta.filterOptions) { return (
e.stopPropagation()} className="mt-2">
) } // Default Text Filter const [value, setValue] = React.useState(columnFilterValue) React.useEffect(() => { setValue(columnFilterValue) }, [columnFilterValue]) React.useEffect(() => { const timeout = setTimeout(() => { column.setFilterValue(value) }, 500) return () => clearTimeout(timeout) }, [value, column]) return (
e.stopPropagation()} className="mt-2"> setValue(e.target.value)} placeholder="Search..." className="h-8 w-full font-normal bg-background" />
) }