Data Table Filter Menu
tablecn/data-table-filter-menuFreeComponent
A filter menu component for the data table
Install it
npx shadcn@latest add https://tablecn.com/r/data-table-filter-menu.jsonSource
1"use client";23import type { Column, Table } from "@tanstack/react-table";4import { BadgeCheck, CalendarIcon, ListFilter, Text, X } from "lucide-react";5import { useQueryState } from "nuqs";6import * as React from "react";78import { DataTableRangeFilter } from "@/components/data-table/data-table-range-filter";9import { Button } from "@/components/ui/button";10import { Calendar } from "@/components/ui/calendar";11import {12 Command,13 CommandEmpty,14 CommandGroup,15 CommandInput,16 CommandItem,17 CommandList,18} from "@/components/ui/command";19import { Input } from "@/components/ui/input";20import {21 Popover,22 PopoverContent,23 PopoverTrigger,24} from "@/components/ui/popover";25import {26 Select,27 SelectContent,28 SelectGroup,29 SelectItem,30 SelectTrigger,31 SelectValue,32} from "@/components/ui/select";33import { useDebouncedCallback } from "@/hooks/use-debounced-callback";34import { getDefaultFilterOperator, getFilterOperators } from "@/lib/data-table";35import { formatDate } from "@/lib/format";36import { generateId } from "@/lib/id";37import { getFiltersStateParser } from "@/lib/parsers";38import { cn } from "@/lib/utils";39import type { ExtendedColumnFilter, FilterOperator } from "@/types/data-table";4041const DEBOUNCE_MS = 300;42const THROTTLE_MS = 50;43const FILTER_SHORTCUT_KEY = "f";44const REMOVE_FILTER_SHORTCUTS = ["backspace", "delete"];4546interface DataTableFilterMenuProps<TData>47 extends React.ComponentProps<typeof PopoverContent> {48 table: Table<TData>;49 debounceMs?: number;50 throttleMs?: number;51 shallow?: boolean;52 disabled?: boolean;53}5455export function DataTableFilterMenu<TData>({56 table,57 debounceMs = DEBOUNCE_MS,58 throttleMs = THROTTLE_MS,59 shallow = true,60 disabled,61 className,62 ...props63}: DataTableFilterMenuProps<TData>) {64 const id = React.useId();6566 const columns = React.useMemo(() => {67 return table68 .getAllColumns()69 .filter((column) => column.columnDef.enableColumnFilter);70 }, [table]);7172 const [open, setOpen] = React.useState(false);73 const [selectedColumn, setSelectedColumn] =74 React.useState<Column<TData> | null>(null);75 const [inputValue, setInputValue] = React.useState("");76 const triggerRef = React.useRef<HTMLButtonElement>(null);77 const inputRef = React.useRef<HTMLInputElement>(null);7879 const onOpenChange = React.useCallback((open: boolean) => {80 setOpen(open);8182 if (!open) {83 setTimeout(() => {84 setSelectedColumn(null);85 setInputValue("");86 }, 100);87 }88 }, []);8990// … truncated
What it pulls in
npm packages
Other registry items
Files it writes
More from tablecn
All 13 items| Component | Registry | Kind | Access | Installs | Command |
|---|---|---|---|---|---|
| Data Griddata-grid | tablecn | Components | Free | 4 deps · 21 files | |
| Data Grid Filter Menudata-grid-filter-menu | tablecn | Components | Free | 2 deps · 8 files | |
| Data Grid Keyboard Shortcutsdata-grid-keyboard-shortcuts | tablecn | Components | Free | 1 dep · 2 files | |
| Data Grid Row Height Menudata-grid-row-height-menu | tablecn | Components | Free | 2 deps | |
| Data Grid Select Columndata-grid-select-column | tablecn | Components | Free | 1 dep | |
| Data Grid Skeletondata-grid-skeleton | tablecn | Components | Free | no deps | |
| Data Grid Sort Menudata-grid-sort-menu | tablecn | Components | Free | 2 deps · 4 files | |
| Data Grid View Menudata-grid-view-menu | tablecn | Components | Free | 2 deps · 2 files |
