Skip to content

Hooks

Custom React hooks for table functionality including useDataTable, useDebounce, and more.

Custom React hooks for table functionality.

Hook to access the table instance and context from any child component.

import { useDataTable } from "@/components/niko-table/core"
export function CustomComponent() {
const { table, isLoading, columns } = useDataTable()
const rowCount = table.getFilteredRowModel().rows.length
const pageCount = table.getPageCount()
return (
<div>
<p>Showing {rowCount} rows</p>
<p>
Page {table.getState().pagination.pageIndex + 1} of {pageCount}
</p>
</div>
)
}
PropertyTypeDescription
tableTable<TData>The TanStack Table instance.
columnsDataTableColumnDef<TData>[]Column definitions array.
isLoadingbooleanWhether the table is in a loading state.
setIsLoading(isLoading: boolean) => voidFunction to update loading state.

Hook to debounce a value, useful for search inputs and filters.

import { useDebounce } from "@/components/niko-table/hooks"
function SearchFilter() {
const [search, setSearch] = useState("")
const debouncedSearch = useDebounce(search, 500)
useEffect(() => {
// This only runs after user stops typing for 500ms
console.log("Searching for:", debouncedSearch)
}, [debouncedSearch])
return (
<input
value={search}
onChange={e => setSearch(e.target.value)}
placeholder="Search..."
/>
)
}
NameTypeDefaultDescription
valueT-The value to debounce (required).
delaynumber300The delay in milliseconds before updating.

The debounced value of type T.

Hook that derives the title for a column filter component.

NameTypeDescription
columnColumn<TData>The table column.
accessorKeystringThe accessor key of the column.
titlestringOptional title override.

The derived title string (priority: title prop → column.meta.label → formatted accessorKey).

Hook to generate options for select/multi_select columns from table data.

NameTypeDefaultDescription
tableTable<TData>-TanStack Table instance (required).
configGenerateOptionsConfig-Configuration object.
config.showCountsbooleantrueInclude counts for each option.
config.dynamicCountsbooleantrueRecompute counts based on filtered rows.
config.limitToFilteredRowsbooleantrueGenerate options from filtered rows only.
config.includeColumnsstring[]-Only generate options for these column ids.
config.excludeColumnsstring[]-Exclude these column ids from generation.
config.limitPerColumnnumber-Limit number of generated options per column.

A record mapping column IDs to arrays of Option objects.

Hook for managing keyboard shortcuts with fine-grained control.

import { useKeyboardShortcut } from "@/components/niko-table/hooks"
useKeyboardShortcut({
key: "f",
onTrigger: () => setFilterOpen(true),
condition: () => !isInputFocused,
})
useKeyboardShortcut({
key: "f",
requireShift: true,
onTrigger: () => clearAllFilters(),
})
NameTypeDefaultDescription
keystring-The key to listen for (required).
onTrigger() => void-Function to call when shortcut is triggered.
enabledbooleantrueWhether the shortcut is enabled.
requireShiftbooleanfalseWhether to require Shift key.
requireCtrlbooleanfalseWhether to require Ctrl/Cmd key.
requireAltbooleanfalseWhether to require Alt key.
preventDefaultbooleantrueWhether to prevent default browser behavior.
stopPropagationbooleanfalseWhether to stop event propagation.
condition() => boolean-Condition function to determine if shortcut should trigger.

Batch version of useKeyboardShortcut for managing multiple keyboard shortcuts at once with a single event listener.

import { useKeyboardShortcuts } from "@/components/niko-table/hooks"
useKeyboardShortcuts([
{ key: "f", onTrigger: () => setFilterOpen(true) },
{ key: "s", onTrigger: () => setSortOpen((prev) => !prev) },
{ key: "f", requireShift: true, onTrigger: () => clearFilters() },
])
NameTypeDescription
shortcutsUseKeyboardShortcutOptions[]Array of shortcut configs (same as useKeyboardShortcut).

Convenience wrapper around useGeneratedOptions that generates options for a single column.

import { useGeneratedOptionsForColumn } from "@/components/niko-table/hooks"
const categoryOptions = useGeneratedOptionsForColumn(table, "category", {
showCounts: true,
dynamicCounts: true,
})
NameTypeDescription
tableTable<TData>TanStack Table instance (required).
columnIdstringThe column ID to generate options for.
configGenerateOptionsConfigOptional configuration object.

An array of Option objects for the specified column.