Prevent unnecessary re-queries

This commit is contained in:
WithoutPants 2025-12-03 18:20:39 +11:00
parent 3494bfb197
commit 8ad889d68c
2 changed files with 20 additions and 5 deletions

View file

@ -1,5 +1,10 @@
import React, { useMemo } from "react";
import { IListSelect, useCachedQueryResult, useListSelect } from "./util";
import {
IListSelect,
useCachedQueryResult,
useListSelect,
useMetadataFilter,
} from "./util";
import { isFunction } from "lodash-es";
import { IHasID } from "src/utils/data";
import { useFilter } from "./FilterProvider";
@ -135,10 +140,7 @@ export const QueryResultContext = <
}, [filter, filterHook]);
// metadata filter is the effective filter with the sort, page size and page number removed
const metadataFilter = useMemo(
() => effectiveFilter.metadataInfo(),
[effectiveFilter]
);
const metadataFilter = useMetadataFilter(effectiveFilter);
const result = useResult(effectiveFilter);

View file

@ -483,6 +483,19 @@ export function useCachedQueryResult<T extends QueryResult>(
return cachedResult;
}
// used to generate a metadata info filter that only updates when necessary
export function useMetadataFilter(filter: ListFilterModel) {
const lastValue = usePrevious(filter);
return useMemo(() => {
if (!lastValue || !totalCountImpacted(lastValue!, filter)) {
return filter.metadataInfo();
}
return lastValue;
}, [filter, lastValue]);
}
export interface IQueryResultHook<
T extends QueryResult,
E extends IHasID = IHasID