mirror of
https://gitlab.com/mbugroup/lti-web-client.git
synced 2026-05-20 05:22:02 +00:00
feat: add excludeKeysFromUrl to useTableFilter parameters
This commit is contained in:
@@ -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(() => {
|
||||
|
||||
Reference in New Issue
Block a user