@sth87/shadcn-design-system 0.1.8 → 0.1.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const g=require("@tanstack/react-table"),l=require("nuqs"),
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const g=require("@tanstack/react-table"),l=require("nuqs"),se=require("react"),ie=require("./use-debounced-callback.cjs"),re=require("../utils/parsers.cjs");function ae(d){const r=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(d){for(const f in d)if(f!=="default"){const o=Object.getOwnPropertyDescriptor(d,f);Object.defineProperty(r,f,o.get?o:{enumerable:!0,get:()=>d[f]})}}return r.default=d,Object.freeze(r)}const t=ae(se),le="page",ue="perPage",ce="sort",ge="filters",de="joinOperator",fe=",",pe=300,Se=50;function me(d){const{columns:r,pageCount:f,initialState:o,queryKeys:m,history:_="replace",debounceMs:y=pe,throttleMs:M=Se,clearOnDefault:q=!1,enableAdvancedFilter:u=!1,scroll:K=!1,shallow:C=!0,startTransition:D,enableNuqs:i=!1,state:k,...R}=d,I=m?.page??le,j=m?.perPage??ue,x=m?.sort??ce,N=m?.filters??ge,Q=m?.joinOperator??de,p=t.useMemo(()=>({history:_,scroll:K,shallow:C,throttleMs:M,debounceMs:y,clearOnDefault:q,startTransition:D}),[_,K,C,M,y,q,D]),[U,V]=t.useState(o?.rowSelection??{}),[B,G]=t.useState(o?.columnVisibility??{}),[H,L]=t.useState(o?.columnOrder??[]),[P,w]=i?l.useQueryState(I,l.parseAsInteger.withOptions(p).withDefault(1)):t.useState(o?.pagination?.pageIndex??0),[v,O]=i?l.useQueryState(j,l.parseAsInteger.withOptions(p).withDefault(o?.pagination?.pageSize??10)):t.useState(o?.pagination?.pageSize??10),F=t.useMemo(()=>({pageIndex:i?P-1:P,pageSize:v}),[P,v,i]),Z=t.useCallback(e=>{if(typeof e=="function"){const n=e(F);w(i?n.pageIndex+1:n.pageIndex),O(n.pageSize)}else w(i?e.pageIndex+1:e.pageIndex),O(e.pageSize)},[F,w,O,i]),J=t.useMemo(()=>new Set(r.map(e=>e.id).filter(Boolean)),[r]),[h,A]=i?l.useQueryState(x,re.getSortingStateParser(J).withOptions(p).withDefault(o?.sorting??[])):t.useState(o?.sorting??[]),W=t.useCallback(e=>{if(typeof e=="function"){const n=e(h);A(n)}else A(e)},[h,A]),S=t.useMemo(()=>u?[]:r.filter(e=>e.enableColumnFilter),[r,u]),X=t.useMemo(()=>u?{}:S.reduce((e,n)=>(n.meta?.variant==="multiSelect"?e[n.id??""]=l.parseAsArrayOf(l.parseAsString,fe).withOptions(p):e[n.id??""]=l.parseAsString.withOptions(p),e),{}),[S,p,u]),[z,$]=i?l.useQueryStates(X):t.useState({}),Y=ie.useDebouncedCallback(e=>{w(1),$(e)},y),ee=t.useMemo(()=>u?[]:Object.entries(z).reduce((e,[n,s])=>{if(s!==null){const a=S.find(b=>b.id===n)?.meta?.variant==="multiSelect",c=Array.isArray(s)?s:a&&typeof s=="string"&&/[^a-zA-Z0-9]/.test(s)?s.split(/[^a-zA-Z0-9]+/).filter(Boolean):a?[s]:s;e.push({id:n,value:c})}return e},[]),[z,u,S]),[te,ne]=t.useState(ee),oe=t.useCallback(e=>{u||ne(n=>{const s=typeof e=="function"?e(n):e,E=s.reduce((a,c)=>{const b=S.find(T=>T.id===c.id);if(b){const T=b.meta?.variant==="multiSelect";a[c.id]=c.value}return console.log("filterParsers",b,a),a},{});for(const a of n)s.some(c=>c.id===a.id)||(E[a.id]=null);return i&&Y(E),s})},[Y,S,u,i]);return{table:g.useReactTable({initialState:o,pageCount:f,state:{pagination:F,sorting:h,columnVisibility:B,columnOrder:H,rowSelection:U,columnFilters:te,...k},defaultColumn:{...R.defaultColumn,enableColumnFilter:!0,enableSorting:!1,enableHiding:!0,enablePinning:!0},enableRowSelection:!0,onRowSelectionChange:V,onPaginationChange:Z,onSortingChange:W,onColumnFiltersChange:oe,onColumnVisibilityChange:G,onColumnOrderChange:L,getCoreRowModel:g.getCoreRowModel(),getFilteredRowModel:g.getFilteredRowModel(),getPaginationRowModel:g.getPaginationRowModel(),getSortedRowModel:g.getSortedRowModel(),getFacetedRowModel:g.getFacetedRowModel(),getFacetedUniqueValues:g.getFacetedUniqueValues(),getFacetedMinMaxValues:g.getFacetedMinMaxValues(),meta:{...R.meta,queryKeys:{page:I,perPage:j,sort:x,filters:N,joinOperator:Q}},...R,columns:r}),shallow:C,debounceMs:y,throttleMs:M}}exports.useDataTable=me;
|
|
2
2
|
//# sourceMappingURL=use-data-table.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use-data-table.cjs","sources":["../../../src/hooks/use-data-table.ts"],"sourcesContent":["\"use client\";\n\n/* eslint-disable react-hooks/rules-of-hooks */\n\nimport {\n type ColumnFiltersState,\n type ColumnOrderState,\n getCoreRowModel,\n getFacetedMinMaxValues,\n getFacetedRowModel,\n getFacetedUniqueValues,\n getFilteredRowModel,\n getPaginationRowModel,\n getSortedRowModel,\n type PaginationState,\n type RowSelectionState,\n type SortingState,\n type TableOptions,\n type TableState,\n type Updater,\n useReactTable,\n type VisibilityState,\n} from \"@tanstack/react-table\";\nimport {\n parseAsArrayOf,\n parseAsInteger,\n parseAsString,\n type SingleParser,\n type UseQueryStateOptions,\n useQueryState,\n useQueryStates,\n} from \"nuqs\";\nimport * as React from \"react\";\n\nimport { useDebouncedCallback } from \"@/hooks/use-debounced-callback\";\nimport { getSortingStateParser } from \"@/utils/parsers\";\nimport type { ExtendedColumnSort, QueryKeys } from \"@/types/data-table\";\n\nconst PAGE_KEY = \"page\";\nconst PER_PAGE_KEY = \"perPage\";\nconst SORT_KEY = \"sort\";\nconst FILTERS_KEY = \"filters\";\nconst JOIN_OPERATOR_KEY = \"joinOperator\";\nconst ARRAY_SEPARATOR = \",\";\nconst DEBOUNCE_MS = 300;\nconst THROTTLE_MS = 50;\n\ninterface UseDataTableProps<TData>\n extends Omit<\n TableOptions<TData>,\n // | \"state\"\n // | \"pageCount\"\n \"getCoreRowModel\"\n > {\n initialState?: Omit<Partial<TableState>, \"sorting\"> & {\n sorting?: ExtendedColumnSort<TData>[];\n };\n queryKeys?: Partial<QueryKeys>;\n history?: \"push\" | \"replace\";\n debounceMs?: number;\n throttleMs?: number;\n clearOnDefault?: boolean;\n enableAdvancedFilter?: boolean;\n scroll?: boolean;\n shallow?: boolean;\n startTransition?: React.TransitionStartFunction;\n enableNuqs?: boolean;\n}\n\nexport function useDataTable<TData>(props: UseDataTableProps<TData>) {\n const {\n columns,\n pageCount,\n initialState,\n queryKeys,\n history = \"replace\",\n debounceMs = DEBOUNCE_MS,\n throttleMs = THROTTLE_MS,\n clearOnDefault = false,\n enableAdvancedFilter = false,\n scroll = false,\n shallow = true,\n startTransition,\n enableNuqs = false,\n ...tableProps\n } = props;\n const pageKey = queryKeys?.page ?? PAGE_KEY;\n const perPageKey = queryKeys?.perPage ?? PER_PAGE_KEY;\n const sortKey = queryKeys?.sort ?? SORT_KEY;\n const filtersKey = queryKeys?.filters ?? FILTERS_KEY;\n const joinOperatorKey = queryKeys?.joinOperator ?? JOIN_OPERATOR_KEY;\n\n const queryStateOptions = React.useMemo<\n Omit<UseQueryStateOptions<string>, \"parse\">\n >(\n () => ({\n history,\n scroll,\n shallow,\n throttleMs,\n debounceMs,\n clearOnDefault,\n startTransition: startTransition as any,\n }),\n [\n history,\n scroll,\n shallow,\n throttleMs,\n debounceMs,\n clearOnDefault,\n startTransition,\n ]\n );\n\n const [rowSelection, setRowSelection] = React.useState<RowSelectionState>(\n initialState?.rowSelection ?? {}\n );\n const [columnVisibility, setColumnVisibility] =\n React.useState<VisibilityState>(initialState?.columnVisibility ?? {});\n const [columnOrder, setColumnOrder] = React.useState<ColumnOrderState>(\n initialState?.columnOrder ?? []\n );\n\n const [page, setPage] = enableNuqs\n ? useQueryState(\n pageKey,\n parseAsInteger.withOptions(queryStateOptions).withDefault(1)\n )\n : React.useState(initialState?.pagination?.pageIndex ?? 0);\n\n const [perPage, setPerPage] = enableNuqs\n ? useQueryState(\n perPageKey,\n parseAsInteger\n .withOptions(queryStateOptions)\n .withDefault(initialState?.pagination?.pageSize ?? 10)\n )\n : React.useState(initialState?.pagination?.pageSize ?? 10);\n\n const pagination: PaginationState = React.useMemo(() => {\n return {\n pageIndex: enableNuqs ? page - 1 : page, // zero-based index\n pageSize: perPage,\n };\n }, [page, perPage, enableNuqs]);\n\n const onPaginationChange = React.useCallback(\n (updaterOrValue: Updater<PaginationState>) => {\n if (typeof updaterOrValue === \"function\") {\n const newPagination = updaterOrValue(pagination);\n void setPage(\n enableNuqs ? newPagination.pageIndex + 1 : newPagination.pageIndex\n );\n void setPerPage(newPagination.pageSize);\n } else {\n void setPage(\n enableNuqs ? updaterOrValue.pageIndex + 1 : updaterOrValue.pageIndex\n );\n void setPerPage(updaterOrValue.pageSize);\n }\n },\n [pagination, setPage, setPerPage, enableNuqs]\n );\n\n const columnIds = React.useMemo(() => {\n return new Set(\n columns.map((column) => column.id).filter(Boolean) as string[]\n );\n }, [columns]);\n\n // Note: enableNuqs should be stable (not change during component lifecycle)\n // to avoid violating React hooks rules. If it changes, it may cause issues.\n const [sorting, setSorting] = enableNuqs\n ? useQueryState(\n sortKey,\n getSortingStateParser<TData>(columnIds)\n .withOptions(queryStateOptions)\n .withDefault(initialState?.sorting ?? [])\n )\n : React.useState(initialState?.sorting ?? []);\n\n const onSortingChange = React.useCallback(\n (updaterOrValue: Updater<SortingState>) => {\n if (typeof updaterOrValue === \"function\") {\n const newSorting = updaterOrValue(sorting);\n setSorting(newSorting as ExtendedColumnSort<TData>[]);\n } else {\n setSorting(updaterOrValue as ExtendedColumnSort<TData>[]);\n }\n },\n [sorting, setSorting]\n );\n\n const filterableColumns = React.useMemo(() => {\n if (enableAdvancedFilter) return [];\n\n return columns.filter((column) => column.enableColumnFilter);\n }, [columns, enableAdvancedFilter]);\n\n const filterParsers = React.useMemo(() => {\n if (enableAdvancedFilter) return {};\n\n return filterableColumns.reduce<\n Record<string, SingleParser<string> | SingleParser<string[]>>\n >((acc, column) => {\n if (column.meta?.variant === \"multiSelect\") {\n acc[column.id ?? \"\"] = parseAsArrayOf(\n parseAsString,\n ARRAY_SEPARATOR\n ).withOptions(queryStateOptions);\n } else {\n acc[column.id ?? \"\"] = parseAsString.withOptions(queryStateOptions);\n }\n return acc;\n }, {});\n }, [filterableColumns, queryStateOptions, enableAdvancedFilter]);\n\n // Note: enableNuqs should be stable (not change during component lifecycle)\n const [filterValues, setFilterValues] = enableNuqs\n ? useQueryStates(filterParsers)\n : React.useState<Record<string, string | string[] | null>>({});\n\n const debouncedSetFilterValues = useDebouncedCallback(\n (values: typeof filterValues) => {\n void setPage(1);\n void setFilterValues(values);\n },\n debounceMs\n );\n\n const initialColumnFilters: ColumnFiltersState = React.useMemo(() => {\n if (enableAdvancedFilter) return [];\n\n return Object.entries(filterValues).reduce<ColumnFiltersState>(\n (filters, [key, value]) => {\n if (value !== null) {\n const column = filterableColumns.find((col) => col.id === key);\n const isMultiSelect = column?.meta?.variant === \"multiSelect\";\n\n const processedValue = Array.isArray(value)\n ? value\n : isMultiSelect &&\n typeof value === \"string\" &&\n /[^a-zA-Z0-9]/.test(value)\n ? value.split(/[^a-zA-Z0-9]+/).filter(Boolean)\n : isMultiSelect\n ? [value]\n : value;\n\n filters.push({\n id: key,\n value: processedValue,\n });\n }\n return filters;\n },\n []\n );\n }, [filterValues, enableAdvancedFilter, filterableColumns]);\n\n const [columnFilters, setColumnFilters] =\n React.useState<ColumnFiltersState>(initialColumnFilters);\n\n const onColumnFiltersChange = React.useCallback(\n (updaterOrValue: Updater<ColumnFiltersState>) => {\n if (enableAdvancedFilter) return;\n\n setColumnFilters((prev) => {\n const next =\n typeof updaterOrValue === \"function\"\n ? updaterOrValue(prev)\n : updaterOrValue;\n\n const filterUpdates = next.reduce<\n Record<string, string | string[] | null>\n >((acc, filter) => {\n const column = filterableColumns.find((col) => col.id === filter.id);\n if (column) {\n const isMultiSelect = column.meta?.variant === \"multiSelect\";\n acc[filter.id] = isMultiSelect\n ? (filter.value as string[])\n : (filter.value as string);\n }\n console.log(\"filterParsers\", column, acc);\n return acc;\n }, {});\n\n for (const prevFilter of prev) {\n if (!next.some((filter) => filter.id === prevFilter.id)) {\n filterUpdates[prevFilter.id] = null;\n }\n }\n\n if (enableNuqs) {\n debouncedSetFilterValues(filterUpdates);\n }\n return next;\n });\n },\n [\n debouncedSetFilterValues,\n filterableColumns,\n enableAdvancedFilter,\n enableNuqs,\n ]\n );\n\n const table = useReactTable({\n initialState,\n pageCount,\n state: {\n pagination,\n sorting,\n columnVisibility,\n columnOrder,\n rowSelection,\n columnFilters,\n },\n defaultColumn: {\n ...tableProps.defaultColumn,\n enableColumnFilter: true,\n enableSorting: false,\n enableHiding: true,\n enablePinning: true,\n },\n enableRowSelection: true,\n onRowSelectionChange: setRowSelection,\n onPaginationChange,\n onSortingChange,\n onColumnFiltersChange,\n onColumnVisibilityChange: setColumnVisibility,\n onColumnOrderChange: setColumnOrder,\n getCoreRowModel: getCoreRowModel(),\n getFilteredRowModel: getFilteredRowModel(),\n getPaginationRowModel: getPaginationRowModel(),\n getSortedRowModel: getSortedRowModel(),\n getFacetedRowModel: getFacetedRowModel(),\n getFacetedUniqueValues: getFacetedUniqueValues(),\n getFacetedMinMaxValues: getFacetedMinMaxValues(),\n meta: {\n ...tableProps.meta,\n queryKeys: {\n page: pageKey,\n perPage: perPageKey,\n sort: sortKey,\n filters: filtersKey,\n joinOperator: joinOperatorKey,\n },\n },\n ...tableProps,\n columns,\n });\n\n return { table, shallow, debounceMs, throttleMs };\n}\n"],"names":["PAGE_KEY","PER_PAGE_KEY","SORT_KEY","FILTERS_KEY","JOIN_OPERATOR_KEY","ARRAY_SEPARATOR","DEBOUNCE_MS","THROTTLE_MS","useDataTable","props","columns","pageCount","initialState","queryKeys","history","debounceMs","throttleMs","clearOnDefault","enableAdvancedFilter","scroll","shallow","startTransition","enableNuqs","tableProps","pageKey","perPageKey","sortKey","filtersKey","joinOperatorKey","queryStateOptions","React","rowSelection","setRowSelection","columnVisibility","setColumnVisibility","columnOrder","setColumnOrder","page","setPage","useQueryState","parseAsInteger","perPage","setPerPage","pagination","onPaginationChange","updaterOrValue","newPagination","columnIds","column","sorting","setSorting","getSortingStateParser","onSortingChange","newSorting","filterableColumns","filterParsers","acc","parseAsArrayOf","parseAsString","filterValues","setFilterValues","useQueryStates","debouncedSetFilterValues","useDebouncedCallback","values","initialColumnFilters","filters","key","value","isMultiSelect","col","processedValue","columnFilters","setColumnFilters","onColumnFiltersChange","prev","next","filterUpdates","filter","prevFilter","useReactTable","getCoreRowModel","getFilteredRowModel","getPaginationRowModel","getSortedRowModel","getFacetedRowModel","getFacetedUniqueValues","getFacetedMinMaxValues"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"use-data-table.cjs","sources":["../../../src/hooks/use-data-table.ts"],"sourcesContent":["\"use client\";\n\n/* eslint-disable react-hooks/rules-of-hooks */\n\nimport {\n type ColumnFiltersState,\n type ColumnOrderState,\n getCoreRowModel,\n getFacetedMinMaxValues,\n getFacetedRowModel,\n getFacetedUniqueValues,\n getFilteredRowModel,\n getPaginationRowModel,\n getSortedRowModel,\n type PaginationState,\n type RowSelectionState,\n type SortingState,\n type TableOptions,\n type TableState,\n type Updater,\n useReactTable,\n type VisibilityState,\n} from \"@tanstack/react-table\";\nimport {\n parseAsArrayOf,\n parseAsInteger,\n parseAsString,\n type SingleParser,\n type UseQueryStateOptions,\n useQueryState,\n useQueryStates,\n} from \"nuqs\";\nimport * as React from \"react\";\n\nimport { useDebouncedCallback } from \"@/hooks/use-debounced-callback\";\nimport { getSortingStateParser } from \"@/utils/parsers\";\nimport type { ExtendedColumnSort, QueryKeys } from \"@/types/data-table\";\n\nconst PAGE_KEY = \"page\";\nconst PER_PAGE_KEY = \"perPage\";\nconst SORT_KEY = \"sort\";\nconst FILTERS_KEY = \"filters\";\nconst JOIN_OPERATOR_KEY = \"joinOperator\";\nconst ARRAY_SEPARATOR = \",\";\nconst DEBOUNCE_MS = 300;\nconst THROTTLE_MS = 50;\n\ninterface UseDataTableProps<TData>\n extends Omit<\n TableOptions<TData>,\n // | \"state\"\n // | \"pageCount\"\n \"getCoreRowModel\"\n > {\n initialState?: Omit<Partial<TableState>, \"sorting\"> & {\n sorting?: ExtendedColumnSort<TData>[];\n };\n queryKeys?: Partial<QueryKeys>;\n history?: \"push\" | \"replace\";\n debounceMs?: number;\n throttleMs?: number;\n clearOnDefault?: boolean;\n enableAdvancedFilter?: boolean;\n scroll?: boolean;\n shallow?: boolean;\n startTransition?: React.TransitionStartFunction;\n enableNuqs?: boolean;\n}\n\nexport function useDataTable<TData>(props: UseDataTableProps<TData>) {\n const {\n columns,\n pageCount,\n initialState,\n queryKeys,\n history = \"replace\",\n debounceMs = DEBOUNCE_MS,\n throttleMs = THROTTLE_MS,\n clearOnDefault = false,\n enableAdvancedFilter = false,\n scroll = false,\n shallow = true,\n startTransition,\n enableNuqs = false,\n state: controlledState,\n ...tableProps\n } = props;\n const pageKey = queryKeys?.page ?? PAGE_KEY;\n const perPageKey = queryKeys?.perPage ?? PER_PAGE_KEY;\n const sortKey = queryKeys?.sort ?? SORT_KEY;\n const filtersKey = queryKeys?.filters ?? FILTERS_KEY;\n const joinOperatorKey = queryKeys?.joinOperator ?? JOIN_OPERATOR_KEY;\n\n const queryStateOptions = React.useMemo<\n Omit<UseQueryStateOptions<string>, \"parse\">\n >(\n () => ({\n history,\n scroll,\n shallow,\n throttleMs,\n debounceMs,\n clearOnDefault,\n startTransition: startTransition as any,\n }),\n [\n history,\n scroll,\n shallow,\n throttleMs,\n debounceMs,\n clearOnDefault,\n startTransition,\n ]\n );\n\n const [rowSelection, setRowSelection] = React.useState<RowSelectionState>(\n initialState?.rowSelection ?? {}\n );\n const [columnVisibility, setColumnVisibility] =\n React.useState<VisibilityState>(initialState?.columnVisibility ?? {});\n const [columnOrder, setColumnOrder] = React.useState<ColumnOrderState>(\n initialState?.columnOrder ?? []\n );\n\n const [page, setPage] = enableNuqs\n ? useQueryState(\n pageKey,\n parseAsInteger.withOptions(queryStateOptions).withDefault(1)\n )\n : React.useState(initialState?.pagination?.pageIndex ?? 0);\n\n const [perPage, setPerPage] = enableNuqs\n ? useQueryState(\n perPageKey,\n parseAsInteger\n .withOptions(queryStateOptions)\n .withDefault(initialState?.pagination?.pageSize ?? 10)\n )\n : React.useState(initialState?.pagination?.pageSize ?? 10);\n\n const pagination: PaginationState = React.useMemo(() => {\n return {\n pageIndex: enableNuqs ? page - 1 : page, // zero-based index\n pageSize: perPage,\n };\n }, [page, perPage, enableNuqs]);\n\n const onPaginationChange = React.useCallback(\n (updaterOrValue: Updater<PaginationState>) => {\n if (typeof updaterOrValue === \"function\") {\n const newPagination = updaterOrValue(pagination);\n void setPage(\n enableNuqs ? newPagination.pageIndex + 1 : newPagination.pageIndex\n );\n void setPerPage(newPagination.pageSize);\n } else {\n void setPage(\n enableNuqs ? updaterOrValue.pageIndex + 1 : updaterOrValue.pageIndex\n );\n void setPerPage(updaterOrValue.pageSize);\n }\n },\n [pagination, setPage, setPerPage, enableNuqs]\n );\n\n const columnIds = React.useMemo(() => {\n return new Set(\n columns.map((column) => column.id).filter(Boolean) as string[]\n );\n }, [columns]);\n\n // Note: enableNuqs should be stable (not change during component lifecycle)\n // to avoid violating React hooks rules. If it changes, it may cause issues.\n const [sorting, setSorting] = enableNuqs\n ? useQueryState(\n sortKey,\n getSortingStateParser<TData>(columnIds)\n .withOptions(queryStateOptions)\n .withDefault(initialState?.sorting ?? [])\n )\n : React.useState(initialState?.sorting ?? []);\n\n const onSortingChange = React.useCallback(\n (updaterOrValue: Updater<SortingState>) => {\n if (typeof updaterOrValue === \"function\") {\n const newSorting = updaterOrValue(sorting);\n setSorting(newSorting as ExtendedColumnSort<TData>[]);\n } else {\n setSorting(updaterOrValue as ExtendedColumnSort<TData>[]);\n }\n },\n [sorting, setSorting]\n );\n\n const filterableColumns = React.useMemo(() => {\n if (enableAdvancedFilter) return [];\n\n return columns.filter((column) => column.enableColumnFilter);\n }, [columns, enableAdvancedFilter]);\n\n const filterParsers = React.useMemo(() => {\n if (enableAdvancedFilter) return {};\n\n return filterableColumns.reduce<\n Record<string, SingleParser<string> | SingleParser<string[]>>\n >((acc, column) => {\n if (column.meta?.variant === \"multiSelect\") {\n acc[column.id ?? \"\"] = parseAsArrayOf(\n parseAsString,\n ARRAY_SEPARATOR\n ).withOptions(queryStateOptions);\n } else {\n acc[column.id ?? \"\"] = parseAsString.withOptions(queryStateOptions);\n }\n return acc;\n }, {});\n }, [filterableColumns, queryStateOptions, enableAdvancedFilter]);\n\n // Note: enableNuqs should be stable (not change during component lifecycle)\n const [filterValues, setFilterValues] = enableNuqs\n ? useQueryStates(filterParsers)\n : React.useState<Record<string, string | string[] | null>>({});\n\n const debouncedSetFilterValues = useDebouncedCallback(\n (values: typeof filterValues) => {\n void setPage(1);\n void setFilterValues(values);\n },\n debounceMs\n );\n\n const initialColumnFilters: ColumnFiltersState = React.useMemo(() => {\n if (enableAdvancedFilter) return [];\n\n return Object.entries(filterValues).reduce<ColumnFiltersState>(\n (filters, [key, value]) => {\n if (value !== null) {\n const column = filterableColumns.find((col) => col.id === key);\n const isMultiSelect = column?.meta?.variant === \"multiSelect\";\n\n const processedValue = Array.isArray(value)\n ? value\n : isMultiSelect &&\n typeof value === \"string\" &&\n /[^a-zA-Z0-9]/.test(value)\n ? value.split(/[^a-zA-Z0-9]+/).filter(Boolean)\n : isMultiSelect\n ? [value]\n : value;\n\n filters.push({\n id: key,\n value: processedValue,\n });\n }\n return filters;\n },\n []\n );\n }, [filterValues, enableAdvancedFilter, filterableColumns]);\n\n const [columnFilters, setColumnFilters] =\n React.useState<ColumnFiltersState>(initialColumnFilters);\n\n const onColumnFiltersChange = React.useCallback(\n (updaterOrValue: Updater<ColumnFiltersState>) => {\n if (enableAdvancedFilter) return;\n\n setColumnFilters((prev) => {\n const next =\n typeof updaterOrValue === \"function\"\n ? updaterOrValue(prev)\n : updaterOrValue;\n\n const filterUpdates = next.reduce<\n Record<string, string | string[] | null>\n >((acc, filter) => {\n const column = filterableColumns.find((col) => col.id === filter.id);\n if (column) {\n const isMultiSelect = column.meta?.variant === \"multiSelect\";\n acc[filter.id] = isMultiSelect\n ? (filter.value as string[])\n : (filter.value as string);\n }\n console.log(\"filterParsers\", column, acc);\n return acc;\n }, {});\n\n for (const prevFilter of prev) {\n if (!next.some((filter) => filter.id === prevFilter.id)) {\n filterUpdates[prevFilter.id] = null;\n }\n }\n\n if (enableNuqs) {\n debouncedSetFilterValues(filterUpdates);\n }\n return next;\n });\n },\n [\n debouncedSetFilterValues,\n filterableColumns,\n enableAdvancedFilter,\n enableNuqs,\n ]\n );\n\n const table = useReactTable({\n initialState,\n pageCount,\n state: {\n pagination,\n sorting,\n columnVisibility,\n columnOrder,\n rowSelection,\n columnFilters,\n ...controlledState,\n },\n defaultColumn: {\n ...tableProps.defaultColumn,\n enableColumnFilter: true,\n enableSorting: false,\n enableHiding: true,\n enablePinning: true,\n },\n enableRowSelection: true,\n onRowSelectionChange: setRowSelection,\n onPaginationChange,\n onSortingChange,\n onColumnFiltersChange,\n onColumnVisibilityChange: setColumnVisibility,\n onColumnOrderChange: setColumnOrder,\n getCoreRowModel: getCoreRowModel(),\n getFilteredRowModel: getFilteredRowModel(),\n getPaginationRowModel: getPaginationRowModel(),\n getSortedRowModel: getSortedRowModel(),\n getFacetedRowModel: getFacetedRowModel(),\n getFacetedUniqueValues: getFacetedUniqueValues(),\n getFacetedMinMaxValues: getFacetedMinMaxValues(),\n meta: {\n ...tableProps.meta,\n queryKeys: {\n page: pageKey,\n perPage: perPageKey,\n sort: sortKey,\n filters: filtersKey,\n joinOperator: joinOperatorKey,\n },\n },\n ...tableProps,\n columns,\n });\n\n return { table, shallow, debounceMs, throttleMs };\n}\n"],"names":["PAGE_KEY","PER_PAGE_KEY","SORT_KEY","FILTERS_KEY","JOIN_OPERATOR_KEY","ARRAY_SEPARATOR","DEBOUNCE_MS","THROTTLE_MS","useDataTable","props","columns","pageCount","initialState","queryKeys","history","debounceMs","throttleMs","clearOnDefault","enableAdvancedFilter","scroll","shallow","startTransition","enableNuqs","controlledState","tableProps","pageKey","perPageKey","sortKey","filtersKey","joinOperatorKey","queryStateOptions","React","rowSelection","setRowSelection","columnVisibility","setColumnVisibility","columnOrder","setColumnOrder","page","setPage","useQueryState","parseAsInteger","perPage","setPerPage","pagination","onPaginationChange","updaterOrValue","newPagination","columnIds","column","sorting","setSorting","getSortingStateParser","onSortingChange","newSorting","filterableColumns","filterParsers","acc","parseAsArrayOf","parseAsString","filterValues","setFilterValues","useQueryStates","debouncedSetFilterValues","useDebouncedCallback","values","initialColumnFilters","filters","key","value","isMultiSelect","col","processedValue","columnFilters","setColumnFilters","onColumnFiltersChange","prev","next","filterUpdates","filter","prevFilter","useReactTable","getCoreRowModel","getFilteredRowModel","getPaginationRowModel","getSortedRowModel","getFacetedRowModel","getFacetedUniqueValues","getFacetedMinMaxValues"],"mappings":"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"}
|
|
@@ -1,26 +1,27 @@
|
|
|
1
|
-
import { useReactTable as
|
|
2
|
-
import { useQueryState as A, parseAsInteger as v, parseAsArrayOf as
|
|
1
|
+
import { useReactTable as se, getFacetedMinMaxValues as ae, getFacetedUniqueValues as re, getFacetedRowModel as le, getSortedRowModel as ce, getPaginationRowModel as ue, getFilteredRowModel as ge, getCoreRowModel as de } from "@tanstack/react-table";
|
|
2
|
+
import { useQueryState as A, parseAsInteger as v, parseAsArrayOf as fe, parseAsString as Y, useQueryStates as pe } from "nuqs";
|
|
3
3
|
import * as t from "react";
|
|
4
|
-
import { useDebouncedCallback as
|
|
5
|
-
import { getSortingStateParser as
|
|
6
|
-
const
|
|
7
|
-
function
|
|
4
|
+
import { useDebouncedCallback as me } from "./use-debounced-callback.js";
|
|
5
|
+
import { getSortingStateParser as Se } from "../utils/parsers.js";
|
|
6
|
+
const we = "page", be = "perPage", Ce = "sort", Me = "filters", Re = "joinOperator", ye = ",", Pe = 300, Fe = 50;
|
|
7
|
+
function xe(j) {
|
|
8
8
|
const {
|
|
9
9
|
columns: g,
|
|
10
10
|
pageCount: U,
|
|
11
11
|
initialState: s,
|
|
12
12
|
queryKeys: d,
|
|
13
13
|
history: O = "replace",
|
|
14
|
-
debounceMs: p =
|
|
15
|
-
throttleMs: S =
|
|
14
|
+
debounceMs: p = Pe,
|
|
15
|
+
throttleMs: S = Fe,
|
|
16
16
|
clearOnDefault: E = !1,
|
|
17
17
|
enableAdvancedFilter: r = !1,
|
|
18
18
|
scroll: K = !1,
|
|
19
19
|
shallow: w = !0,
|
|
20
20
|
startTransition: x,
|
|
21
21
|
enableNuqs: i = !1,
|
|
22
|
+
state: V,
|
|
22
23
|
...b
|
|
23
|
-
} = j, I = d?.page ??
|
|
24
|
+
} = j, I = d?.page ?? we, T = d?.perPage ?? be, _ = d?.sort ?? Ce, k = d?.filters ?? Me, B = d?.joinOperator ?? Re, c = t.useMemo(
|
|
24
25
|
() => ({
|
|
25
26
|
history: O,
|
|
26
27
|
scroll: K,
|
|
@@ -39,9 +40,9 @@ function Ke(j) {
|
|
|
39
40
|
E,
|
|
40
41
|
x
|
|
41
42
|
]
|
|
42
|
-
), [
|
|
43
|
+
), [N, G] = t.useState(
|
|
43
44
|
s?.rowSelection ?? {}
|
|
44
|
-
), [
|
|
45
|
+
), [H, L] = t.useState(s?.columnVisibility ?? {}), [Q, Z] = t.useState(
|
|
45
46
|
s?.columnOrder ?? []
|
|
46
47
|
), [C, m] = i ? A(
|
|
47
48
|
I,
|
|
@@ -53,7 +54,7 @@ function Ke(j) {
|
|
|
53
54
|
pageIndex: i ? C - 1 : C,
|
|
54
55
|
// zero-based index
|
|
55
56
|
pageSize: z
|
|
56
|
-
}), [C, z, i]),
|
|
57
|
+
}), [C, z, i]), J = t.useCallback(
|
|
57
58
|
(e) => {
|
|
58
59
|
if (typeof e == "function") {
|
|
59
60
|
const o = e(R);
|
|
@@ -66,12 +67,12 @@ function Ke(j) {
|
|
|
66
67
|
), M(e.pageSize);
|
|
67
68
|
},
|
|
68
69
|
[R, m, M, i]
|
|
69
|
-
),
|
|
70
|
+
), W = t.useMemo(() => new Set(
|
|
70
71
|
g.map((e) => e.id).filter(Boolean)
|
|
71
72
|
), [g]), [y, P] = i ? A(
|
|
72
73
|
_,
|
|
73
|
-
|
|
74
|
-
) : t.useState(s?.sorting ?? []),
|
|
74
|
+
Se(W).withOptions(c).withDefault(s?.sorting ?? [])
|
|
75
|
+
) : t.useState(s?.sorting ?? []), X = t.useCallback(
|
|
75
76
|
(e) => {
|
|
76
77
|
if (typeof e == "function") {
|
|
77
78
|
const o = e(y);
|
|
@@ -80,15 +81,15 @@ function Ke(j) {
|
|
|
80
81
|
P(e);
|
|
81
82
|
},
|
|
82
83
|
[y, P]
|
|
83
|
-
), u = t.useMemo(() => r ? [] : g.filter((e) => e.enableColumnFilter), [g, r]),
|
|
84
|
+
), u = t.useMemo(() => r ? [] : g.filter((e) => e.enableColumnFilter), [g, r]), $ = t.useMemo(() => r ? {} : u.reduce((e, o) => (o.meta?.variant === "multiSelect" ? e[o.id ?? ""] = fe(
|
|
84
85
|
Y,
|
|
85
|
-
|
|
86
|
-
).withOptions(c) : e[o.id ?? ""] = Y.withOptions(c), e), {}), [u, c, r]), [D,
|
|
86
|
+
ye
|
|
87
|
+
).withOptions(c) : e[o.id ?? ""] = Y.withOptions(c), e), {}), [u, c, r]), [D, ee] = i ? pe($) : t.useState({}), q = me(
|
|
87
88
|
(e) => {
|
|
88
|
-
m(1),
|
|
89
|
+
m(1), ee(e);
|
|
89
90
|
},
|
|
90
91
|
p
|
|
91
|
-
),
|
|
92
|
+
), te = t.useMemo(() => r ? [] : Object.entries(D).reduce(
|
|
92
93
|
(e, [o, n]) => {
|
|
93
94
|
if (n !== null) {
|
|
94
95
|
const a = u.find((f) => f.id === o)?.meta?.variant === "multiSelect", l = Array.isArray(n) ? n : a && typeof n == "string" && /[^a-zA-Z0-9]/.test(n) ? n.split(/[^a-zA-Z0-9]+/).filter(Boolean) : a ? [n] : n;
|
|
@@ -100,9 +101,9 @@ function Ke(j) {
|
|
|
100
101
|
return e;
|
|
101
102
|
},
|
|
102
103
|
[]
|
|
103
|
-
), [D, r, u]), [
|
|
104
|
+
), [D, r, u]), [oe, ne] = t.useState(te), ie = t.useCallback(
|
|
104
105
|
(e) => {
|
|
105
|
-
r ||
|
|
106
|
+
r || ne((o) => {
|
|
106
107
|
const n = typeof e == "function" ? e(o) : e, F = n.reduce((a, l) => {
|
|
107
108
|
const f = u.find((h) => h.id === l.id);
|
|
108
109
|
if (f) {
|
|
@@ -123,16 +124,17 @@ function Ke(j) {
|
|
|
123
124
|
i
|
|
124
125
|
]
|
|
125
126
|
);
|
|
126
|
-
return { table:
|
|
127
|
+
return { table: se({
|
|
127
128
|
initialState: s,
|
|
128
129
|
pageCount: U,
|
|
129
130
|
state: {
|
|
130
131
|
pagination: R,
|
|
131
132
|
sorting: y,
|
|
132
|
-
columnVisibility:
|
|
133
|
-
columnOrder:
|
|
134
|
-
rowSelection:
|
|
135
|
-
columnFilters:
|
|
133
|
+
columnVisibility: H,
|
|
134
|
+
columnOrder: Q,
|
|
135
|
+
rowSelection: N,
|
|
136
|
+
columnFilters: oe,
|
|
137
|
+
...V
|
|
136
138
|
},
|
|
137
139
|
defaultColumn: {
|
|
138
140
|
...b.defaultColumn,
|
|
@@ -142,27 +144,27 @@ function Ke(j) {
|
|
|
142
144
|
enablePinning: !0
|
|
143
145
|
},
|
|
144
146
|
enableRowSelection: !0,
|
|
145
|
-
onRowSelectionChange:
|
|
146
|
-
onPaginationChange:
|
|
147
|
-
onSortingChange:
|
|
148
|
-
onColumnFiltersChange:
|
|
149
|
-
onColumnVisibilityChange:
|
|
150
|
-
onColumnOrderChange:
|
|
151
|
-
getCoreRowModel:
|
|
152
|
-
getFilteredRowModel:
|
|
153
|
-
getPaginationRowModel:
|
|
154
|
-
getSortedRowModel:
|
|
155
|
-
getFacetedRowModel:
|
|
156
|
-
getFacetedUniqueValues:
|
|
157
|
-
getFacetedMinMaxValues:
|
|
147
|
+
onRowSelectionChange: G,
|
|
148
|
+
onPaginationChange: J,
|
|
149
|
+
onSortingChange: X,
|
|
150
|
+
onColumnFiltersChange: ie,
|
|
151
|
+
onColumnVisibilityChange: L,
|
|
152
|
+
onColumnOrderChange: Z,
|
|
153
|
+
getCoreRowModel: de(),
|
|
154
|
+
getFilteredRowModel: ge(),
|
|
155
|
+
getPaginationRowModel: ue(),
|
|
156
|
+
getSortedRowModel: ce(),
|
|
157
|
+
getFacetedRowModel: le(),
|
|
158
|
+
getFacetedUniqueValues: re(),
|
|
159
|
+
getFacetedMinMaxValues: ae(),
|
|
158
160
|
meta: {
|
|
159
161
|
...b.meta,
|
|
160
162
|
queryKeys: {
|
|
161
163
|
page: I,
|
|
162
164
|
perPage: T,
|
|
163
165
|
sort: _,
|
|
164
|
-
filters:
|
|
165
|
-
joinOperator:
|
|
166
|
+
filters: k,
|
|
167
|
+
joinOperator: B
|
|
166
168
|
}
|
|
167
169
|
},
|
|
168
170
|
...b,
|
|
@@ -170,6 +172,6 @@ function Ke(j) {
|
|
|
170
172
|
}), shallow: w, debounceMs: p, throttleMs: S };
|
|
171
173
|
}
|
|
172
174
|
export {
|
|
173
|
-
|
|
175
|
+
xe as useDataTable
|
|
174
176
|
};
|
|
175
177
|
//# sourceMappingURL=use-data-table.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use-data-table.js","sources":["../../../src/hooks/use-data-table.ts"],"sourcesContent":["\"use client\";\n\n/* eslint-disable react-hooks/rules-of-hooks */\n\nimport {\n type ColumnFiltersState,\n type ColumnOrderState,\n getCoreRowModel,\n getFacetedMinMaxValues,\n getFacetedRowModel,\n getFacetedUniqueValues,\n getFilteredRowModel,\n getPaginationRowModel,\n getSortedRowModel,\n type PaginationState,\n type RowSelectionState,\n type SortingState,\n type TableOptions,\n type TableState,\n type Updater,\n useReactTable,\n type VisibilityState,\n} from \"@tanstack/react-table\";\nimport {\n parseAsArrayOf,\n parseAsInteger,\n parseAsString,\n type SingleParser,\n type UseQueryStateOptions,\n useQueryState,\n useQueryStates,\n} from \"nuqs\";\nimport * as React from \"react\";\n\nimport { useDebouncedCallback } from \"@/hooks/use-debounced-callback\";\nimport { getSortingStateParser } from \"@/utils/parsers\";\nimport type { ExtendedColumnSort, QueryKeys } from \"@/types/data-table\";\n\nconst PAGE_KEY = \"page\";\nconst PER_PAGE_KEY = \"perPage\";\nconst SORT_KEY = \"sort\";\nconst FILTERS_KEY = \"filters\";\nconst JOIN_OPERATOR_KEY = \"joinOperator\";\nconst ARRAY_SEPARATOR = \",\";\nconst DEBOUNCE_MS = 300;\nconst THROTTLE_MS = 50;\n\ninterface UseDataTableProps<TData>\n extends Omit<\n TableOptions<TData>,\n // | \"state\"\n // | \"pageCount\"\n \"getCoreRowModel\"\n > {\n initialState?: Omit<Partial<TableState>, \"sorting\"> & {\n sorting?: ExtendedColumnSort<TData>[];\n };\n queryKeys?: Partial<QueryKeys>;\n history?: \"push\" | \"replace\";\n debounceMs?: number;\n throttleMs?: number;\n clearOnDefault?: boolean;\n enableAdvancedFilter?: boolean;\n scroll?: boolean;\n shallow?: boolean;\n startTransition?: React.TransitionStartFunction;\n enableNuqs?: boolean;\n}\n\nexport function useDataTable<TData>(props: UseDataTableProps<TData>) {\n const {\n columns,\n pageCount,\n initialState,\n queryKeys,\n history = \"replace\",\n debounceMs = DEBOUNCE_MS,\n throttleMs = THROTTLE_MS,\n clearOnDefault = false,\n enableAdvancedFilter = false,\n scroll = false,\n shallow = true,\n startTransition,\n enableNuqs = false,\n ...tableProps\n } = props;\n const pageKey = queryKeys?.page ?? PAGE_KEY;\n const perPageKey = queryKeys?.perPage ?? PER_PAGE_KEY;\n const sortKey = queryKeys?.sort ?? SORT_KEY;\n const filtersKey = queryKeys?.filters ?? FILTERS_KEY;\n const joinOperatorKey = queryKeys?.joinOperator ?? JOIN_OPERATOR_KEY;\n\n const queryStateOptions = React.useMemo<\n Omit<UseQueryStateOptions<string>, \"parse\">\n >(\n () => ({\n history,\n scroll,\n shallow,\n throttleMs,\n debounceMs,\n clearOnDefault,\n startTransition: startTransition as any,\n }),\n [\n history,\n scroll,\n shallow,\n throttleMs,\n debounceMs,\n clearOnDefault,\n startTransition,\n ]\n );\n\n const [rowSelection, setRowSelection] = React.useState<RowSelectionState>(\n initialState?.rowSelection ?? {}\n );\n const [columnVisibility, setColumnVisibility] =\n React.useState<VisibilityState>(initialState?.columnVisibility ?? {});\n const [columnOrder, setColumnOrder] = React.useState<ColumnOrderState>(\n initialState?.columnOrder ?? []\n );\n\n const [page, setPage] = enableNuqs\n ? useQueryState(\n pageKey,\n parseAsInteger.withOptions(queryStateOptions).withDefault(1)\n )\n : React.useState(initialState?.pagination?.pageIndex ?? 0);\n\n const [perPage, setPerPage] = enableNuqs\n ? useQueryState(\n perPageKey,\n parseAsInteger\n .withOptions(queryStateOptions)\n .withDefault(initialState?.pagination?.pageSize ?? 10)\n )\n : React.useState(initialState?.pagination?.pageSize ?? 10);\n\n const pagination: PaginationState = React.useMemo(() => {\n return {\n pageIndex: enableNuqs ? page - 1 : page, // zero-based index\n pageSize: perPage,\n };\n }, [page, perPage, enableNuqs]);\n\n const onPaginationChange = React.useCallback(\n (updaterOrValue: Updater<PaginationState>) => {\n if (typeof updaterOrValue === \"function\") {\n const newPagination = updaterOrValue(pagination);\n void setPage(\n enableNuqs ? newPagination.pageIndex + 1 : newPagination.pageIndex\n );\n void setPerPage(newPagination.pageSize);\n } else {\n void setPage(\n enableNuqs ? updaterOrValue.pageIndex + 1 : updaterOrValue.pageIndex\n );\n void setPerPage(updaterOrValue.pageSize);\n }\n },\n [pagination, setPage, setPerPage, enableNuqs]\n );\n\n const columnIds = React.useMemo(() => {\n return new Set(\n columns.map((column) => column.id).filter(Boolean) as string[]\n );\n }, [columns]);\n\n // Note: enableNuqs should be stable (not change during component lifecycle)\n // to avoid violating React hooks rules. If it changes, it may cause issues.\n const [sorting, setSorting] = enableNuqs\n ? useQueryState(\n sortKey,\n getSortingStateParser<TData>(columnIds)\n .withOptions(queryStateOptions)\n .withDefault(initialState?.sorting ?? [])\n )\n : React.useState(initialState?.sorting ?? []);\n\n const onSortingChange = React.useCallback(\n (updaterOrValue: Updater<SortingState>) => {\n if (typeof updaterOrValue === \"function\") {\n const newSorting = updaterOrValue(sorting);\n setSorting(newSorting as ExtendedColumnSort<TData>[]);\n } else {\n setSorting(updaterOrValue as ExtendedColumnSort<TData>[]);\n }\n },\n [sorting, setSorting]\n );\n\n const filterableColumns = React.useMemo(() => {\n if (enableAdvancedFilter) return [];\n\n return columns.filter((column) => column.enableColumnFilter);\n }, [columns, enableAdvancedFilter]);\n\n const filterParsers = React.useMemo(() => {\n if (enableAdvancedFilter) return {};\n\n return filterableColumns.reduce<\n Record<string, SingleParser<string> | SingleParser<string[]>>\n >((acc, column) => {\n if (column.meta?.variant === \"multiSelect\") {\n acc[column.id ?? \"\"] = parseAsArrayOf(\n parseAsString,\n ARRAY_SEPARATOR\n ).withOptions(queryStateOptions);\n } else {\n acc[column.id ?? \"\"] = parseAsString.withOptions(queryStateOptions);\n }\n return acc;\n }, {});\n }, [filterableColumns, queryStateOptions, enableAdvancedFilter]);\n\n // Note: enableNuqs should be stable (not change during component lifecycle)\n const [filterValues, setFilterValues] = enableNuqs\n ? useQueryStates(filterParsers)\n : React.useState<Record<string, string | string[] | null>>({});\n\n const debouncedSetFilterValues = useDebouncedCallback(\n (values: typeof filterValues) => {\n void setPage(1);\n void setFilterValues(values);\n },\n debounceMs\n );\n\n const initialColumnFilters: ColumnFiltersState = React.useMemo(() => {\n if (enableAdvancedFilter) return [];\n\n return Object.entries(filterValues).reduce<ColumnFiltersState>(\n (filters, [key, value]) => {\n if (value !== null) {\n const column = filterableColumns.find((col) => col.id === key);\n const isMultiSelect = column?.meta?.variant === \"multiSelect\";\n\n const processedValue = Array.isArray(value)\n ? value\n : isMultiSelect &&\n typeof value === \"string\" &&\n /[^a-zA-Z0-9]/.test(value)\n ? value.split(/[^a-zA-Z0-9]+/).filter(Boolean)\n : isMultiSelect\n ? [value]\n : value;\n\n filters.push({\n id: key,\n value: processedValue,\n });\n }\n return filters;\n },\n []\n );\n }, [filterValues, enableAdvancedFilter, filterableColumns]);\n\n const [columnFilters, setColumnFilters] =\n React.useState<ColumnFiltersState>(initialColumnFilters);\n\n const onColumnFiltersChange = React.useCallback(\n (updaterOrValue: Updater<ColumnFiltersState>) => {\n if (enableAdvancedFilter) return;\n\n setColumnFilters((prev) => {\n const next =\n typeof updaterOrValue === \"function\"\n ? updaterOrValue(prev)\n : updaterOrValue;\n\n const filterUpdates = next.reduce<\n Record<string, string | string[] | null>\n >((acc, filter) => {\n const column = filterableColumns.find((col) => col.id === filter.id);\n if (column) {\n const isMultiSelect = column.meta?.variant === \"multiSelect\";\n acc[filter.id] = isMultiSelect\n ? (filter.value as string[])\n : (filter.value as string);\n }\n console.log(\"filterParsers\", column, acc);\n return acc;\n }, {});\n\n for (const prevFilter of prev) {\n if (!next.some((filter) => filter.id === prevFilter.id)) {\n filterUpdates[prevFilter.id] = null;\n }\n }\n\n if (enableNuqs) {\n debouncedSetFilterValues(filterUpdates);\n }\n return next;\n });\n },\n [\n debouncedSetFilterValues,\n filterableColumns,\n enableAdvancedFilter,\n enableNuqs,\n ]\n );\n\n const table = useReactTable({\n initialState,\n pageCount,\n state: {\n pagination,\n sorting,\n columnVisibility,\n columnOrder,\n rowSelection,\n columnFilters,\n },\n defaultColumn: {\n ...tableProps.defaultColumn,\n enableColumnFilter: true,\n enableSorting: false,\n enableHiding: true,\n enablePinning: true,\n },\n enableRowSelection: true,\n onRowSelectionChange: setRowSelection,\n onPaginationChange,\n onSortingChange,\n onColumnFiltersChange,\n onColumnVisibilityChange: setColumnVisibility,\n onColumnOrderChange: setColumnOrder,\n getCoreRowModel: getCoreRowModel(),\n getFilteredRowModel: getFilteredRowModel(),\n getPaginationRowModel: getPaginationRowModel(),\n getSortedRowModel: getSortedRowModel(),\n getFacetedRowModel: getFacetedRowModel(),\n getFacetedUniqueValues: getFacetedUniqueValues(),\n getFacetedMinMaxValues: getFacetedMinMaxValues(),\n meta: {\n ...tableProps.meta,\n queryKeys: {\n page: pageKey,\n perPage: perPageKey,\n sort: sortKey,\n filters: filtersKey,\n joinOperator: joinOperatorKey,\n },\n },\n ...tableProps,\n columns,\n });\n\n return { table, shallow, debounceMs, throttleMs };\n}\n"],"names":["PAGE_KEY","PER_PAGE_KEY","SORT_KEY","FILTERS_KEY","JOIN_OPERATOR_KEY","ARRAY_SEPARATOR","DEBOUNCE_MS","THROTTLE_MS","useDataTable","props","columns","pageCount","initialState","queryKeys","history","debounceMs","throttleMs","clearOnDefault","enableAdvancedFilter","scroll","shallow","startTransition","enableNuqs","tableProps","pageKey","perPageKey","sortKey","filtersKey","joinOperatorKey","queryStateOptions","React","rowSelection","setRowSelection","columnVisibility","setColumnVisibility","columnOrder","setColumnOrder","page","setPage","useQueryState","parseAsInteger","perPage","setPerPage","pagination","onPaginationChange","updaterOrValue","newPagination","columnIds","column","sorting","setSorting","getSortingStateParser","onSortingChange","newSorting","filterableColumns","filterParsers","acc","parseAsArrayOf","parseAsString","filterValues","setFilterValues","useQueryStates","debouncedSetFilterValues","useDebouncedCallback","values","initialColumnFilters","filters","key","value","isMultiSelect","col","processedValue","columnFilters","setColumnFilters","onColumnFiltersChange","prev","next","filterUpdates","filter","prevFilter","useReactTable","getCoreRowModel","getFilteredRowModel","getPaginationRowModel","getSortedRowModel","getFacetedRowModel","getFacetedUniqueValues","getFacetedMinMaxValues"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"use-data-table.js","sources":["../../../src/hooks/use-data-table.ts"],"sourcesContent":["\"use client\";\n\n/* eslint-disable react-hooks/rules-of-hooks */\n\nimport {\n type ColumnFiltersState,\n type ColumnOrderState,\n getCoreRowModel,\n getFacetedMinMaxValues,\n getFacetedRowModel,\n getFacetedUniqueValues,\n getFilteredRowModel,\n getPaginationRowModel,\n getSortedRowModel,\n type PaginationState,\n type RowSelectionState,\n type SortingState,\n type TableOptions,\n type TableState,\n type Updater,\n useReactTable,\n type VisibilityState,\n} from \"@tanstack/react-table\";\nimport {\n parseAsArrayOf,\n parseAsInteger,\n parseAsString,\n type SingleParser,\n type UseQueryStateOptions,\n useQueryState,\n useQueryStates,\n} from \"nuqs\";\nimport * as React from \"react\";\n\nimport { useDebouncedCallback } from \"@/hooks/use-debounced-callback\";\nimport { getSortingStateParser } from \"@/utils/parsers\";\nimport type { ExtendedColumnSort, QueryKeys } from \"@/types/data-table\";\n\nconst PAGE_KEY = \"page\";\nconst PER_PAGE_KEY = \"perPage\";\nconst SORT_KEY = \"sort\";\nconst FILTERS_KEY = \"filters\";\nconst JOIN_OPERATOR_KEY = \"joinOperator\";\nconst ARRAY_SEPARATOR = \",\";\nconst DEBOUNCE_MS = 300;\nconst THROTTLE_MS = 50;\n\ninterface UseDataTableProps<TData>\n extends Omit<\n TableOptions<TData>,\n // | \"state\"\n // | \"pageCount\"\n \"getCoreRowModel\"\n > {\n initialState?: Omit<Partial<TableState>, \"sorting\"> & {\n sorting?: ExtendedColumnSort<TData>[];\n };\n queryKeys?: Partial<QueryKeys>;\n history?: \"push\" | \"replace\";\n debounceMs?: number;\n throttleMs?: number;\n clearOnDefault?: boolean;\n enableAdvancedFilter?: boolean;\n scroll?: boolean;\n shallow?: boolean;\n startTransition?: React.TransitionStartFunction;\n enableNuqs?: boolean;\n}\n\nexport function useDataTable<TData>(props: UseDataTableProps<TData>) {\n const {\n columns,\n pageCount,\n initialState,\n queryKeys,\n history = \"replace\",\n debounceMs = DEBOUNCE_MS,\n throttleMs = THROTTLE_MS,\n clearOnDefault = false,\n enableAdvancedFilter = false,\n scroll = false,\n shallow = true,\n startTransition,\n enableNuqs = false,\n state: controlledState,\n ...tableProps\n } = props;\n const pageKey = queryKeys?.page ?? PAGE_KEY;\n const perPageKey = queryKeys?.perPage ?? PER_PAGE_KEY;\n const sortKey = queryKeys?.sort ?? SORT_KEY;\n const filtersKey = queryKeys?.filters ?? FILTERS_KEY;\n const joinOperatorKey = queryKeys?.joinOperator ?? JOIN_OPERATOR_KEY;\n\n const queryStateOptions = React.useMemo<\n Omit<UseQueryStateOptions<string>, \"parse\">\n >(\n () => ({\n history,\n scroll,\n shallow,\n throttleMs,\n debounceMs,\n clearOnDefault,\n startTransition: startTransition as any,\n }),\n [\n history,\n scroll,\n shallow,\n throttleMs,\n debounceMs,\n clearOnDefault,\n startTransition,\n ]\n );\n\n const [rowSelection, setRowSelection] = React.useState<RowSelectionState>(\n initialState?.rowSelection ?? {}\n );\n const [columnVisibility, setColumnVisibility] =\n React.useState<VisibilityState>(initialState?.columnVisibility ?? {});\n const [columnOrder, setColumnOrder] = React.useState<ColumnOrderState>(\n initialState?.columnOrder ?? []\n );\n\n const [page, setPage] = enableNuqs\n ? useQueryState(\n pageKey,\n parseAsInteger.withOptions(queryStateOptions).withDefault(1)\n )\n : React.useState(initialState?.pagination?.pageIndex ?? 0);\n\n const [perPage, setPerPage] = enableNuqs\n ? useQueryState(\n perPageKey,\n parseAsInteger\n .withOptions(queryStateOptions)\n .withDefault(initialState?.pagination?.pageSize ?? 10)\n )\n : React.useState(initialState?.pagination?.pageSize ?? 10);\n\n const pagination: PaginationState = React.useMemo(() => {\n return {\n pageIndex: enableNuqs ? page - 1 : page, // zero-based index\n pageSize: perPage,\n };\n }, [page, perPage, enableNuqs]);\n\n const onPaginationChange = React.useCallback(\n (updaterOrValue: Updater<PaginationState>) => {\n if (typeof updaterOrValue === \"function\") {\n const newPagination = updaterOrValue(pagination);\n void setPage(\n enableNuqs ? newPagination.pageIndex + 1 : newPagination.pageIndex\n );\n void setPerPage(newPagination.pageSize);\n } else {\n void setPage(\n enableNuqs ? updaterOrValue.pageIndex + 1 : updaterOrValue.pageIndex\n );\n void setPerPage(updaterOrValue.pageSize);\n }\n },\n [pagination, setPage, setPerPage, enableNuqs]\n );\n\n const columnIds = React.useMemo(() => {\n return new Set(\n columns.map((column) => column.id).filter(Boolean) as string[]\n );\n }, [columns]);\n\n // Note: enableNuqs should be stable (not change during component lifecycle)\n // to avoid violating React hooks rules. If it changes, it may cause issues.\n const [sorting, setSorting] = enableNuqs\n ? useQueryState(\n sortKey,\n getSortingStateParser<TData>(columnIds)\n .withOptions(queryStateOptions)\n .withDefault(initialState?.sorting ?? [])\n )\n : React.useState(initialState?.sorting ?? []);\n\n const onSortingChange = React.useCallback(\n (updaterOrValue: Updater<SortingState>) => {\n if (typeof updaterOrValue === \"function\") {\n const newSorting = updaterOrValue(sorting);\n setSorting(newSorting as ExtendedColumnSort<TData>[]);\n } else {\n setSorting(updaterOrValue as ExtendedColumnSort<TData>[]);\n }\n },\n [sorting, setSorting]\n );\n\n const filterableColumns = React.useMemo(() => {\n if (enableAdvancedFilter) return [];\n\n return columns.filter((column) => column.enableColumnFilter);\n }, [columns, enableAdvancedFilter]);\n\n const filterParsers = React.useMemo(() => {\n if (enableAdvancedFilter) return {};\n\n return filterableColumns.reduce<\n Record<string, SingleParser<string> | SingleParser<string[]>>\n >((acc, column) => {\n if (column.meta?.variant === \"multiSelect\") {\n acc[column.id ?? \"\"] = parseAsArrayOf(\n parseAsString,\n ARRAY_SEPARATOR\n ).withOptions(queryStateOptions);\n } else {\n acc[column.id ?? \"\"] = parseAsString.withOptions(queryStateOptions);\n }\n return acc;\n }, {});\n }, [filterableColumns, queryStateOptions, enableAdvancedFilter]);\n\n // Note: enableNuqs should be stable (not change during component lifecycle)\n const [filterValues, setFilterValues] = enableNuqs\n ? useQueryStates(filterParsers)\n : React.useState<Record<string, string | string[] | null>>({});\n\n const debouncedSetFilterValues = useDebouncedCallback(\n (values: typeof filterValues) => {\n void setPage(1);\n void setFilterValues(values);\n },\n debounceMs\n );\n\n const initialColumnFilters: ColumnFiltersState = React.useMemo(() => {\n if (enableAdvancedFilter) return [];\n\n return Object.entries(filterValues).reduce<ColumnFiltersState>(\n (filters, [key, value]) => {\n if (value !== null) {\n const column = filterableColumns.find((col) => col.id === key);\n const isMultiSelect = column?.meta?.variant === \"multiSelect\";\n\n const processedValue = Array.isArray(value)\n ? value\n : isMultiSelect &&\n typeof value === \"string\" &&\n /[^a-zA-Z0-9]/.test(value)\n ? value.split(/[^a-zA-Z0-9]+/).filter(Boolean)\n : isMultiSelect\n ? [value]\n : value;\n\n filters.push({\n id: key,\n value: processedValue,\n });\n }\n return filters;\n },\n []\n );\n }, [filterValues, enableAdvancedFilter, filterableColumns]);\n\n const [columnFilters, setColumnFilters] =\n React.useState<ColumnFiltersState>(initialColumnFilters);\n\n const onColumnFiltersChange = React.useCallback(\n (updaterOrValue: Updater<ColumnFiltersState>) => {\n if (enableAdvancedFilter) return;\n\n setColumnFilters((prev) => {\n const next =\n typeof updaterOrValue === \"function\"\n ? updaterOrValue(prev)\n : updaterOrValue;\n\n const filterUpdates = next.reduce<\n Record<string, string | string[] | null>\n >((acc, filter) => {\n const column = filterableColumns.find((col) => col.id === filter.id);\n if (column) {\n const isMultiSelect = column.meta?.variant === \"multiSelect\";\n acc[filter.id] = isMultiSelect\n ? (filter.value as string[])\n : (filter.value as string);\n }\n console.log(\"filterParsers\", column, acc);\n return acc;\n }, {});\n\n for (const prevFilter of prev) {\n if (!next.some((filter) => filter.id === prevFilter.id)) {\n filterUpdates[prevFilter.id] = null;\n }\n }\n\n if (enableNuqs) {\n debouncedSetFilterValues(filterUpdates);\n }\n return next;\n });\n },\n [\n debouncedSetFilterValues,\n filterableColumns,\n enableAdvancedFilter,\n enableNuqs,\n ]\n );\n\n const table = useReactTable({\n initialState,\n pageCount,\n state: {\n pagination,\n sorting,\n columnVisibility,\n columnOrder,\n rowSelection,\n columnFilters,\n ...controlledState,\n },\n defaultColumn: {\n ...tableProps.defaultColumn,\n enableColumnFilter: true,\n enableSorting: false,\n enableHiding: true,\n enablePinning: true,\n },\n enableRowSelection: true,\n onRowSelectionChange: setRowSelection,\n onPaginationChange,\n onSortingChange,\n onColumnFiltersChange,\n onColumnVisibilityChange: setColumnVisibility,\n onColumnOrderChange: setColumnOrder,\n getCoreRowModel: getCoreRowModel(),\n getFilteredRowModel: getFilteredRowModel(),\n getPaginationRowModel: getPaginationRowModel(),\n getSortedRowModel: getSortedRowModel(),\n getFacetedRowModel: getFacetedRowModel(),\n getFacetedUniqueValues: getFacetedUniqueValues(),\n getFacetedMinMaxValues: getFacetedMinMaxValues(),\n meta: {\n ...tableProps.meta,\n queryKeys: {\n page: pageKey,\n perPage: perPageKey,\n sort: sortKey,\n filters: filtersKey,\n joinOperator: joinOperatorKey,\n },\n },\n ...tableProps,\n columns,\n });\n\n return { table, shallow, debounceMs, throttleMs };\n}\n"],"names":["PAGE_KEY","PER_PAGE_KEY","SORT_KEY","FILTERS_KEY","JOIN_OPERATOR_KEY","ARRAY_SEPARATOR","DEBOUNCE_MS","THROTTLE_MS","useDataTable","props","columns","pageCount","initialState","queryKeys","history","debounceMs","throttleMs","clearOnDefault","enableAdvancedFilter","scroll","shallow","startTransition","enableNuqs","controlledState","tableProps","pageKey","perPageKey","sortKey","filtersKey","joinOperatorKey","queryStateOptions","React","rowSelection","setRowSelection","columnVisibility","setColumnVisibility","columnOrder","setColumnOrder","page","setPage","useQueryState","parseAsInteger","perPage","setPerPage","pagination","onPaginationChange","updaterOrValue","newPagination","columnIds","column","sorting","setSorting","getSortingStateParser","onSortingChange","newSorting","filterableColumns","filterParsers","acc","parseAsArrayOf","parseAsString","filterValues","setFilterValues","useQueryStates","debouncedSetFilterValues","useDebouncedCallback","values","initialColumnFilters","filters","key","value","isMultiSelect","col","processedValue","columnFilters","setColumnFilters","onColumnFiltersChange","prev","next","filterUpdates","filter","prevFilter","useReactTable","getCoreRowModel","getFilteredRowModel","getPaginationRowModel","getSortedRowModel","getFacetedRowModel","getFacetedUniqueValues","getFacetedMinMaxValues"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use-data-table.d.ts","sourceRoot":"","sources":["../../../../../../src/hooks/use-data-table.ts"],"names":[],"mappings":"AAIA,OAAO,EAaL,KAAK,YAAY,EACjB,KAAK,UAAU,EAIhB,MAAM,uBAAuB,CAAC;AAU/B,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAI/B,OAAO,KAAK,EAAE,kBAAkB,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAWxE,UAAU,iBAAiB,CAAC,KAAK,CAC/B,SAAQ,IAAI,CACV,YAAY,CAAC,KAAK,CAAC,EAGnB,iBAAiB,CAClB;IACD,YAAY,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,SAAS,CAAC,GAAG;QACpD,OAAO,CAAC,EAAE,kBAAkB,CAAC,KAAK,CAAC,EAAE,CAAC;KACvC,CAAC;IACF,SAAS,CAAC,EAAE,OAAO,CAAC,SAAS,CAAC,CAAC;IAC/B,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC7B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,eAAe,CAAC,EAAE,KAAK,CAAC,uBAAuB,CAAC;IAChD,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAED,wBAAgB,YAAY,CAAC,KAAK,EAAE,KAAK,EAAE,iBAAiB,CAAC,KAAK,CAAC;;;;;
|
|
1
|
+
{"version":3,"file":"use-data-table.d.ts","sourceRoot":"","sources":["../../../../../../src/hooks/use-data-table.ts"],"names":[],"mappings":"AAIA,OAAO,EAaL,KAAK,YAAY,EACjB,KAAK,UAAU,EAIhB,MAAM,uBAAuB,CAAC;AAU/B,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAI/B,OAAO,KAAK,EAAE,kBAAkB,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAWxE,UAAU,iBAAiB,CAAC,KAAK,CAC/B,SAAQ,IAAI,CACV,YAAY,CAAC,KAAK,CAAC,EAGnB,iBAAiB,CAClB;IACD,YAAY,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,SAAS,CAAC,GAAG;QACpD,OAAO,CAAC,EAAE,kBAAkB,CAAC,KAAK,CAAC,EAAE,CAAC;KACvC,CAAC;IACF,SAAS,CAAC,EAAE,OAAO,CAAC,SAAS,CAAC,CAAC;IAC/B,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC7B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,eAAe,CAAC,EAAE,KAAK,CAAC,uBAAuB,CAAC;IAChD,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAED,wBAAgB,YAAY,CAAC,KAAK,EAAE,KAAK,EAAE,iBAAiB,CAAC,KAAK,CAAC;;;;;EAgSlE"}
|