Data Table nuqs Store Adapter
data-table-filters/data-table-nuqsFreeBlock
URL-based state management adapter using nuqs for shareable, bookmarkable filter state.
Install it
npx shadcn@latest add https://logs.run/r/data-table-nuqs.jsonSource
1/**2 * nuqs Adapter for BYOS3 *4 * This adapter uses nuqs for URL-based state management.5 * It supports SSR and URL synchronization.6 */78"use client";910import { useQueryStates, type ParserBuilder } from "nuqs";11import { useEffect, useMemo, useRef } from "react";12import type { InternalStoreAdapter } from "../../adapter/types";13import { getSchemaDefaults, validateState } from "../../schema/serialization";14import type { SchemaDefinition, StoreSnapshot } from "../../schema/types";15import { schemaToNuqsParsers } from "./parser-bridge";16import type { NuqsAdapterOptions } from "./types";1718export type { NuqsAdapterOptions } from "./types";1920/**21 * Create a nuqs adapter for URL-based state management22 *23 * @example24 * ```typescript25 * const schema = createSchema({26 * regions: field.array(field.string()).default([]),27 * host: field.string(),28 * });29 *30 * function MyComponent() {31 * const adapter = useNuqsAdapter(schema.definition, { id: 'my-table' });32 * return (33 * <DataTableStoreProvider adapter={adapter}>34 * <DataTable />35 * </DataTableStoreProvider>36 * );37 * }38 * ```39 */40export function useNuqsAdapter<T extends Record<string, unknown>>(41 schema: SchemaDefinition,42 options: NuqsAdapterOptions<T>,43): InternalStoreAdapter<T> {44 const {45 id,46 initialState,47 shallow = true,48 history = "push",49 scroll = false,50 throttleMs = 50,51 } = options;5253 const parsers = useMemo(() => schemaToNuqsParsers(schema), [schema]);54 const defaults = useMemo(() => getSchemaDefaults(schema) as T, [schema]);5556 // Use nuqs hook57 const [nuqsState, setNuqsState] = useQueryStates(58 parsers as Record<string, ParserBuilder<unknown>>,59 {60 shallow,61 history,62 scroll,63 throttleMs,64 },65 );6667 // Store state and version68 const stateRef = useRef<T>(defaults);69 const versionRef = useRef(0);70 const listenersRef = useRef(new Set<() => void>());71 const pausedRef = useRef(false);72 const pendingStateRef = useRef<Partial<T> | null>(null);7374 // Cache server snapshot to avoid infinite loop with useSyncExternalStore75 const serverSnapshotRef = useRef<StoreSnapshot<T>>({76 state: { ...defaults, ...initialState } as T,77 version: 0,78 });7980 // Compute merged state once per render so validateState isn't called twice81 const currentState = useMemo(() => {82 const validated = validateState(schema, nuqsState) as T;83 return { ...defaults, ...initialState, ...validated } as T;84// … 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 Filter Command Palettedata-table-filter-command | data-table-filters | Blocks | Free | 2 deps · 2 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 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 |
