"use client"; "use no memo"; import type { Column, Table } from "@tanstack/react-table"; import { X } from "lucide-react"; import * as React from "react"; import { DataTableDateFilter } from "@/components/data-table/data-table-date-filter"; import { DataTableFacetedFilter } from "@/components/data-table/data-table-faceted-filter"; import { DataTableSliderFilter } from "@/components/data-table/data-table-slider-filter"; import { DataTableViewOptions } from "@/components/data-table/data-table-view-options"; import { Button } from "@/components/ui/button"; import { Input } from "@/components/ui/input"; import { cn } from "@/lib/utils"; interface DataTableToolbarProps extends React.ComponentProps<"div"> { table: Table; } export function DataTableToolbar({ table, children, className, ...props }: DataTableToolbarProps) { const isFiltered = table.getState().columnFilters.length > 0; const columns = table.getAllColumns().filter((column) => column.getCanFilter()); const onReset = React.useCallback(() => { table.resetColumnFilters(); }, [table]); return (
{columns.map((column) => ( ))} {isFiltered && ( )}
{children}
); } interface DataTableToolbarFilterProps { column: Column; } function DataTableToolbarFilter({ column, }: DataTableToolbarFilterProps) { { const columnMeta = column.columnDef.meta; const onFilterRender = React.useCallback(() => { if (!columnMeta?.variant) return null; switch (columnMeta.variant) { case "text": return ( column.setFilterValue(event.target.value)} className="h-8 w-40 lg:w-56" /> ); case "number": return (
column.setFilterValue(event.target.value)} className={cn("h-8 w-[120px]", columnMeta.unit && "pr-8")} /> {columnMeta.unit && ( {columnMeta.unit} )}
); case "range": return ( ); case "date": case "dateRange": return ( ); case "select": case "multiSelect": return ( ); default: return null; } }, [column, columnMeta]); return onFilterRender(); } }