feat: add excludeKeysFromUrl to useTableFilter parameters

This commit is contained in:
ValdiANS
2026-04-23 16:38:02 +07:00
parent 4d01ad7d1d
commit d8c6a90c55
+20 -4
View File
@@ -31,6 +31,8 @@ export type UseTableFilterOptions<TExtra extends Record<string, unknown>> = {
paramMap?: Partial<Record<keyof TableFilterState<TExtra>, string>>;
/** If true, `toSearchParams`/`toQueryString` will omit values equal to defaults */
omitDefaultsInUrl?: boolean;
/** Optional list of state keys that should never be serialized into the URL/query string */
excludeKeysFromUrl?: Partial<(keyof TableFilterState<TExtra>)[]>;
persist?: boolean;
storeName?: string;
@@ -218,9 +220,12 @@ export function useTableFilter<TExtra extends Record<string, unknown>>(
);
const extras = useMemo(() => {
const { page, pageSize, ...rest } = state as TableFilterState<
Record<string, unknown>
>;
const stateWithExtras = state as TableFilterState<Record<string, unknown>>;
const rest = Object.fromEntries(
Object.entries(stateWithExtras).filter(
([key]) => key !== 'page' && key !== 'pageSize'
)
);
return rest as TExtra;
}, [state]);
@@ -240,8 +245,13 @@ export function useTableFilter<TExtra extends Record<string, unknown>>(
const baseline = options?.omitDefaultsInUrl
? (defaults as Record<string, unknown>)
: null;
const excludedKeys = new Set<string>(
(options?.excludeKeysFromUrl as string[] | undefined) ?? []
);
for (const key of Object.keys(source)) {
if (excludedKeys.has(key)) continue;
const value = source[key];
if (value === undefined || value === null) continue;
@@ -260,7 +270,13 @@ export function useTableFilter<TExtra extends Record<string, unknown>>(
if (serialized !== null) params.set(mapped, serialized);
}
return params;
}, [state, defaults, options?.omitDefaultsInUrl, mapKey]);
}, [
state,
defaults,
options?.omitDefaultsInUrl,
options?.excludeKeysFromUrl,
mapKey,
]);
/** Build query string (prefixed with '?', or empty string if none) */
const toQueryString = useCallback(() => {