import { QueryKeys, dataService } from 'librechat-data-provider'; import { useQuery, useInfiniteQuery, useQueryClient } from '@tanstack/react-query'; import type { UseInfiniteQueryOptions, QueryObserverResult, UseQueryOptions, } from '@tanstack/react-query'; import type t from 'librechat-data-provider'; import type { TPreset, TFile, ConversationListResponse, ConversationListParams, } from 'librechat-data-provider'; import { findPageForConversation } from '~/utils'; export const useGetFiles = ( config?: UseQueryOptions, ): QueryObserverResult => { return useQuery([QueryKeys.files], () => dataService.getFiles(), { refetchOnWindowFocus: false, refetchOnReconnect: false, refetchOnMount: false, ...config, }); }; export const useGetPresetsQuery = ( config?: UseQueryOptions, ): QueryObserverResult => { return useQuery([QueryKeys.presets], () => dataService.getPresets(), { refetchOnWindowFocus: false, refetchOnReconnect: false, refetchOnMount: false, ...config, }); }; export const useGetEndpointsConfigOverride = ( config?: UseQueryOptions, ): QueryObserverResult => { return useQuery( [QueryKeys.endpointsConfigOverride], () => dataService.getEndpointsConfigOverride(), { refetchOnWindowFocus: false, refetchOnReconnect: false, refetchOnMount: false, ...config, }, ); }; export const useGetConvoIdQuery = ( id: string, config?: UseQueryOptions, ): QueryObserverResult => { const queryClient = useQueryClient(); return useQuery( [QueryKeys.conversation, id], () => { const defaultQuery = () => dataService.getConversationById(id); const convosQuery = queryClient.getQueryData([ QueryKeys.allConversations, ]); if (!convosQuery) { return defaultQuery(); } const { pageIndex, convIndex } = findPageForConversation(convosQuery, { conversationId: id }); if (pageIndex > -1 && convIndex > -1) { return convosQuery.pages[pageIndex].conversations[convIndex]; } return defaultQuery(); }, { refetchOnWindowFocus: false, refetchOnReconnect: false, refetchOnMount: false, ...config, }, ); }; export const useSearchInfiniteQuery = ( params?: ConversationListParams & { searchQuery?: string }, config?: UseInfiniteQueryOptions, ) => { return useInfiniteQuery( [QueryKeys.searchConversations, params], // Include the searchQuery in the query key ({ pageParam = '1' }) => dataService.listConversationsByQuery({ ...params, pageNumber: pageParam }), { getNextPageParam: (lastPage) => { const currentPageNumber = Number(lastPage.pageNumber); const totalPages = Number(lastPage.pages); return currentPageNumber < totalPages ? currentPageNumber + 1 : undefined; }, refetchOnWindowFocus: false, refetchOnReconnect: false, refetchOnMount: false, ...config, }, ); }; export const useConversationsInfiniteQuery = ( params?: ConversationListParams, config?: UseInfiniteQueryOptions, ) => { return useInfiniteQuery( [QueryKeys.allConversations], ({ pageParam = '' }) => dataService.listConversations({ ...params, pageNumber: pageParam?.toString() }), { getNextPageParam: (lastPage) => { const currentPageNumber = Number(lastPage.pageNumber); const totalPages = Number(lastPage.pages); // Convert totalPages to a number // If the current page number is less than total pages, return the next page number return currentPageNumber < totalPages ? currentPageNumber + 1 : undefined; }, refetchOnWindowFocus: false, refetchOnReconnect: false, refetchOnMount: false, ...config, }, ); };