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.
- package/dist/{chunk-5WNOUBGK.js → chunk-4GSA6NBE.js} +32 -18
- package/dist/chunk-4GSA6NBE.js.map +1 -0
- package/dist/{chunk-FDSJZI3C.cjs → chunk-A45O6PCJ.cjs} +32 -18
- package/dist/chunk-A45O6PCJ.cjs.map +1 -0
- package/dist/{chunk-WYWJGLGD.js → chunk-PSMWD5AA.js} +3 -3
- package/dist/{chunk-WYWJGLGD.js.map → chunk-PSMWD5AA.js.map} +1 -1
- package/dist/{chunk-CGB4WIAS.cjs → chunk-YNII2J6V.cjs} +30 -30
- package/dist/{chunk-CGB4WIAS.cjs.map → chunk-YNII2J6V.cjs.map} +1 -1
- package/dist/client/hooks/useDataKit.d.ts.map +1 -1
- package/dist/client.cjs +21 -21
- package/dist/client.js +2 -2
- package/dist/index.cjs +39 -39
- package/dist/index.js +3 -3
- package/dist/internal/hooks.cjs +2 -2
- package/dist/internal/hooks.js +1 -1
- package/package.json +1 -1
- package/dist/chunk-5WNOUBGK.js.map +0 -1
- package/dist/chunk-FDSJZI3C.cjs.map +0 -1
|
@@ -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
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
if (
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
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 ??
|
|
291
|
-
setLimitState(newUrlState.limit ??
|
|
292
|
-
setSortsState(newUrlState.sorts ??
|
|
293
|
-
setFilterState({ ...
|
|
294
|
-
setDebouncedFilter({ ...
|
|
295
|
-
setQueryState({ ...
|
|
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
|
|
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-
|
|
358
|
-
//# sourceMappingURL=chunk-
|
|
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
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
if (
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
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 ??
|
|
293
|
-
setLimitState(newUrlState.limit ??
|
|
294
|
-
setSortsState(newUrlState.sorts ??
|
|
295
|
-
setFilterState({ ...
|
|
296
|
-
setDebouncedFilter({ ...
|
|
297
|
-
setQueryState({ ...
|
|
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
|
|
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-
|
|
369
|
-
//# sourceMappingURL=chunk-
|
|
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-
|
|
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-
|
|
2613
|
-
//# sourceMappingURL=chunk-
|
|
2612
|
+
//# sourceMappingURL=chunk-PSMWD5AA.js.map
|
|
2613
|
+
//# sourceMappingURL=chunk-PSMWD5AA.js.map
|