Data Table Filter Command Palette
data-table-filters/data-table-filter-commandFreeBlock
Command palette for power-user filter input with history and keyboard shortcuts.
Install it
npx shadcn@latest add https://logs.run/r/data-table-filter-command.jsonSource
1"use client";23import { useDataTable } from "@/components/data-table/data-table-provider";4import {5 Command,6 CommandEmpty,7 CommandGroup,8 CommandItem,9 CommandList,10 CommandSeparator,11} from "@/components/ui/command";12import { Kbd } from "@/components/ui/kbd";13import { Separator } from "@/components/ui/separator";14import { useHotKey } from "@/hooks/use-hot-key";15import { useLocalStorage } from "@/hooks/use-local-storage";16import { getCommandHistoryKey } from "@/lib/constants/local-storage";17import { formatCompactNumber } from "@/lib/format";18import type { SchemaDefinition } from "@/lib/store/schema/types";19import { cn } from "@/lib/utils";20import { Command as CommandPrimitive } from "cmdk";21import { formatDistanceToNow } from "date-fns";22import { LoaderCircle, Search, X } from "lucide-react";23import React, { useEffect, useMemo, useRef, useState } from "react";24import type { DataTableFilterField } from "../types";25import {26 columnFiltersParserFromSchema,27 getFieldOptions,28 getFilterValue,29 getWordByCaretPosition,30 replaceInputByFieldType,31} from "./utils";3233interface DataTableFilterCommandProps {34 // Schema definition for parsing/serializing filter values (BYOS)35 schema: SchemaDefinition;36 // Unique ID for this table (used to namespace localStorage)37 tableId?: string;38}3940export function DataTableFilterCommand({41 schema,42 tableId = "default",43}: DataTableFilterCommandProps) {44 const {45 table,46 isLoading,47 filterFields: _filterFields,48 getFacetedUniqueValues,49 } = useDataTable();50 const columnFilters = table.getState().columnFilters;51 const inputRef = useRef<HTMLInputElement>(null);52 const [open, setOpen] = useState<boolean>(false);53 const [currentWord, setCurrentWord] = useState<string>("");54 // Guard to prevent effect cycle when serializing55 const isSerializingRef = useRef(false);56 const filterFields = useMemo(57 () => _filterFields?.filter((i) => !i.commandDisabled),58 [_filterFields],59 );60 const columnParser = useMemo(61 () => columnFiltersParserFromSchema({ schema, filterFields }),62 [schema, filterFields],63 );64 const [inputValue, setInputValue] = useState<string>(65 columnParser.serialize(columnFilters),66 );67 const [lastSearches, setLastSearches] = useLocalStorage<68 {69 search: string;70 timestamp: number;71 }[]72 >(getCommandHistoryKey(tableId), []);7374 useEffect(() => {75 // Skip if this update came from serialization (prevents infinite loop)76 if (isSerializingRef.current) {77// … truncated
What it pulls in
npm packages
Other registry items
Files it writes
More from data-table-filters
All 11 items| Component | Registry | Kind | Access | Installs | Command |
|---|---|---|---|---|---|
| Data Table with Filtersdata-table | data-table-filters | Blocks | Free | 17 deps · 53 files | |
| Data Table Cell Renderersdata-table-cell | data-table-filters | Blocks | Free | 4 deps · 17 files | |
| Data Table Drizzle ORM Helpersdata-table-drizzle | data-table-filters | Blocks | Free | 2 deps · 7 files | |
| Data Table AI Filter Command Palettedata-table-filter-command-ai | data-table-filters | Blocks | Free | 6 deps · 11 files | |
| Data Table MCP Serverdata-table-mcp | data-table-filters | Blocks | Free | 2 deps · 5 files | |
| Data Table nuqs Store Adapterdata-table-nuqs | data-table-filters | Blocks | Free | 1 dep · 4 files | |
| Data Table Query Layerdata-table-query | data-table-filters | Blocks | Free | 3 deps · 3 files | |
| Data Table Schema Systemdata-table-schema | data-table-filters | Blocks | Free | 1 dep · 13 files |
