fix: prevent log viewer flicker on ExchangeDetail page
All checks were successful
CI / build (push) Successful in 1m0s
CI / cleanup-branch (push) Has been skipped
CI / docker (push) Successful in 1m12s
CI / deploy (push) Successful in 35s
CI / deploy-feature (push) Has been skipped

Skip global time range in the logs query key when filtering by
exchangeId (exchange logs are historical, the sliding time window is
irrelevant). Add placeholderData to keep previous results visible
during query key transitions on other pages.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
hsiegeln
2026-03-26 11:03:38 +01:00
parent a01712e68c
commit bde0459416

View File

@@ -21,17 +21,24 @@ export function useApplicationLogs(
const refetchInterval = useRefreshInterval(15_000);
const { timeRange } = useGlobalFilters();
const to = options?.toOverride ?? timeRange.end.toISOString();
// When filtering by exchangeId, skip the global time range — exchange logs are historical
const useTimeRange = !options?.exchangeId;
return useQuery({
queryKey: ['logs', application, agentId, timeRange.start.toISOString(), to, options?.limit, options?.exchangeId],
queryKey: ['logs', application, agentId,
useTimeRange ? timeRange.start.toISOString() : null,
useTimeRange ? to : null,
options?.limit, options?.exchangeId],
queryFn: async () => {
const token = useAuthStore.getState().accessToken;
const params = new URLSearchParams();
params.set('application', application!);
if (agentId) params.set('agentId', agentId);
if (options?.exchangeId) params.set('exchangeId', options.exchangeId);
params.set('from', timeRange.start.toISOString());
params.set('to', to);
if (useTimeRange) {
params.set('from', timeRange.start.toISOString());
params.set('to', to);
}
if (options?.limit) params.set('limit', String(options.limit));
const res = await fetch(`${config.apiBaseUrl}/logs?${params}`, {
headers: {
@@ -43,6 +50,7 @@ export function useApplicationLogs(
return res.json() as Promise<LogEntryResponse[]>;
},
enabled: !!application,
placeholderData: (prev) => prev,
refetchInterval,
});
}