mirror of https://github.com/buster-so/buster.git
Update metricQueryHelpers.ts
This commit is contained in:
parent
9068ebd5d3
commit
de77bc15e3
|
@ -57,7 +57,7 @@ const getLatestVersionNumber = (queries: [readonly unknown[], IBusterMetric | un
|
||||||
const lastVersion = last(data.versions);
|
const lastVersion = last(data.versions);
|
||||||
const version = Number(lastVersion?.version_number);
|
const version = Number(lastVersion?.version_number);
|
||||||
if (!isNaN(version)) {
|
if (!isNaN(version)) {
|
||||||
latestVersion = Math.max(latestVersion, version, data.version_number);
|
latestVersion = Math.max(latestVersion, version);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -67,34 +67,38 @@ const getLatestVersionNumber = (queries: [readonly unknown[], IBusterMetric | un
|
||||||
|
|
||||||
const useGetLatestMetricVersion = ({ metricId }: { metricId: string }) => {
|
const useGetLatestMetricVersion = ({ metricId }: { metricId: string }) => {
|
||||||
const queryClient = useQueryClient();
|
const queryClient = useQueryClient();
|
||||||
const [cacheVersion, setCacheVersion] = useState(0); // To force re-renders on relevant cache changes
|
const [latestVersion, setLatestVersion] = useState<number | null>(null);
|
||||||
|
|
||||||
const memoizedKey = useMemo(() => {
|
const memoizedKey = useMemo(() => {
|
||||||
return metricsQueryKeys.metricsGetMetric(metricId, null).queryKey.slice(0, -1);
|
return metricsQueryKeys.metricsGetMetric(metricId, null).queryKey.slice(0, -1);
|
||||||
}, [metricId]);
|
}, [metricId]);
|
||||||
|
|
||||||
const subscribeMethod = useMemoizedFn((event: QueryCacheNotifyEvent) => {
|
const updateLatestVersion = useMemoizedFn(() => {
|
||||||
if (
|
|
||||||
event.type === 'updated' &&
|
|
||||||
event.query.queryKey[2] === last(memoizedKey) &&
|
|
||||||
event.query.queryKey[1] === memoizedKey[1]
|
|
||||||
) {
|
|
||||||
setCacheVersion((prev) => prev + 1);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
useEffect(() => {
|
|
||||||
const unsubscribe = queryClient.getQueryCache().subscribe(subscribeMethod);
|
|
||||||
return () => unsubscribe();
|
|
||||||
}, [memoizedKey]);
|
|
||||||
|
|
||||||
const latestVersion = useMemo(() => {
|
|
||||||
const queries = queryClient.getQueriesData<IBusterMetric, any>({
|
const queries = queryClient.getQueriesData<IBusterMetric, any>({
|
||||||
queryKey: memoizedKey,
|
queryKey: memoizedKey,
|
||||||
predicate: filterMetricPredicate
|
predicate: filterMetricPredicate
|
||||||
});
|
});
|
||||||
return getLatestVersionNumber(queries);
|
const newVersion = getLatestVersionNumber(queries);
|
||||||
}, [memoizedKey, cacheVersion]);
|
setLatestVersion(newVersion);
|
||||||
|
});
|
||||||
|
|
||||||
|
useEffect(() => {
|
||||||
|
// Initial computation
|
||||||
|
updateLatestVersion();
|
||||||
|
|
||||||
|
// Subscribe to cache updates
|
||||||
|
const unsubscribe = queryClient.getQueryCache().subscribe((event) => {
|
||||||
|
if (
|
||||||
|
event.type === 'updated' &&
|
||||||
|
event.query.queryKey[2] === last(memoizedKey) &&
|
||||||
|
event.query.queryKey[1] === memoizedKey[1]
|
||||||
|
) {
|
||||||
|
updateLatestVersion();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
return () => unsubscribe();
|
||||||
|
}, [memoizedKey, updateLatestVersion]);
|
||||||
|
|
||||||
return latestVersion;
|
return latestVersion;
|
||||||
};
|
};
|
||||||
|
|
Loading…
Reference in New Issue