From 8ad889d68c3f47ad830895a146df5089b9b509df Mon Sep 17 00:00:00 2001 From: WithoutPants <53250216+WithoutPants@users.noreply.github.com> Date: Wed, 3 Dec 2025 18:20:39 +1100 Subject: [PATCH] Prevent unnecessary re-queries --- ui/v2.5/src/components/List/ListProvider.tsx | 12 +++++++----- ui/v2.5/src/components/List/util.ts | 13 +++++++++++++ 2 files changed, 20 insertions(+), 5 deletions(-) diff --git a/ui/v2.5/src/components/List/ListProvider.tsx b/ui/v2.5/src/components/List/ListProvider.tsx index 8b4ba6c70..4e824085d 100644 --- a/ui/v2.5/src/components/List/ListProvider.tsx +++ b/ui/v2.5/src/components/List/ListProvider.tsx @@ -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); diff --git a/ui/v2.5/src/components/List/util.ts b/ui/v2.5/src/components/List/util.ts index c15c3335a..e2bd561ca 100644 --- a/ui/v2.5/src/components/List/util.ts +++ b/ui/v2.5/src/components/List/util.ts @@ -483,6 +483,19 @@ export function useCachedQueryResult( 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