mirror of
https://gitlab.com/mbugroup/lti-web-client.git
synced 2026-05-25 15:55:48 +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>>;
|
paramMap?: Partial<Record<keyof TableFilterState<TExtra>, string>>;
|
||||||
/** If true, `toSearchParams`/`toQueryString` will omit values equal to defaults */
|
/** If true, `toSearchParams`/`toQueryString` will omit values equal to defaults */
|
||||||
omitDefaultsInUrl?: boolean;
|
omitDefaultsInUrl?: boolean;
|
||||||
|
/** Optional list of state keys that should never be serialized into the URL/query string */
|
||||||
|
excludeKeysFromUrl?: Partial<(keyof TableFilterState<TExtra>)[]>;
|
||||||
|
|
||||||
persist?: boolean;
|
persist?: boolean;
|
||||||
storeName?: string;
|
storeName?: string;
|
||||||
@@ -218,9 +220,12 @@ export function useTableFilter<TExtra extends Record<string, unknown>>(
|
|||||||
);
|
);
|
||||||
|
|
||||||
const extras = useMemo(() => {
|
const extras = useMemo(() => {
|
||||||
const { page, pageSize, ...rest } = state as TableFilterState<
|
const stateWithExtras = state as TableFilterState<Record<string, unknown>>;
|
||||||
Record<string, unknown>
|
const rest = Object.fromEntries(
|
||||||
>;
|
Object.entries(stateWithExtras).filter(
|
||||||
|
([key]) => key !== 'page' && key !== 'pageSize'
|
||||||
|
)
|
||||||
|
);
|
||||||
return rest as TExtra;
|
return rest as TExtra;
|
||||||
}, [state]);
|
}, [state]);
|
||||||
|
|
||||||
@@ -240,8 +245,13 @@ export function useTableFilter<TExtra extends Record<string, unknown>>(
|
|||||||
const baseline = options?.omitDefaultsInUrl
|
const baseline = options?.omitDefaultsInUrl
|
||||||
? (defaults as Record<string, unknown>)
|
? (defaults as Record<string, unknown>)
|
||||||
: null;
|
: null;
|
||||||
|
const excludedKeys = new Set<string>(
|
||||||
|
(options?.excludeKeysFromUrl as string[] | undefined) ?? []
|
||||||
|
);
|
||||||
|
|
||||||
for (const key of Object.keys(source)) {
|
for (const key of Object.keys(source)) {
|
||||||
|
if (excludedKeys.has(key)) continue;
|
||||||
|
|
||||||
const value = source[key];
|
const value = source[key];
|
||||||
if (value === undefined || value === null) continue;
|
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);
|
if (serialized !== null) params.set(mapped, serialized);
|
||||||
}
|
}
|
||||||
return params;
|
return params;
|
||||||
}, [state, defaults, options?.omitDefaultsInUrl, mapKey]);
|
}, [
|
||||||
|
state,
|
||||||
|
defaults,
|
||||||
|
options?.omitDefaultsInUrl,
|
||||||
|
options?.excludeKeysFromUrl,
|
||||||
|
mapKey,
|
||||||
|
]);
|
||||||
|
|
||||||
/** Build query string (prefixed with '?', or empty string if none) */
|
/** Build query string (prefixed with '?', or empty string if none) */
|
||||||
const toQueryString = useCallback(() => {
|
const toQueryString = useCallback(() => {
|
||||||
|
|||||||
Reference in New Issue
Block a user