LibreChat/client/src/data-provider/react-query-service.ts

179 lines
4.6 KiB
TypeScript
Raw Normal View History

2023-04-02 12:48:26 -07:00
import {
UseQueryOptions,
useQuery,
useMutation,
useQueryClient,
UseMutationResult,
QueryObserverResult,
} from "@tanstack/react-query";
import * as t from "./types";
import * as dataService from "./data-service";
import { useRecoilState, useResetRecoilState, useSetRecoilState } from 'recoil';
import store from '~/store';
2023-04-02 12:48:26 -07:00
export enum QueryKeys {
messages = "messsages",
allConversations = "allConversations",
conversation = "conversation",
models = "models",
customGpts = "customGpts",
searchEnabled = "searchEnabled",
user = "user",
}
export const useGetUserQuery = (): QueryObserverResult<t.TUser> => {
return useQuery<t.TUser>([QueryKeys.user], () => dataService.getUser(), {
refetchOnWindowFocus: false,
refetchOnReconnect: false,
refetchOnMount: false,
});
};
export const useGetMessagesByConvoId = (
id: string,
config?: UseQueryOptions<t.TMessage[]>
): QueryObserverResult<t.TMessage[]> => {
return useQuery<t.TMessage[]>([QueryKeys.messages, id], () =>
dataService.getMessagesByConvoId(id),
{
refetchOnWindowFocus: false,
refetchOnReconnect: false,
refetchOnMount: false,
...config,
}
);
};
export const useGetConversationByIdQuery = (
id: string,
config?: UseQueryOptions<t.TConversation>
): QueryObserverResult<t.TConversation> => {
return useQuery<t.TConversation>([QueryKeys.conversation, id], () =>
dataService.getConversationById(id),
{
refetchOnWindowFocus: false,
refetchOnReconnect: false,
refetchOnMount: false,
enabled: false,
...config
}
);
}
export const useUpdateConversationMutation = (
id: string
): UseMutationResult<
t.TUpdateConversationResponse,
unknown,
t.TUpdateConversationRequest,
unknown
> => {
const [conversation, setConversation] = useRecoilState(store.conversation);
2023-04-02 12:48:26 -07:00
const queryClient = useQueryClient();
return useMutation(
(payload: t.TUpdateConversationRequest) =>
dataService.updateConversation(payload),
{
onSuccess: (res) => {
console.log('res', res);
setConversation(res);
2023-04-02 12:48:26 -07:00
queryClient.invalidateQueries([QueryKeys.conversation, id]);
queryClient.invalidateQueries([QueryKeys.allConversations, id]);
2023-04-02 12:48:26 -07:00
},
}
);
};
// export const useDeleteConversationMutation = (
// id: string
// ): UseMutationResult<
export const useUpdateCustomGptMutation = (): UseMutationResult<
t.TUpdateCustomGptResponse,
unknown,
t.TUpdateCustomGptRequest,
unknown
> => {
const queryClient = useQueryClient();
return useMutation(
(payload: t.TUpdateCustomGptRequest) =>
dataService.updateCustomGpt(payload),
{
onSuccess: () => {
queryClient.invalidateQueries([QueryKeys.customGpts]);
},
}
);
};
export const useGetCustomGptsQuery = (): QueryObserverResult<
t.TCustomGpt[],
unknown
> => {
return useQuery([QueryKeys.customGpts], () => dataService.getCustomGpts(), {
refetchOnWindowFocus: false,
refetchOnReconnect: false,
refetchOnMount: false,
});
};
export const useDeleteCustomGptMutation = (): UseMutationResult<
t.TDeleteCustomGptResponse,
unknown,
t.TDeleteCustomGptRequest,
unknown
> => {
const queryClient = useQueryClient();
return useMutation(
(payload: t.TDeleteCustomGptRequest) =>
dataService.deleteCustomGpt(payload),
{
onSuccess: () => {
queryClient.invalidateQueries([QueryKeys.customGpts]);
},
}
);
};
export const useGetModelsQuery = (): QueryObserverResult<
t.TGetModelsResponse,
unknown
> => {
return useQuery([QueryKeys.models], () => dataService.getModels(), {
refetchOnWindowFocus: false,
refetchOnReconnect: false,
refetchOnMount: false,
});
};
export const useClearConversationsMutation = (): UseMutationResult<unknown> => {
const queryClient = useQueryClient();
return useMutation(() => dataService.clearAllConversations(), {
onSuccess: () => {
queryClient.invalidateQueries([QueryKeys.allConversations]);
},
});
};
export const useGetConversationsQuery = (pageNumber: string): QueryObserverResult<t.TGetConversationsResponse> => {
return useQuery([QueryKeys.allConversations, pageNumber], () =>
dataService.getConversations(pageNumber), {
refetchOnWindowFocus: false,
refetchOnReconnect: false,
refetchOnMount: false,
}
);
}
export const useGetSearchEnabledQuery = (config?: UseQueryOptions<boolean>): QueryObserverResult<boolean> => {
return useQuery<boolean>([QueryKeys.searchEnabled], () =>
dataService.getSearchEnabled(), {
refetchOnWindowFocus: false,
refetchOnReconnect: false,
refetchOnMount: false,
...config,
}
);
}