next-data-kit 9.5.0 → 9.6.0

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.
@@ -116,6 +116,13 @@ var useDataKit = (props) => {
116
116
  const mounted = useRef(true);
117
117
  const fetchIdRef = useRef(0);
118
118
  const debounceTimerRef = useRef(null);
119
+ const hasInitializedFromUrl = useRef(false);
120
+ const isInitialMount = useRef(true);
121
+ const initialPageRef = useRef(initialPage);
122
+ const initialLimitRef = useRef(initialLimit);
123
+ const initialSortsRef = useRef(initialSorts);
124
+ const initialFilterRef = useRef(initialFilter);
125
+ const initialQueryRef = useRef(initialQuery);
119
126
  const actionRef = useRef(action);
120
127
  const onSuccessRef = useRef(onSuccess);
121
128
  const onErrorRef = useRef(onError);
@@ -274,31 +281,38 @@ var useDataKit = (props) => {
274
281
  }, [initialPage, initialLimit, initialSorts, initialFilter, initialQuery]);
275
282
  useEffect(() => {
276
283
  if (memoryMode !== "search-params" || typeof window === "undefined") return;
277
- const urlState = parseUrlParams(window.location.search);
278
- if (Object.keys(urlState).length > 0) {
279
- if (urlState.page) setPageState(urlState.page);
280
- if (urlState.limit) setLimitState(urlState.limit);
281
- if (urlState.sorts) setSortsState(urlState.sorts);
282
- if (urlState.filter) {
283
- setFilterState((prev) => ({ ...prev, ...urlState.filter }));
284
- setDebouncedFilter((prev) => ({ ...prev, ...urlState.filter }));
284
+ if (!hasInitializedFromUrl.current) {
285
+ hasInitializedFromUrl.current = true;
286
+ const urlState = parseUrlParams(window.location.search);
287
+ if (Object.keys(urlState).length > 0) {
288
+ if (urlState.page) setPageState(urlState.page);
289
+ if (urlState.limit) setLimitState(urlState.limit);
290
+ if (urlState.sorts) setSortsState(urlState.sorts);
291
+ if (urlState.filter) {
292
+ setFilterState((prev) => ({ ...prev, ...urlState.filter }));
293
+ setDebouncedFilter((prev) => ({ ...prev, ...urlState.filter }));
294
+ }
295
+ if (urlState.query) setQueryState((prev) => ({ ...prev, ...urlState.query }));
285
296
  }
286
- if (urlState.query) setQueryState((prev) => ({ ...prev, ...urlState.query }));
287
297
  }
288
298
  const handlePopState = () => {
289
299
  const newUrlState = parseUrlParams(window.location.search);
290
- setPageState(newUrlState.page ?? initialPage);
291
- setLimitState(newUrlState.limit ?? initialLimit);
292
- setSortsState(newUrlState.sorts ?? initialSorts);
293
- setFilterState({ ...initialFilter, ...newUrlState.filter });
294
- setDebouncedFilter({ ...initialFilter, ...newUrlState.filter });
295
- setQueryState({ ...initialQuery, ...newUrlState.query });
300
+ setPageState(newUrlState.page ?? initialPageRef.current);
301
+ setLimitState(newUrlState.limit ?? initialLimitRef.current);
302
+ setSortsState(newUrlState.sorts ?? initialSortsRef.current);
303
+ setFilterState({ ...initialFilterRef.current, ...newUrlState.filter });
304
+ setDebouncedFilter({ ...initialFilterRef.current, ...newUrlState.filter });
305
+ setQueryState({ ...initialQueryRef.current, ...newUrlState.query });
296
306
  };
297
307
  window.addEventListener("popstate", handlePopState);
298
308
  return () => window.removeEventListener("popstate", handlePopState);
299
- }, [memoryMode, initialPage, initialLimit, initialSorts, initialFilter, initialQuery]);
309
+ }, [memoryMode]);
300
310
  useEffect(() => {
301
311
  if (memoryMode !== "search-params" || typeof window === "undefined") return;
312
+ if (isInitialMount.current) {
313
+ isInitialMount.current = false;
314
+ return;
315
+ }
302
316
  const params = stateToUrlParams({ page, limit, sorts, filter, query });
303
317
  const newSearch = params.toString();
304
318
  const currentSearch = window.location.search.slice(1);
@@ -354,5 +368,5 @@ var useDataKit = (props) => {
354
368
  };
355
369
 
356
370
  export { cn, debounce, formatNumber, getColumnValue, getNextSortValue, getSortValue, keyToSortEntries, sortEntriesToKey, throttle, useDataKit };
357
- //# sourceMappingURL=chunk-5WNOUBGK.js.map
358
- //# sourceMappingURL=chunk-5WNOUBGK.js.map
371
+ //# sourceMappingURL=chunk-4GSA6NBE.js.map
372
+ //# sourceMappingURL=chunk-4GSA6NBE.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/client/utils/cn.ts","../src/client/utils/index.ts","../src/client/hooks/useDataKit.ts"],"names":["filters","props"],"mappings":"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","file":"chunk-4GSA6NBE.js","sourcesContent":["'use client';\n\ntype ClassPrimitive = string | number | boolean | null | undefined;\ntype ClassDictionary = Record<string, boolean | undefined | null>;\ntype ClassArray = ClassValue[];\nexport type ClassValue = ClassPrimitive | ClassDictionary | ClassArray;\n\nconst toClassString = (input: ClassValue): string => {\n if (!input) return '';\n\n if (typeof input === 'string' || typeof input === 'number') return String(input);\n\n if (Array.isArray(input)) {\n return input.map(toClassString).filter(Boolean).join(' ');\n }\n\n if (typeof input === 'object') {\n return Object.entries(input)\n .filter(([, value]) => Boolean(value))\n .map(([key]) => key)\n .join(' ');\n }\n\n return '';\n};\n\n/**\n * Minimal `cn` helper (shadcn-style) without external deps.\n */\nexport const cn = (...inputs: ClassValue[]): string => inputs.map(toClassString).filter(Boolean).join(' ');\n","/**\n * next-data-kit - Utility Functions\n *\n * Helper utilities for client-side operations.\n */\n\nimport type { TDataKitColumn, TSortEntry } from '../../types';\n\nexport { cn, type ClassValue } from './cn';\n\n\n/**\n * Get the value from an item using a column accessor\n */\nexport const getColumnValue = <T>(item: T, column: TDataKitColumn<T>): unknown => {\n const { accessor } = column;\n return typeof accessor === 'function' ? accessor(item) : item[accessor as keyof T];\n};\n\n/**\n * Get the sort value for a column\n */\nexport const getSortValue = (sorts: TSortEntry[], path: string): 1 | -1 | null => {\n const sort = sorts.find((s) => s.path === path);\n return sort?.value ?? null;\n};\n\n/**\n * Get the next sort value in the cycle: null -> 1 -> -1 -> null\n */\nexport const getNextSortValue = (current: 1 | -1 | null): 1 | -1 | null => {\n if (current === null) return 1;\n if (current === 1) return -1;\n return null;\n};\n\n\n/**\n * Format a number with commas\n */\nexport const formatNumber = (num: number): string => num.toLocaleString();\n\n\n/**\n * Debounce a function\n */\nexport const debounce = <T extends (...args: unknown[]) => unknown>(\n fn: T,\n delay: number\n): ((...args: Parameters<T>) => void) => {\n let timeoutId: ReturnType<typeof setTimeout>;\n return (...args: Parameters<T>) => {\n clearTimeout(timeoutId);\n timeoutId = setTimeout(() => fn(...args), delay);\n };\n};\n\n/**\n * Throttle a function\n */\nexport const throttle = <T extends (...args: unknown[]) => unknown>(\n fn: T,\n limit: number\n): ((...args: Parameters<T>) => void) => {\n let inThrottle = false;\n return (...args: Parameters<T>) => {\n if (!inThrottle) {\n fn(...args);\n inThrottle = true;\n setTimeout(() => { inThrottle = false; }, limit);\n }\n };\n};\n\n\n/**\n * Create a stable object key from sort entries\n */\nexport const sortEntriesToKey = (sorts: TSortEntry[]): string =>\n sorts.map((s) => `${s.path}:${s.value}`).join(',');\n\n/**\n * Parse a sort key back to sort entries\n */\nexport const keyToSortEntries = (key: string): TSortEntry[] => {\n if (!key) return [];\n return key.split(',').map((part) => {\n const [path, value] = part.split(':');\n return { path: path ?? '', value: parseInt(value ?? '1', 10) as 1 | -1 };\n });\n};\n\n\n/**\n * Parse URL search params into tabler state\n */\nexport const parseUrlParams = (search: string): {\n page?: number;\n limit?: number;\n sorts?: TSortEntry[];\n filter?: Record<string, unknown>;\n query?: Record<string, unknown>;\n} => {\n const params = new URLSearchParams(search);\n const state: ReturnType<typeof parseUrlParams> = {};\n\n // ** Page\n const page = params.get('page');\n if (page) state.page = parseInt(page, 10);\n\n // ** Limit\n const limit = params.get('limit');\n if (limit) state.limit = parseInt(limit, 10);\n\n // ** Sorts\n const sort = params.get('sort');\n if (sort) state.sorts = keyToSortEntries(sort);\n\n // ** Filter (f_key) and Query (q_key)\n const filter: Record<string, unknown> = {};\n const query: Record<string, unknown> = {};\n\n params.forEach((value, key) => {\n if (key.startsWith('f_')) filter[key.slice(2)] = value;\n else if (key.startsWith('q_')) query[key.slice(2)] = value;\n });\n\n if (Object.keys(filter).length > 0) state.filter = filter;\n if (Object.keys(query).length > 0) state.query = query;\n\n return state;\n};\n\n/**\n * Convert tabler state to URL search params\n */\nexport const stateToUrlParams = (state: {\n page?: number;\n limit?: number;\n sorts?: TSortEntry[];\n filter?: Record<string, unknown>;\n query?: Record<string, unknown>;\n}): URLSearchParams => {\n const params = new URLSearchParams();\n\n if (state.page && state.page > 1) params.set('page', state.page.toString());\n if (state.limit) params.set('limit', state.limit.toString());\n if (state.sorts && state.sorts.length > 0) params.set('sort', sortEntriesToKey(state.sorts));\n\n if (state.filter) {\n Object.entries(state.filter).forEach(([key, value]) => {\n if (value !== undefined && value !== null && value !== '') {\n params.set(`f_${key}`, String(value));\n }\n });\n }\n\n if (state.query) {\n Object.entries(state.query).forEach(([key, value]) => {\n if (value !== undefined && value !== null && value !== '') {\n params.set(`q_${key}`, String(value));\n }\n });\n }\n\n return params;\n};\n","/**\n * next-data-kit - useDataKit Hook\n *\n * React hook for managing next-data-kit state and actions.\n */\n\n'use client';\n\nimport { useState, useCallback, useEffect, useRef } from 'react';\nimport type { TDataKitInput, TDataKitResult, TUseDataKitOptions, TSortEntry, TUseDataKitReturn, TFilterConfig } from '../../types';\nimport { parseUrlParams, stateToUrlParams } from '../utils';\n\nexport const useDataKit = <T = unknown, R = unknown>(props: Readonly<TUseDataKitOptions<T, R>>): TUseDataKitReturn<T, R> => {\n\t// ** Deconstruct Props\n\tconst { initial = {}, memory: memoryMode = 'memory', filters, action, onSuccess, onError, autoFetch = true, debounce: debounceDelay = 300 } = props;\n\n\tconst { page: initialPage = 1, limit: initialLimit = 10, sorts: initialSorts = [], filter: initialFilter = {}, query: initialQuery = {} } = initial;\n\n\t// ** State\n\tconst [page, setPageState] = useState(initialPage);\n\tconst [limit, setLimitState] = useState(initialLimit);\n\tconst [sorts, setSortsState] = useState<TSortEntry[]>(initialSorts);\n\tconst [filter, setFilterState] = useState<Record<string, unknown>>(initialFilter);\n\tconst [debouncedFilter, setDebouncedFilter] = useState<Record<string, unknown>>(initialFilter);\n\tconst [query, setQueryState] = useState<Record<string, unknown>>(initialQuery);\n\tconst [isLoading, setIsLoading] = useState(false);\n\tconst [error, setError] = useState<Error | null>(null);\n\tconst [items, setItems] = useState<R[]>([]);\n\tconst [total, setTotal] = useState(0);\n\n\t// ** Refs\n\tconst mounted = useRef(true);\n\tconst fetchIdRef = useRef(0);\n\tconst debounceTimerRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n\tconst hasInitializedFromUrl = useRef(false);\n\tconst isInitialMount = useRef(true);\n\n\t// ** Refs for initial values to prevent object reference changes from triggering effects\n\tconst initialPageRef = useRef(initialPage);\n\tconst initialLimitRef = useRef(initialLimit);\n\tconst initialSortsRef = useRef(initialSorts);\n\tconst initialFilterRef = useRef(initialFilter);\n\tconst initialQueryRef = useRef(initialQuery);\n\n\t// ** Refs for props to prevent infinite loops and stale closures\n\tconst actionRef = useRef(action);\n\tconst onSuccessRef = useRef(onSuccess);\n\tconst onErrorRef = useRef(onError);\n\tconst filtersRef = useRef(filters);\n\n\t// ** Update refs on every render\n\tactionRef.current = action;\n\tonSuccessRef.current = onSuccess;\n\tonErrorRef.current = onError;\n\tfiltersRef.current = filters;\n\n\t// ** Get current input\n\tconst getInput = useCallback((): TDataKitInput<T> => {\n\t\tconst input: TDataKitInput<T> = {\n\t\t\taction: 'FETCH',\n\t\t\tpage,\n\t\t\tlimit,\n\t\t\tsorts,\n\t\t\tfilter: debouncedFilter as Record<string, string | number | boolean | null>,\n\t\t\tquery: query as Record<string, string | number | boolean>,\n\t\t};\n\n\t\tif (filtersRef.current) {\n\t\t\tinput.filterConfig = filtersRef.current.reduce<TFilterConfig>((acc, f) => {\n\t\t\t\tif (f.configuration) acc[f.id] = f.configuration;\n\t\t\t\treturn acc;\n\t\t\t}, {});\n\t\t}\n\n\t\treturn input;\n\t}, [page, limit, sorts, debouncedFilter, query]);\n\n\t// ** Fetch data\n\tconst fetchData = useCallback(async () => {\n\t\tconst fetchId = ++fetchIdRef.current;\n\t\tsetIsLoading(true);\n\t\tsetError(null);\n\n\t\ttry {\n\t\t\tconst input = getInput();\n\t\t\tconst result = (await actionRef.current(input)) as TDataKitResult<R>;\n\n\t\t\t// ** Check if this is still the latest fetch\n\t\t\tif (fetchId !== fetchIdRef.current || !mounted.current) return;\n\n\t\t\tsetItems(result.items);\n\t\t\tsetTotal(result.documentTotal);\n\t\t\tonSuccessRef.current?.(result);\n\t\t} catch (err) {\n\t\t\tif (fetchId !== fetchIdRef.current || !mounted.current) return;\n\n\t\t\tconst fetchError = err instanceof Error ? err : new Error(String(err));\n\t\t\tsetError(fetchError);\n\t\t\tonErrorRef.current?.(fetchError);\n\t\t} finally {\n\t\t\tif (fetchId === fetchIdRef.current && mounted.current) {\n\t\t\t\tsetIsLoading(false);\n\t\t\t}\n\t\t}\n\t}, [getInput]);\n\n\t// ** Debounce filter changes\n\tuseEffect(() => {\n\t\tif (debounceTimerRef.current) clearTimeout(debounceTimerRef.current);\n\n\t\tdebounceTimerRef.current = setTimeout(() => {\n\t\t\tsetDebouncedFilter(filter);\n\t\t}, debounceDelay);\n\n\t\treturn () => {\n\t\t\tif (debounceTimerRef.current) clearTimeout(debounceTimerRef.current);\n\t\t};\n\t}, [filter, debounceDelay]);\n\n\t// ** Actions\n\tconst setPage = useCallback((newPage: number) => setPageState(newPage), []);\n\n\tconst setLimit = useCallback((newLimit: number) => {\n\t\tsetLimitState(newLimit);\n\t\tsetPageState(1);\n\t}, []);\n\n\tconst setSort = useCallback((path: string, value: 1 | -1 | null, append = false) => {\n\t\tsetSortsState(prev => {\n\t\t\tif (value === null) return prev.filter(s => s.path !== path);\n\t\t\tif (!append) return [{ path, value }];\n\n\t\t\tconst existing = prev.find(s => s.path === path);\n\t\t\tif (existing) return prev.map(s => (s.path === path ? { ...s, value } : s));\n\t\t\treturn [...prev, { path, value }];\n\t\t});\n\t}, []);\n\n\tconst setSorts = useCallback((newSorts: TSortEntry[]) => setSortsState(newSorts), []);\n\n\tconst setFilter = useCallback((key: string, value: unknown) => {\n\t\tsetFilterState(prev => ({ ...prev, [key]: value }));\n\t\tsetPageState(1);\n\t}, []);\n\n\tconst setFilters = useCallback((filters: Record<string, unknown>) => {\n\t\tsetFilterState(prev => ({ ...prev, ...filters }));\n\t\tsetPageState(1);\n\t}, []);\n\n\tconst clearFilters = useCallback(() => {\n\t\tsetFilterState({});\n\t\tsetPageState(1);\n\t}, []);\n\n\tconst setQuery = useCallback((key: string, value: unknown) => {\n\t\tsetQueryState(prev => ({ ...prev, [key]: value }));\n\t\tsetPageState(1);\n\t}, []);\n\n\tconst refresh = useCallback(async () => {\n\t\tawait fetchData();\n\t}, [fetchData]);\n\n\t// ** Item mutations (optional helpers)\n\tconst setItemsAction = useCallback((nextItems: R[]) => {\n\t\tsetItems(nextItems);\n\t}, []);\n\n\tconst setItemAt = useCallback((index: number, item: R) => {\n\t\tsetItems(prev => {\n\t\t\tif (index < 0 || index >= prev.length) return prev;\n\t\t\tconst next = [...prev];\n\t\t\tnext[index] = item;\n\t\t\treturn next;\n\t\t});\n\t}, []);\n\n\tconst itemUpdate = useCallback((props: { index: number; data: Partial<R> } | { id: string | number; data: Partial<R> }) => {\n\t\tsetItems(prev => {\n\t\t\tif ('index' in props) {\n\t\t\t\t// Update by index\n\t\t\t\tconst { index, data } = props;\n\t\t\t\tif (index < 0 || index >= prev.length) return prev;\n\t\t\t\tconst next = [...prev];\n\t\t\t\tnext[index] = { ...next[index], ...data } as R;\n\t\t\t\treturn next;\n\t\t\t} else {\n\t\t\t\t// Update by id\n\t\t\t\tconst { id, data } = props;\n\t\t\t\tconst index = prev.findIndex((item) => {\n\t\t\t\t\tconst itemWithId = item as R & { id?: string | number };\n\t\t\t\t\treturn itemWithId.id === id;\n\t\t\t\t});\n\t\t\t\tif (index === -1) return prev;\n\t\t\t\tconst next = [...prev];\n\t\t\t\tnext[index] = { ...next[index], ...data } as R;\n\t\t\t\treturn next;\n\t\t\t}\n\t\t});\n\t}, []);\n\n\tconst deleteItemAt = useCallback((index: number) => {\n\t\tsetItems(prev => prev.filter((_, i) => i !== index));\n\t}, []);\n\n\tconst itemDelete = useCallback((props: { index: number } | { id: string | number }) => {\n\t\tsetItems(prev => {\n\t\t\tif ('index' in props) {\n\t\t\t\t// Delete by index\n\t\t\t\tconst { index } = props;\n\t\t\t\tif (index < 0 || index >= prev.length) return prev;\n\t\t\t\treturn prev.filter((_, i) => i !== index);\n\t\t\t} else {\n\t\t\t\t// Delete by id\n\t\t\t\tconst { id } = props;\n\t\t\t\treturn prev.filter((item) => {\n\t\t\t\t\tconst itemWithId = item as R & { id?: string | number };\n\t\t\t\t\treturn itemWithId.id !== id;\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\t}, []);\n\n\tconst itemPush = useCallback((item: R, position: 0 | 1 = 1) => {\n\t\tsetItems(prev => (position === 0 ? [item, ...prev] : [...prev, item]));\n\t}, []);\n\n\tconst deleteBulk = useCallback((itemsToDelete: R[]) => {\n\t\tif (itemsToDelete.length === 0) return;\n\t\tconst toDelete = new Set(itemsToDelete);\n\t\tsetItems(prev => prev.filter(it => !toDelete.has(it)));\n\t}, []);\n\n\tconst reset = useCallback(() => {\n\t\tsetPageState(initialPage);\n\t\tsetLimitState(initialLimit);\n\t\tsetSortsState(initialSorts);\n\t\tsetFilterState(initialFilter);\n\t\tsetDebouncedFilter(initialFilter);\n\t\tsetQueryState(initialQuery);\n\t}, [initialPage, initialLimit, initialSorts, initialFilter, initialQuery]);\n\n\t// ** Sync with URL if memoryMode is 'search-params'\n\tuseEffect(() => {\n\t\tif (memoryMode !== 'search-params' || typeof window === 'undefined') return;\n\n\t\t// ** Initial load from URL - only run once\n\t\tif (!hasInitializedFromUrl.current) {\n\t\t\thasInitializedFromUrl.current = true;\n\t\t\tconst urlState = parseUrlParams(window.location.search);\n\n\t\t\tif (Object.keys(urlState).length > 0) {\n\t\t\t\tif (urlState.page) setPageState(urlState.page);\n\t\t\t\tif (urlState.limit) setLimitState(urlState.limit);\n\t\t\t\tif (urlState.sorts) setSortsState(urlState.sorts);\n\t\t\t\tif (urlState.filter) {\n\t\t\t\t\tsetFilterState(prev => ({ ...prev, ...urlState.filter }));\n\t\t\t\t\tsetDebouncedFilter(prev => ({ ...prev, ...urlState.filter }));\n\t\t\t\t}\n\t\t\t\tif (urlState.query) setQueryState(prev => ({ ...prev, ...urlState.query }));\n\t\t\t}\n\t\t}\n\n\t\t// ** Listen for popstate (back/forward)\n\t\tconst handlePopState = () => {\n\t\t\tconst newUrlState = parseUrlParams(window.location.search);\n\n\t\t\tsetPageState(newUrlState.page ?? initialPageRef.current);\n\t\t\tsetLimitState(newUrlState.limit ?? initialLimitRef.current);\n\t\t\tsetSortsState(newUrlState.sorts ?? initialSortsRef.current);\n\t\t\tsetFilterState({ ...initialFilterRef.current, ...newUrlState.filter });\n\t\t\tsetDebouncedFilter({ ...initialFilterRef.current, ...newUrlState.filter });\n\t\t\tsetQueryState({ ...initialQueryRef.current, ...newUrlState.query });\n\t\t};\n\n\t\twindow.addEventListener('popstate', handlePopState);\n\t\treturn () => window.removeEventListener('popstate', handlePopState);\n\t}, [memoryMode]);\n\n\t// ** Update URL when state changes\n\tuseEffect(() => {\n\t\tif (memoryMode !== 'search-params' || typeof window === 'undefined') return;\n\n\t\t// ** Skip URL update on initial mount to prevent loop with initial URL read\n\t\tif (isInitialMount.current) {\n\t\t\tisInitialMount.current = false;\n\t\t\treturn;\n\t\t}\n\n\t\tconst params = stateToUrlParams({ page, limit, sorts, filter, query });\n\t\tconst newSearch = params.toString();\n\t\tconst currentSearch = window.location.search.slice(1);\n\n\t\tif (newSearch !== currentSearch) {\n\t\t\tconst newUrl = newSearch ? `?${newSearch}` : window.location.pathname;\n\t\t\twindow.history.pushState(null, '', newUrl);\n\t\t}\n\t}, [page, limit, sorts, filter, query, memoryMode]);\n\n\t// ** Auto-fetch on mount and when dependencies change\n\tuseEffect(() => {\n\t\tif (autoFetch) fetchData();\n\t}, [page, limit, sorts, debouncedFilter, query, autoFetch, fetchData]);\n\n\t// ** Cleanup\n\tuseEffect(() => {\n\t\tmounted.current = true;\n\t\treturn () => {\n\t\t\tmounted.current = false;\n\t\t};\n\t}, []);\n\n\t// ** Calculate hasNextPage\n\tconst hasNextPage = page * limit < total;\n\n\treturn {\n\t\tpage,\n\t\tlimit,\n\t\tsorts,\n\t\tfilter,\n\t\tfilterConfig: filters?.reduce<TFilterConfig>((acc, f) => {\n\t\t\tif (f.configuration) acc[f.id] = f.configuration;\n\t\t\treturn acc;\n\t\t}, {}),\n\t\tquery,\n\t\titems,\n\t\ttotal,\n\t\tstate: { isLoading, error, hasNextPage },\n\t\tactions: {\n\t\t\tsetPage,\n\t\t\tsetLimit,\n\t\t\tsetSort,\n\t\t\tsetSorts,\n\t\t\tsetFilter,\n\t\t\tsetFilters,\n\t\t\tclearFilters,\n\t\t\tsetQuery,\n\t\t\trefresh,\n\t\t\treset,\n\t\t\tgetInput,\n\t\t\tsetItems: setItemsAction,\n\t\t\tsetItemAt,\n\t\t\titemUpdate,\n\t\t\tdeleteItemAt,\n\t\t\titemDelete,\n\t\t\titemPush,\n\t\t\tdeleteBulk,\n\t\t},\n\t};\n};\n\nexport type { TUseDataKitOptions };\n"]}
@@ -118,6 +118,13 @@ var useDataKit = (props) => {
118
118
  const mounted = react.useRef(true);
119
119
  const fetchIdRef = react.useRef(0);
120
120
  const debounceTimerRef = react.useRef(null);
121
+ const hasInitializedFromUrl = react.useRef(false);
122
+ const isInitialMount = react.useRef(true);
123
+ const initialPageRef = react.useRef(initialPage);
124
+ const initialLimitRef = react.useRef(initialLimit);
125
+ const initialSortsRef = react.useRef(initialSorts);
126
+ const initialFilterRef = react.useRef(initialFilter);
127
+ const initialQueryRef = react.useRef(initialQuery);
121
128
  const actionRef = react.useRef(action);
122
129
  const onSuccessRef = react.useRef(onSuccess);
123
130
  const onErrorRef = react.useRef(onError);
@@ -276,31 +283,38 @@ var useDataKit = (props) => {
276
283
  }, [initialPage, initialLimit, initialSorts, initialFilter, initialQuery]);
277
284
  react.useEffect(() => {
278
285
  if (memoryMode !== "search-params" || typeof window === "undefined") return;
279
- const urlState = parseUrlParams(window.location.search);
280
- if (Object.keys(urlState).length > 0) {
281
- if (urlState.page) setPageState(urlState.page);
282
- if (urlState.limit) setLimitState(urlState.limit);
283
- if (urlState.sorts) setSortsState(urlState.sorts);
284
- if (urlState.filter) {
285
- setFilterState((prev) => ({ ...prev, ...urlState.filter }));
286
- setDebouncedFilter((prev) => ({ ...prev, ...urlState.filter }));
286
+ if (!hasInitializedFromUrl.current) {
287
+ hasInitializedFromUrl.current = true;
288
+ const urlState = parseUrlParams(window.location.search);
289
+ if (Object.keys(urlState).length > 0) {
290
+ if (urlState.page) setPageState(urlState.page);
291
+ if (urlState.limit) setLimitState(urlState.limit);
292
+ if (urlState.sorts) setSortsState(urlState.sorts);
293
+ if (urlState.filter) {
294
+ setFilterState((prev) => ({ ...prev, ...urlState.filter }));
295
+ setDebouncedFilter((prev) => ({ ...prev, ...urlState.filter }));
296
+ }
297
+ if (urlState.query) setQueryState((prev) => ({ ...prev, ...urlState.query }));
287
298
  }
288
- if (urlState.query) setQueryState((prev) => ({ ...prev, ...urlState.query }));
289
299
  }
290
300
  const handlePopState = () => {
291
301
  const newUrlState = parseUrlParams(window.location.search);
292
- setPageState(newUrlState.page ?? initialPage);
293
- setLimitState(newUrlState.limit ?? initialLimit);
294
- setSortsState(newUrlState.sorts ?? initialSorts);
295
- setFilterState({ ...initialFilter, ...newUrlState.filter });
296
- setDebouncedFilter({ ...initialFilter, ...newUrlState.filter });
297
- setQueryState({ ...initialQuery, ...newUrlState.query });
302
+ setPageState(newUrlState.page ?? initialPageRef.current);
303
+ setLimitState(newUrlState.limit ?? initialLimitRef.current);
304
+ setSortsState(newUrlState.sorts ?? initialSortsRef.current);
305
+ setFilterState({ ...initialFilterRef.current, ...newUrlState.filter });
306
+ setDebouncedFilter({ ...initialFilterRef.current, ...newUrlState.filter });
307
+ setQueryState({ ...initialQueryRef.current, ...newUrlState.query });
298
308
  };
299
309
  window.addEventListener("popstate", handlePopState);
300
310
  return () => window.removeEventListener("popstate", handlePopState);
301
- }, [memoryMode, initialPage, initialLimit, initialSorts, initialFilter, initialQuery]);
311
+ }, [memoryMode]);
302
312
  react.useEffect(() => {
303
313
  if (memoryMode !== "search-params" || typeof window === "undefined") return;
314
+ if (isInitialMount.current) {
315
+ isInitialMount.current = false;
316
+ return;
317
+ }
304
318
  const params = stateToUrlParams({ page, limit, sorts, filter, query });
305
319
  const newSearch = params.toString();
306
320
  const currentSearch = window.location.search.slice(1);
@@ -365,5 +379,5 @@ exports.keyToSortEntries = keyToSortEntries;
365
379
  exports.sortEntriesToKey = sortEntriesToKey;
366
380
  exports.throttle = throttle;
367
381
  exports.useDataKit = useDataKit;
368
- //# sourceMappingURL=chunk-FDSJZI3C.cjs.map
369
- //# sourceMappingURL=chunk-FDSJZI3C.cjs.map
382
+ //# sourceMappingURL=chunk-A45O6PCJ.cjs.map
383
+ //# sourceMappingURL=chunk-A45O6PCJ.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/client/utils/cn.ts","../src/client/utils/index.ts","../src/client/hooks/useDataKit.ts"],"names":["useState","useRef","useCallback","useEffect","filters","props"],"mappings":"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","file":"chunk-A45O6PCJ.cjs","sourcesContent":["'use client';\n\ntype ClassPrimitive = string | number | boolean | null | undefined;\ntype ClassDictionary = Record<string, boolean | undefined | null>;\ntype ClassArray = ClassValue[];\nexport type ClassValue = ClassPrimitive | ClassDictionary | ClassArray;\n\nconst toClassString = (input: ClassValue): string => {\n if (!input) return '';\n\n if (typeof input === 'string' || typeof input === 'number') return String(input);\n\n if (Array.isArray(input)) {\n return input.map(toClassString).filter(Boolean).join(' ');\n }\n\n if (typeof input === 'object') {\n return Object.entries(input)\n .filter(([, value]) => Boolean(value))\n .map(([key]) => key)\n .join(' ');\n }\n\n return '';\n};\n\n/**\n * Minimal `cn` helper (shadcn-style) without external deps.\n */\nexport const cn = (...inputs: ClassValue[]): string => inputs.map(toClassString).filter(Boolean).join(' ');\n","/**\n * next-data-kit - Utility Functions\n *\n * Helper utilities for client-side operations.\n */\n\nimport type { TDataKitColumn, TSortEntry } from '../../types';\n\nexport { cn, type ClassValue } from './cn';\n\n\n/**\n * Get the value from an item using a column accessor\n */\nexport const getColumnValue = <T>(item: T, column: TDataKitColumn<T>): unknown => {\n const { accessor } = column;\n return typeof accessor === 'function' ? accessor(item) : item[accessor as keyof T];\n};\n\n/**\n * Get the sort value for a column\n */\nexport const getSortValue = (sorts: TSortEntry[], path: string): 1 | -1 | null => {\n const sort = sorts.find((s) => s.path === path);\n return sort?.value ?? null;\n};\n\n/**\n * Get the next sort value in the cycle: null -> 1 -> -1 -> null\n */\nexport const getNextSortValue = (current: 1 | -1 | null): 1 | -1 | null => {\n if (current === null) return 1;\n if (current === 1) return -1;\n return null;\n};\n\n\n/**\n * Format a number with commas\n */\nexport const formatNumber = (num: number): string => num.toLocaleString();\n\n\n/**\n * Debounce a function\n */\nexport const debounce = <T extends (...args: unknown[]) => unknown>(\n fn: T,\n delay: number\n): ((...args: Parameters<T>) => void) => {\n let timeoutId: ReturnType<typeof setTimeout>;\n return (...args: Parameters<T>) => {\n clearTimeout(timeoutId);\n timeoutId = setTimeout(() => fn(...args), delay);\n };\n};\n\n/**\n * Throttle a function\n */\nexport const throttle = <T extends (...args: unknown[]) => unknown>(\n fn: T,\n limit: number\n): ((...args: Parameters<T>) => void) => {\n let inThrottle = false;\n return (...args: Parameters<T>) => {\n if (!inThrottle) {\n fn(...args);\n inThrottle = true;\n setTimeout(() => { inThrottle = false; }, limit);\n }\n };\n};\n\n\n/**\n * Create a stable object key from sort entries\n */\nexport const sortEntriesToKey = (sorts: TSortEntry[]): string =>\n sorts.map((s) => `${s.path}:${s.value}`).join(',');\n\n/**\n * Parse a sort key back to sort entries\n */\nexport const keyToSortEntries = (key: string): TSortEntry[] => {\n if (!key) return [];\n return key.split(',').map((part) => {\n const [path, value] = part.split(':');\n return { path: path ?? '', value: parseInt(value ?? '1', 10) as 1 | -1 };\n });\n};\n\n\n/**\n * Parse URL search params into tabler state\n */\nexport const parseUrlParams = (search: string): {\n page?: number;\n limit?: number;\n sorts?: TSortEntry[];\n filter?: Record<string, unknown>;\n query?: Record<string, unknown>;\n} => {\n const params = new URLSearchParams(search);\n const state: ReturnType<typeof parseUrlParams> = {};\n\n // ** Page\n const page = params.get('page');\n if (page) state.page = parseInt(page, 10);\n\n // ** Limit\n const limit = params.get('limit');\n if (limit) state.limit = parseInt(limit, 10);\n\n // ** Sorts\n const sort = params.get('sort');\n if (sort) state.sorts = keyToSortEntries(sort);\n\n // ** Filter (f_key) and Query (q_key)\n const filter: Record<string, unknown> = {};\n const query: Record<string, unknown> = {};\n\n params.forEach((value, key) => {\n if (key.startsWith('f_')) filter[key.slice(2)] = value;\n else if (key.startsWith('q_')) query[key.slice(2)] = value;\n });\n\n if (Object.keys(filter).length > 0) state.filter = filter;\n if (Object.keys(query).length > 0) state.query = query;\n\n return state;\n};\n\n/**\n * Convert tabler state to URL search params\n */\nexport const stateToUrlParams = (state: {\n page?: number;\n limit?: number;\n sorts?: TSortEntry[];\n filter?: Record<string, unknown>;\n query?: Record<string, unknown>;\n}): URLSearchParams => {\n const params = new URLSearchParams();\n\n if (state.page && state.page > 1) params.set('page', state.page.toString());\n if (state.limit) params.set('limit', state.limit.toString());\n if (state.sorts && state.sorts.length > 0) params.set('sort', sortEntriesToKey(state.sorts));\n\n if (state.filter) {\n Object.entries(state.filter).forEach(([key, value]) => {\n if (value !== undefined && value !== null && value !== '') {\n params.set(`f_${key}`, String(value));\n }\n });\n }\n\n if (state.query) {\n Object.entries(state.query).forEach(([key, value]) => {\n if (value !== undefined && value !== null && value !== '') {\n params.set(`q_${key}`, String(value));\n }\n });\n }\n\n return params;\n};\n","/**\n * next-data-kit - useDataKit Hook\n *\n * React hook for managing next-data-kit state and actions.\n */\n\n'use client';\n\nimport { useState, useCallback, useEffect, useRef } from 'react';\nimport type { TDataKitInput, TDataKitResult, TUseDataKitOptions, TSortEntry, TUseDataKitReturn, TFilterConfig } from '../../types';\nimport { parseUrlParams, stateToUrlParams } from '../utils';\n\nexport const useDataKit = <T = unknown, R = unknown>(props: Readonly<TUseDataKitOptions<T, R>>): TUseDataKitReturn<T, R> => {\n\t// ** Deconstruct Props\n\tconst { initial = {}, memory: memoryMode = 'memory', filters, action, onSuccess, onError, autoFetch = true, debounce: debounceDelay = 300 } = props;\n\n\tconst { page: initialPage = 1, limit: initialLimit = 10, sorts: initialSorts = [], filter: initialFilter = {}, query: initialQuery = {} } = initial;\n\n\t// ** State\n\tconst [page, setPageState] = useState(initialPage);\n\tconst [limit, setLimitState] = useState(initialLimit);\n\tconst [sorts, setSortsState] = useState<TSortEntry[]>(initialSorts);\n\tconst [filter, setFilterState] = useState<Record<string, unknown>>(initialFilter);\n\tconst [debouncedFilter, setDebouncedFilter] = useState<Record<string, unknown>>(initialFilter);\n\tconst [query, setQueryState] = useState<Record<string, unknown>>(initialQuery);\n\tconst [isLoading, setIsLoading] = useState(false);\n\tconst [error, setError] = useState<Error | null>(null);\n\tconst [items, setItems] = useState<R[]>([]);\n\tconst [total, setTotal] = useState(0);\n\n\t// ** Refs\n\tconst mounted = useRef(true);\n\tconst fetchIdRef = useRef(0);\n\tconst debounceTimerRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n\tconst hasInitializedFromUrl = useRef(false);\n\tconst isInitialMount = useRef(true);\n\n\t// ** Refs for initial values to prevent object reference changes from triggering effects\n\tconst initialPageRef = useRef(initialPage);\n\tconst initialLimitRef = useRef(initialLimit);\n\tconst initialSortsRef = useRef(initialSorts);\n\tconst initialFilterRef = useRef(initialFilter);\n\tconst initialQueryRef = useRef(initialQuery);\n\n\t// ** Refs for props to prevent infinite loops and stale closures\n\tconst actionRef = useRef(action);\n\tconst onSuccessRef = useRef(onSuccess);\n\tconst onErrorRef = useRef(onError);\n\tconst filtersRef = useRef(filters);\n\n\t// ** Update refs on every render\n\tactionRef.current = action;\n\tonSuccessRef.current = onSuccess;\n\tonErrorRef.current = onError;\n\tfiltersRef.current = filters;\n\n\t// ** Get current input\n\tconst getInput = useCallback((): TDataKitInput<T> => {\n\t\tconst input: TDataKitInput<T> = {\n\t\t\taction: 'FETCH',\n\t\t\tpage,\n\t\t\tlimit,\n\t\t\tsorts,\n\t\t\tfilter: debouncedFilter as Record<string, string | number | boolean | null>,\n\t\t\tquery: query as Record<string, string | number | boolean>,\n\t\t};\n\n\t\tif (filtersRef.current) {\n\t\t\tinput.filterConfig = filtersRef.current.reduce<TFilterConfig>((acc, f) => {\n\t\t\t\tif (f.configuration) acc[f.id] = f.configuration;\n\t\t\t\treturn acc;\n\t\t\t}, {});\n\t\t}\n\n\t\treturn input;\n\t}, [page, limit, sorts, debouncedFilter, query]);\n\n\t// ** Fetch data\n\tconst fetchData = useCallback(async () => {\n\t\tconst fetchId = ++fetchIdRef.current;\n\t\tsetIsLoading(true);\n\t\tsetError(null);\n\n\t\ttry {\n\t\t\tconst input = getInput();\n\t\t\tconst result = (await actionRef.current(input)) as TDataKitResult<R>;\n\n\t\t\t// ** Check if this is still the latest fetch\n\t\t\tif (fetchId !== fetchIdRef.current || !mounted.current) return;\n\n\t\t\tsetItems(result.items);\n\t\t\tsetTotal(result.documentTotal);\n\t\t\tonSuccessRef.current?.(result);\n\t\t} catch (err) {\n\t\t\tif (fetchId !== fetchIdRef.current || !mounted.current) return;\n\n\t\t\tconst fetchError = err instanceof Error ? err : new Error(String(err));\n\t\t\tsetError(fetchError);\n\t\t\tonErrorRef.current?.(fetchError);\n\t\t} finally {\n\t\t\tif (fetchId === fetchIdRef.current && mounted.current) {\n\t\t\t\tsetIsLoading(false);\n\t\t\t}\n\t\t}\n\t}, [getInput]);\n\n\t// ** Debounce filter changes\n\tuseEffect(() => {\n\t\tif (debounceTimerRef.current) clearTimeout(debounceTimerRef.current);\n\n\t\tdebounceTimerRef.current = setTimeout(() => {\n\t\t\tsetDebouncedFilter(filter);\n\t\t}, debounceDelay);\n\n\t\treturn () => {\n\t\t\tif (debounceTimerRef.current) clearTimeout(debounceTimerRef.current);\n\t\t};\n\t}, [filter, debounceDelay]);\n\n\t// ** Actions\n\tconst setPage = useCallback((newPage: number) => setPageState(newPage), []);\n\n\tconst setLimit = useCallback((newLimit: number) => {\n\t\tsetLimitState(newLimit);\n\t\tsetPageState(1);\n\t}, []);\n\n\tconst setSort = useCallback((path: string, value: 1 | -1 | null, append = false) => {\n\t\tsetSortsState(prev => {\n\t\t\tif (value === null) return prev.filter(s => s.path !== path);\n\t\t\tif (!append) return [{ path, value }];\n\n\t\t\tconst existing = prev.find(s => s.path === path);\n\t\t\tif (existing) return prev.map(s => (s.path === path ? { ...s, value } : s));\n\t\t\treturn [...prev, { path, value }];\n\t\t});\n\t}, []);\n\n\tconst setSorts = useCallback((newSorts: TSortEntry[]) => setSortsState(newSorts), []);\n\n\tconst setFilter = useCallback((key: string, value: unknown) => {\n\t\tsetFilterState(prev => ({ ...prev, [key]: value }));\n\t\tsetPageState(1);\n\t}, []);\n\n\tconst setFilters = useCallback((filters: Record<string, unknown>) => {\n\t\tsetFilterState(prev => ({ ...prev, ...filters }));\n\t\tsetPageState(1);\n\t}, []);\n\n\tconst clearFilters = useCallback(() => {\n\t\tsetFilterState({});\n\t\tsetPageState(1);\n\t}, []);\n\n\tconst setQuery = useCallback((key: string, value: unknown) => {\n\t\tsetQueryState(prev => ({ ...prev, [key]: value }));\n\t\tsetPageState(1);\n\t}, []);\n\n\tconst refresh = useCallback(async () => {\n\t\tawait fetchData();\n\t}, [fetchData]);\n\n\t// ** Item mutations (optional helpers)\n\tconst setItemsAction = useCallback((nextItems: R[]) => {\n\t\tsetItems(nextItems);\n\t}, []);\n\n\tconst setItemAt = useCallback((index: number, item: R) => {\n\t\tsetItems(prev => {\n\t\t\tif (index < 0 || index >= prev.length) return prev;\n\t\t\tconst next = [...prev];\n\t\t\tnext[index] = item;\n\t\t\treturn next;\n\t\t});\n\t}, []);\n\n\tconst itemUpdate = useCallback((props: { index: number; data: Partial<R> } | { id: string | number; data: Partial<R> }) => {\n\t\tsetItems(prev => {\n\t\t\tif ('index' in props) {\n\t\t\t\t// Update by index\n\t\t\t\tconst { index, data } = props;\n\t\t\t\tif (index < 0 || index >= prev.length) return prev;\n\t\t\t\tconst next = [...prev];\n\t\t\t\tnext[index] = { ...next[index], ...data } as R;\n\t\t\t\treturn next;\n\t\t\t} else {\n\t\t\t\t// Update by id\n\t\t\t\tconst { id, data } = props;\n\t\t\t\tconst index = prev.findIndex((item) => {\n\t\t\t\t\tconst itemWithId = item as R & { id?: string | number };\n\t\t\t\t\treturn itemWithId.id === id;\n\t\t\t\t});\n\t\t\t\tif (index === -1) return prev;\n\t\t\t\tconst next = [...prev];\n\t\t\t\tnext[index] = { ...next[index], ...data } as R;\n\t\t\t\treturn next;\n\t\t\t}\n\t\t});\n\t}, []);\n\n\tconst deleteItemAt = useCallback((index: number) => {\n\t\tsetItems(prev => prev.filter((_, i) => i !== index));\n\t}, []);\n\n\tconst itemDelete = useCallback((props: { index: number } | { id: string | number }) => {\n\t\tsetItems(prev => {\n\t\t\tif ('index' in props) {\n\t\t\t\t// Delete by index\n\t\t\t\tconst { index } = props;\n\t\t\t\tif (index < 0 || index >= prev.length) return prev;\n\t\t\t\treturn prev.filter((_, i) => i !== index);\n\t\t\t} else {\n\t\t\t\t// Delete by id\n\t\t\t\tconst { id } = props;\n\t\t\t\treturn prev.filter((item) => {\n\t\t\t\t\tconst itemWithId = item as R & { id?: string | number };\n\t\t\t\t\treturn itemWithId.id !== id;\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\t}, []);\n\n\tconst itemPush = useCallback((item: R, position: 0 | 1 = 1) => {\n\t\tsetItems(prev => (position === 0 ? [item, ...prev] : [...prev, item]));\n\t}, []);\n\n\tconst deleteBulk = useCallback((itemsToDelete: R[]) => {\n\t\tif (itemsToDelete.length === 0) return;\n\t\tconst toDelete = new Set(itemsToDelete);\n\t\tsetItems(prev => prev.filter(it => !toDelete.has(it)));\n\t}, []);\n\n\tconst reset = useCallback(() => {\n\t\tsetPageState(initialPage);\n\t\tsetLimitState(initialLimit);\n\t\tsetSortsState(initialSorts);\n\t\tsetFilterState(initialFilter);\n\t\tsetDebouncedFilter(initialFilter);\n\t\tsetQueryState(initialQuery);\n\t}, [initialPage, initialLimit, initialSorts, initialFilter, initialQuery]);\n\n\t// ** Sync with URL if memoryMode is 'search-params'\n\tuseEffect(() => {\n\t\tif (memoryMode !== 'search-params' || typeof window === 'undefined') return;\n\n\t\t// ** Initial load from URL - only run once\n\t\tif (!hasInitializedFromUrl.current) {\n\t\t\thasInitializedFromUrl.current = true;\n\t\t\tconst urlState = parseUrlParams(window.location.search);\n\n\t\t\tif (Object.keys(urlState).length > 0) {\n\t\t\t\tif (urlState.page) setPageState(urlState.page);\n\t\t\t\tif (urlState.limit) setLimitState(urlState.limit);\n\t\t\t\tif (urlState.sorts) setSortsState(urlState.sorts);\n\t\t\t\tif (urlState.filter) {\n\t\t\t\t\tsetFilterState(prev => ({ ...prev, ...urlState.filter }));\n\t\t\t\t\tsetDebouncedFilter(prev => ({ ...prev, ...urlState.filter }));\n\t\t\t\t}\n\t\t\t\tif (urlState.query) setQueryState(prev => ({ ...prev, ...urlState.query }));\n\t\t\t}\n\t\t}\n\n\t\t// ** Listen for popstate (back/forward)\n\t\tconst handlePopState = () => {\n\t\t\tconst newUrlState = parseUrlParams(window.location.search);\n\n\t\t\tsetPageState(newUrlState.page ?? initialPageRef.current);\n\t\t\tsetLimitState(newUrlState.limit ?? initialLimitRef.current);\n\t\t\tsetSortsState(newUrlState.sorts ?? initialSortsRef.current);\n\t\t\tsetFilterState({ ...initialFilterRef.current, ...newUrlState.filter });\n\t\t\tsetDebouncedFilter({ ...initialFilterRef.current, ...newUrlState.filter });\n\t\t\tsetQueryState({ ...initialQueryRef.current, ...newUrlState.query });\n\t\t};\n\n\t\twindow.addEventListener('popstate', handlePopState);\n\t\treturn () => window.removeEventListener('popstate', handlePopState);\n\t}, [memoryMode]);\n\n\t// ** Update URL when state changes\n\tuseEffect(() => {\n\t\tif (memoryMode !== 'search-params' || typeof window === 'undefined') return;\n\n\t\t// ** Skip URL update on initial mount to prevent loop with initial URL read\n\t\tif (isInitialMount.current) {\n\t\t\tisInitialMount.current = false;\n\t\t\treturn;\n\t\t}\n\n\t\tconst params = stateToUrlParams({ page, limit, sorts, filter, query });\n\t\tconst newSearch = params.toString();\n\t\tconst currentSearch = window.location.search.slice(1);\n\n\t\tif (newSearch !== currentSearch) {\n\t\t\tconst newUrl = newSearch ? `?${newSearch}` : window.location.pathname;\n\t\t\twindow.history.pushState(null, '', newUrl);\n\t\t}\n\t}, [page, limit, sorts, filter, query, memoryMode]);\n\n\t// ** Auto-fetch on mount and when dependencies change\n\tuseEffect(() => {\n\t\tif (autoFetch) fetchData();\n\t}, [page, limit, sorts, debouncedFilter, query, autoFetch, fetchData]);\n\n\t// ** Cleanup\n\tuseEffect(() => {\n\t\tmounted.current = true;\n\t\treturn () => {\n\t\t\tmounted.current = false;\n\t\t};\n\t}, []);\n\n\t// ** Calculate hasNextPage\n\tconst hasNextPage = page * limit < total;\n\n\treturn {\n\t\tpage,\n\t\tlimit,\n\t\tsorts,\n\t\tfilter,\n\t\tfilterConfig: filters?.reduce<TFilterConfig>((acc, f) => {\n\t\t\tif (f.configuration) acc[f.id] = f.configuration;\n\t\t\treturn acc;\n\t\t}, {}),\n\t\tquery,\n\t\titems,\n\t\ttotal,\n\t\tstate: { isLoading, error, hasNextPage },\n\t\tactions: {\n\t\t\tsetPage,\n\t\t\tsetLimit,\n\t\t\tsetSort,\n\t\t\tsetSorts,\n\t\t\tsetFilter,\n\t\t\tsetFilters,\n\t\t\tclearFilters,\n\t\t\tsetQuery,\n\t\t\trefresh,\n\t\t\treset,\n\t\t\tgetInput,\n\t\t\tsetItems: setItemsAction,\n\t\t\tsetItemAt,\n\t\t\titemUpdate,\n\t\t\tdeleteItemAt,\n\t\t\titemDelete,\n\t\t\titemPush,\n\t\t\tdeleteBulk,\n\t\t},\n\t};\n};\n\nexport type { TUseDataKitOptions };\n"]}
@@ -1,4 +1,4 @@
1
- import { cn, useDataKit } from './chunk-5WNOUBGK.js';
1
+ import { cn, useDataKit } from './chunk-4GSA6NBE.js';
2
2
  import * as React2 from 'react';
3
3
  import React2__default, { createContext, useRef, useState, useCallback, useEffect, useContext, useMemo } from 'react';
4
4
  import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
@@ -2609,5 +2609,5 @@ var DataKitInfinityInner = (props) => {
2609
2609
  var DataKitInfinity = DataKitInfinityInner;
2610
2610
 
2611
2611
  export { DataKit, DataKitInfinity, DataKitTable, DefaultDataKitContext, DefaultDataKitProvider, calculatePagination, compareValues, createDataKitContext, createSearchFilter, escapeRegex, getValueByPath, isProvided, isSafeKey, matchesExact, matchesRegexLike, normalizeSorts, useDefaultDataKitContext, usePagination, useSelection, useSelectionWithTotal };
2612
- //# sourceMappingURL=chunk-WYWJGLGD.js.map
2613
- //# sourceMappingURL=chunk-WYWJGLGD.js.map
2612
+ //# sourceMappingURL=chunk-PSMWD5AA.js.map
2613
+ //# sourceMappingURL=chunk-PSMWD5AA.js.map