update cache settings part 1

This commit is contained in:
Nate Kelley 2025-07-14 14:16:54 -06:00
parent 6bf551b499
commit a1810be8f0
No known key found for this signature in database
GPG Key ID: FD90372AB8D98B4F
5 changed files with 53 additions and 6 deletions

View File

@ -6,6 +6,12 @@ import { updateMessageShapeToIChatMessage } from './helpers';
import { useMemoizedFn } from '@/hooks';
import { prefetchGetListChats, useGetChatMemoized } from '@/api/buster_rest/chats';
import uniq from 'lodash/uniq';
import type { ChatMessageResponseMessage_File } from '@buster/server-shared/chats';
import type { BusterChatMessage } from '../../asset_interfaces/chat';
import { useQueryClient } from '@tanstack/react-query';
import { dashboardQueryKeys } from '../../query_keys/dashboard';
import last from 'lodash/last';
import isEmpty from 'lodash/isEmpty';
export const useGetMessage = ({ chatId, messageId }: { chatId: string; messageId: string }) => {
const shape = useMemo(() => messageShape({ chatId, messageId }), [chatId, messageId]);
@ -32,6 +38,7 @@ export const useTrackAndUpdateMessageChanges = (
callback?: (message: ReturnType<typeof updateMessageShapeToIChatMessage>) => void
) => {
const { onUpdateChatMessage, onUpdateChat } = useChatUpdate();
const checkIfWeHaveAFollowupDashboard = useCheckIfWeHaveAFollowupDashboard();
const getChatMemoized = useGetChatMemoized();
const subscribe = !!chatId && !!messageId && messageId !== 'undefined';
@ -60,6 +67,22 @@ export const useTrackAndUpdateMessageChanges = (
});
}
//check if we have a files in the message
const hasFiles = iChatMessage.reasoning_message_ids?.some((id) => {
const reasoningMessage = iChatMessage.response_messages?.[id];
return (
reasoningMessage &&
(reasoningMessage as ChatMessageResponseMessage_File)?.file_type === 'dashboard'
);
});
if (hasFiles) {
prefetchGetListChats();
}
if (!isEmpty(iChatMessage.reasoning_message_ids)) {
checkIfWeHaveAFollowupDashboard(iChatMessage);
}
if (iChatMessage.is_completed) {
prefetchGetListChats();
}
@ -71,3 +94,27 @@ export const useTrackAndUpdateMessageChanges = (
subscribe
);
};
const useCheckIfWeHaveAFollowupDashboard = () => {
const queryClient = useQueryClient();
const method = (message: Partial<BusterChatMessage>) => {
const lastResponseMessageId = last(message.response_message_ids || []) || '';
const lastResponseMessage = message.response_messages?.[lastResponseMessageId] as
| ChatMessageResponseMessage_File
| undefined;
const hasDashboardInMessage =
lastResponseMessage && lastResponseMessage?.file_type === 'dashboard';
if (hasDashboardInMessage) {
const fileId = lastResponseMessage?.id;
const versionNumber = lastResponseMessage?.version_number;
const { queryKey } = dashboardQueryKeys.dashboardGetDashboard(fileId, versionNumber);
const isFoundInCache = queryClient.getQueryData(queryKey);
if (isFoundInCache) {
queryClient.invalidateQueries({ queryKey });
}
}
};
return useMemoizedFn(method);
};

View File

@ -87,6 +87,10 @@ export const usePrefetchGetDashboardClient = () => {
const queryClient = useQueryClient();
const queryFn = useGetDashboardAndInitializeMetrics(false);
return useMemoizedFn((id: string, versionNumber: number) => {
const getDashboardQueryKey = dashboardQueryKeys.dashboardGetDashboard(id, versionNumber);
const isStale = isQueryStale(getDashboardQueryKey, queryClient);
if (!isStale) return queryClient;
return queryClient.prefetchQuery({
...dashboardQueryKeys.dashboardGetDashboard(id, versionNumber),
queryFn: () => queryFn(id, versionNumber)

View File

@ -73,10 +73,6 @@ export const ChatResponseMessage_DashboardFile: React.FC<{
return <TextAndVersionText text={file_name} version={version_number} />;
}, [file_name, version_number, metricId]);
useMount(() => {
if (isSelectedFile) prefetchGetDashboard(id, version_number);
});
return (
<AnimatePresence initial={!isCompletedStream}>
<motion.div

View File

@ -1,6 +1,5 @@
'use client';
import findLast from 'lodash/findLast';
import { useEffect, useLayoutEffect, useRef } from 'react';
import type { BusterChatResponseMessage_file } from '@/api/asset_interfaces/chat';
import { useGetChat, useGetChatMessage, useGetChatMessageMemoized } from '@/api/buster_rest/chats';

View File

@ -8,6 +8,7 @@ export const isQueryStale = (
queryClient: QueryClient
): boolean => {
const queryState = queryClient.getQueryState(options.queryKey);
const updatedAt = queryState?.dataUpdatedAt;
const staleTime =
(options.staleTime as number) ||
@ -15,7 +16,7 @@ export const isQueryStale = (
0;
const isStale = updatedAt ? Date.now() - updatedAt > staleTime : true;
return isStale;
return isStale && queryState?.fetchStatus !== 'fetching';
};
export const hasOrganizationId = (queryClient: QueryClient): boolean => {