From cd8798703720b155ca2d779b3b2169bf740f3498 Mon Sep 17 00:00:00 2001 From: Hiep Le <69354317+hieptl@users.noreply.github.com> Date: Tue, 18 Nov 2025 00:49:54 +0700 Subject: [PATCH] feat(frontend): add functionality to fetch sub-conversation data (#11758) --- .../src/hooks/query/use-sub-conversations.ts | 39 +++++++++++++++++++ 1 file changed, 39 insertions(+) create mode 100644 frontend/src/hooks/query/use-sub-conversations.ts diff --git a/frontend/src/hooks/query/use-sub-conversations.ts b/frontend/src/hooks/query/use-sub-conversations.ts new file mode 100644 index 0000000000..53e6c84d45 --- /dev/null +++ b/frontend/src/hooks/query/use-sub-conversations.ts @@ -0,0 +1,39 @@ +import { useQuery } from "@tanstack/react-query"; +import V1ConversationService from "#/api/conversation-service/v1-conversation-service.api"; +import { V1AppConversation } from "#/api/conversation-service/v1-conversation-service.types"; + +const FIVE_MINUTES = 1000 * 60 * 5; +const FIFTEEN_MINUTES = 1000 * 60 * 15; + +/** + * React hook to fetch sub-conversations by their IDs + * + * @param subConversationIds Array of sub-conversation IDs to fetch + * @returns React Query result with sub-conversation data, loading, and error states + * + * @example + * ```tsx + * const { data: subConversations, isLoading, isError } = useSubConversations( + * conversation.sub_conversation_ids || [] + * ); + * ``` + */ +export const useSubConversations = ( + subConversationIds: string[] | null | undefined, +) => { + const ids = subConversationIds || []; + + return useQuery<(V1AppConversation | null)[]>({ + queryKey: ["v1", "sub-conversations", ids], + queryFn: async () => { + if (ids.length === 0) { + return []; + } + return V1ConversationService.batchGetAppConversations(ids); + }, + enabled: ids.length > 0, + staleTime: FIVE_MINUTES, + gcTime: FIFTEEN_MINUTES, + retry: false, + }); +};