diff --git a/client/src/components/Nav/ClearConvos.jsx b/client/src/components/Nav/ClearConvos.jsx index 31a41e831b..1236631d9f 100644 --- a/client/src/components/Nav/ClearConvos.jsx +++ b/client/src/components/Nav/ClearConvos.jsx @@ -3,16 +3,16 @@ import store from '~/store'; import TrashIcon from '../svg/TrashIcon'; import { Dialog, DialogTrigger } from '../ui/Dialog.tsx'; import DialogTemplate from '../ui/DialogTemplate'; -import { useDeleteConversationMutation } from '~/data-provider'; +import { useClearConversationsMutation } from '~/data-provider'; export default function ClearConvos() { const { newConversation } = store.useConversation(); const { refreshConversations } = store.useConversations(); - const clearConvosMutation = useDeleteConversationMutation(); + const clearConvosMutation = useClearConversationsMutation(); const clickHandler = () => { console.log('Clearing conversations...'); - clearConvosMutation.mutate({}); + clearConvosMutation.mutate(); }; useEffect(() => { diff --git a/client/src/data-provider/data-service.ts b/client/src/data-provider/data-service.ts index b71479affc..40aa98a001 100644 --- a/client/src/data-provider/data-service.ts +++ b/client/src/data-provider/data-service.ts @@ -1,44 +1,48 @@ import * as t from './types'; import request from './request'; -import * as endpoints from './endpoints'; +import * as endpoints from './api-endpoints'; export function getConversations(pageNumber: string): Promise { - return request.get(endpoints.getConversations(pageNumber)); + return request.get(endpoints.conversations(pageNumber)); } export function deleteConversation(payload: t.TDeleteConversationRequest) { //todo: this should be a DELETE request - return request.post(endpoints.deleteConversation(), payload); + return request.post(endpoints.deleteConversation(), {arg: payload}); +} + +export function clearAllConversations(): Promise { + return request.post(endpoints.deleteConversation(), {arg: {}}); } export function getMessagesByConvoId(id: string): Promise { - return request.get(endpoints.getMessages(id)); + return request.get(endpoints.messages(id)); } export function getConversationById(id: string): Promise { - return request.get(endpoints.getConversationById(id)); + return request.get(endpoints.conversationById(id)); } export function updateConversation( payload: t.TUpdateConversationRequest ): Promise { - return request.post(endpoints.updateConversation(), payload); + return request.post(endpoints.updateConversation(), {arg: payload}); } -export function updateCustomGpt(payload: t.TUpdateCustomGptRequest) { - return request.post(endpoints.customGpts(), payload); +export function getPresets(): Promise { + return request.get(endpoints.presets()); } -export function getCustomGpts(): Promise { - return request.get(endpoints.customGpts()); +export function createPreset(payload: t.TPreset): Promise { + return request.post(endpoints.presets(), payload); } -export function deleteCustomGpt(payload: t.TDeleteCustomGptRequest): Promise { - return request.post(endpoints.deleteCustomGpt(), payload); +export function updatePreset(payload: t.TPreset): Promise { + return request.post(endpoints.presets(), payload); } -export function getModels(): Promise { - return request.get(endpoints.getModels()); +export function deletePresets(): Promise { + return request.post(endpoints.deletePresets(), {arg: {}}); } export function getSearchEnabled(): Promise { @@ -60,6 +64,12 @@ type TSearchFetcherProps = { callback: (data: any) => void }; +export const searchConversations = async({ q, pageNumber, callback }: TSearchFetcherProps) => { + return request.get(endpoints.search(q, pageNumber)).then(({ data }) => { + callback(data); + }); +} + export const searchFetcher = async ({ pre, q, pageNumber, callback }: TSearchFetcherProps) => { pre(); //@ts-ignore @@ -67,3 +77,7 @@ export const searchFetcher = async ({ pre, q, pageNumber, callback }: TSearchFet console.log('search data', data); callback(data); }; + +export const getAIEndpoints = () => { + return request.get(endpoints.aiEndpoints()); +} \ No newline at end of file diff --git a/client/src/data-provider/endpoints.ts b/client/src/data-provider/endpoints.ts deleted file mode 100644 index d67417fc30..0000000000 --- a/client/src/data-provider/endpoints.ts +++ /dev/null @@ -1,57 +0,0 @@ - -export const getModels = () => { - return `/api/models`; -}; - -export const getAICompletion = () => { - return `/api/ask `; -}; - -export const user = () => { - return `/api/me`; -}; - -export const getMessages = (id: string) => { - return `/api/messages/${id}`; -}; - -export const getConversations = (pageNumber: string) => { - return `/api/convos?pageNumber=${pageNumber}`; -}; - -export const getConversationById = (id: string) => { - return `/api/convos/${id}`; -}; - -export const updateConversation = () => { - return `/api/convos/update`; -}; - -export const deleteConversation = () => { - return `/api/convos/clear`; -}; - -export const prompts = () => { - return `/api/prompts`; -}; - -export const customGpts = () => { - return `/api/customGpts`; -}; - -// TODO: turn this into a DELETE instead of POST on the backend -export const deleteCustomGpt = () => { - return `/api/customGpts/delete`; -}; - -export const generateTitle = () => { - return `/api/convos/gen_title`; -}; - -export const search = (q: string, pageNumber: string) => { - return `/api/search?q=${q}&pageNumber=${pageNumber}`; -} - -export const searchEnabled = () => { - return `/api/search/enable`; -} diff --git a/client/src/data-provider/react-query-service.ts b/client/src/data-provider/react-query-service.ts index bdd523c46e..1b08d45546 100644 --- a/client/src/data-provider/react-query-service.ts +++ b/client/src/data-provider/react-query-service.ts @@ -13,10 +13,11 @@ export enum QueryKeys { messages = "messsages", allConversations = "allConversations", conversation = "conversation", - models = "models", - customGpts = "customGpts", searchEnabled = "searchEnabled", user = "user", + endpoints = "endpoints", + presets = "presets", + searchResults = "searchResults", } export const useGetUserQuery = (): QueryObserverResult => { @@ -107,51 +108,6 @@ export const useDeleteConversationMutation = ( ); }; -export const useUpdateCustomGptMutation = (): UseMutationResult => { - 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 => { - const queryClient = useQueryClient(); - return useMutation( - (payload: t.TDeleteCustomGptRequest) => - dataService.deleteCustomGpt(payload), - { - onSuccess: () => { - queryClient.invalidateQueries([QueryKeys.customGpts]); - }, - } - ); -}; - -export const useGetModelsQuery = (): QueryObserverResult => { - return useQuery([QueryKeys.models], () => dataService.getModels(), { - refetchOnWindowFocus: false, - refetchOnReconnect: false, - refetchOnMount: false, - }); -}; - export const useClearConversationsMutation = (): UseMutationResult => { const queryClient = useQueryClient(); return useMutation(() => dataService.clearAllConversations(), { @@ -161,7 +117,7 @@ export const useClearConversationsMutation = (): UseMutationResult => { }); }; -export const useGetConversationsQuery = (pageNumber: string): QueryObserverResult => { +export const useGetConversationsQuery = (pageNumber: string): QueryObserverResult => { return useQuery([QueryKeys.allConversations, pageNumber], () => dataService.getConversations(pageNumber), { // refetchOnWindowFocus: false, @@ -181,3 +137,67 @@ export const useGetSearchEnabledQuery = (config?: UseQueryOptions): Que } ); } + +export const useGetEndpointsQuery = (): QueryObserverResult => { + return useQuery([QueryKeys.endpoints], () => + dataService.getAIEndpoints(), { + refetchOnWindowFocus: false, + refetchOnReconnect: false, + refetchOnMount: false, + } + ); +} + +export const useCreatePresetMutation = (): UseMutationResult => { + const queryClient = useQueryClient(); + return useMutation( + (payload: t.TCreatePresetRequest) => + dataService.createPreset(payload), + { + onSuccess: () => { + queryClient.invalidateQueries([QueryKeys.presets]); + }, + } + ); +}; + +export const useUpdatePresetMutation = (): UseMutationResult => { + const queryClient = useQueryClient(); + return useMutation( + (payload: t.TUpdatePresetRequest) => + dataService.updatePreset(payload), + { + onSuccess: () => { + queryClient.invalidateQueries([QueryKeys.presets]); + }, + } + ); +}; + +export const useGetPresetsQuery = (): QueryObserverResult => { + return useQuery([QueryKeys.presets], () => dataService.getPresets(), { + refetchOnWindowFocus: false, + refetchOnReconnect: false, + refetchOnMount: false, + }); +}; + +export const useDeleteAllPresetsMutation = (): UseMutationResult => { + const queryClient = useQueryClient(); + return useMutation(() => dataService.deletePresets(), { + onSuccess: () => { + queryClient.invalidateQueries([QueryKeys.presets]); + }, + }); +} + +export const useSearchFetcher = (query: string, pageNumber: string, callback: () => void, config?: UseQueryOptions): QueryObserverResult => { + return useQuery([QueryKeys.searchResults, pageNumber, query], () => + dataService.searchConversations(query, pageNumber, callback), { + refetchOnWindowFocus: false, + refetchOnReconnect: false, + refetchOnMount: false, + ...config + } + ); +} diff --git a/client/src/data-provider/request.ts b/client/src/data-provider/request.ts index 13ad78b2bd..d79562ab34 100644 --- a/client/src/data-provider/request.ts +++ b/client/src/data-provider/request.ts @@ -1,13 +1,12 @@ import axios, { AxiosRequestConfig } from "axios"; async function _get(url: string, options?: AxiosRequestConfig): Promise { - const response = await axios.get(url, {...options}); + const response = await axios.get(url, { withCredentials: true, ...options}); return response.data; } -async function _post(url: string, arg?: any) { - const modifiedData = {arg, withCredentials: true} - const response = await axios.post(url, modifiedData, { +async function _post(url: string, data?: any) { + const response = await axios.post(url, JSON.stringify(data), { headers: { "Content-Type": "application/json" }, }); return response.data;