Add presets and endpoints data services

This commit is contained in:
Daniel D Orlando 2023-04-05 08:47:18 -07:00
parent f2d18c81fc
commit 3d0bfaef51
5 changed files with 102 additions and 126 deletions

View file

@ -3,16 +3,16 @@ import store from '~/store';
import TrashIcon from '../svg/TrashIcon'; import TrashIcon from '../svg/TrashIcon';
import { Dialog, DialogTrigger } from '../ui/Dialog.tsx'; import { Dialog, DialogTrigger } from '../ui/Dialog.tsx';
import DialogTemplate from '../ui/DialogTemplate'; import DialogTemplate from '../ui/DialogTemplate';
import { useDeleteConversationMutation } from '~/data-provider'; import { useClearConversationsMutation } from '~/data-provider';
export default function ClearConvos() { export default function ClearConvos() {
const { newConversation } = store.useConversation(); const { newConversation } = store.useConversation();
const { refreshConversations } = store.useConversations(); const { refreshConversations } = store.useConversations();
const clearConvosMutation = useDeleteConversationMutation(); const clearConvosMutation = useClearConversationsMutation();
const clickHandler = () => { const clickHandler = () => {
console.log('Clearing conversations...'); console.log('Clearing conversations...');
clearConvosMutation.mutate({}); clearConvosMutation.mutate();
}; };
useEffect(() => { useEffect(() => {

View file

@ -1,44 +1,48 @@
import * as t from './types'; import * as t from './types';
import request from './request'; import request from './request';
import * as endpoints from './endpoints'; import * as endpoints from './api-endpoints';
export function getConversations(pageNumber: string): Promise<t.TGetConversationsResponse> { export function getConversations(pageNumber: string): Promise<t.TGetConversationsResponse> {
return request.get(endpoints.getConversations(pageNumber)); return request.get(endpoints.conversations(pageNumber));
} }
export function deleteConversation(payload: t.TDeleteConversationRequest) { export function deleteConversation(payload: t.TDeleteConversationRequest) {
//todo: this should be a DELETE request //todo: this should be a DELETE request
return request.post(endpoints.deleteConversation(), payload); return request.post(endpoints.deleteConversation(), {arg: payload});
}
export function clearAllConversations(): Promise<unknown> {
return request.post(endpoints.deleteConversation(), {arg: {}});
} }
export function getMessagesByConvoId(id: string): Promise<t.TMessage[]> { export function getMessagesByConvoId(id: string): Promise<t.TMessage[]> {
return request.get(endpoints.getMessages(id)); return request.get(endpoints.messages(id));
} }
export function getConversationById(id: string): Promise<t.TConversation> { export function getConversationById(id: string): Promise<t.TConversation> {
return request.get(endpoints.getConversationById(id)); return request.get(endpoints.conversationById(id));
} }
export function updateConversation( export function updateConversation(
payload: t.TUpdateConversationRequest payload: t.TUpdateConversationRequest
): Promise<t.TUpdateConversationResponse> { ): Promise<t.TUpdateConversationResponse> {
return request.post(endpoints.updateConversation(), payload); return request.post(endpoints.updateConversation(), {arg: payload});
} }
export function updateCustomGpt(payload: t.TUpdateCustomGptRequest) { export function getPresets(): Promise<t.TPreset[]> {
return request.post(endpoints.customGpts(), payload); return request.get(endpoints.presets());
} }
export function getCustomGpts(): Promise<t.TGetCustomGptsResponse> { export function createPreset(payload: t.TPreset): Promise<t.TPreset[]> {
return request.get(endpoints.customGpts()); return request.post(endpoints.presets(), payload);
} }
export function deleteCustomGpt(payload: t.TDeleteCustomGptRequest): Promise<t.TDeleteCustomGptResponse> { export function updatePreset(payload: t.TPreset): Promise<t.TPreset[]> {
return request.post(endpoints.deleteCustomGpt(), payload); return request.post(endpoints.presets(), payload);
} }
export function getModels(): Promise<t.TGetModelsResponse> { export function deletePresets(): Promise<unknown> {
return request.get(endpoints.getModels()); return request.post(endpoints.deletePresets(), {arg: {}});
} }
export function getSearchEnabled(): Promise<boolean> { export function getSearchEnabled(): Promise<boolean> {
@ -60,6 +64,12 @@ type TSearchFetcherProps = {
callback: (data: any) => void 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) => { export const searchFetcher = async ({ pre, q, pageNumber, callback }: TSearchFetcherProps) => {
pre(); pre();
//@ts-ignore //@ts-ignore
@ -67,3 +77,7 @@ export const searchFetcher = async ({ pre, q, pageNumber, callback }: TSearchFet
console.log('search data', data); console.log('search data', data);
callback(data); callback(data);
}; };
export const getAIEndpoints = () => {
return request.get(endpoints.aiEndpoints());
}

View file

@ -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`;
}

View file

@ -13,10 +13,11 @@ export enum QueryKeys {
messages = "messsages", messages = "messsages",
allConversations = "allConversations", allConversations = "allConversations",
conversation = "conversation", conversation = "conversation",
models = "models",
customGpts = "customGpts",
searchEnabled = "searchEnabled", searchEnabled = "searchEnabled",
user = "user", user = "user",
endpoints = "endpoints",
presets = "presets",
searchResults = "searchResults",
} }
export const useGetUserQuery = (): QueryObserverResult<t.TUser> => { export const useGetUserQuery = (): QueryObserverResult<t.TUser> => {
@ -107,51 +108,6 @@ export const useDeleteConversationMutation = (
); );
}; };
export const useUpdateCustomGptMutation = (): UseMutationResult<t.TUpdateCustomGptResponse> => {
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> => {
const queryClient = useQueryClient();
return useMutation(
(payload: t.TDeleteCustomGptRequest) =>
dataService.deleteCustomGpt(payload),
{
onSuccess: () => {
queryClient.invalidateQueries([QueryKeys.customGpts]);
},
}
);
};
export const useGetModelsQuery = (): QueryObserverResult<t.TGetModelsResponse> => {
return useQuery([QueryKeys.models], () => dataService.getModels(), {
refetchOnWindowFocus: false,
refetchOnReconnect: false,
refetchOnMount: false,
});
};
export const useClearConversationsMutation = (): UseMutationResult<unknown> => { export const useClearConversationsMutation = (): UseMutationResult<unknown> => {
const queryClient = useQueryClient(); const queryClient = useQueryClient();
return useMutation(() => dataService.clearAllConversations(), { return useMutation(() => dataService.clearAllConversations(), {
@ -161,7 +117,7 @@ export const useClearConversationsMutation = (): UseMutationResult<unknown> => {
}); });
}; };
export const useGetConversationsQuery = (pageNumber: string): QueryObserverResult<t.TGetConversationsResponse> => { export const useGetConversationsQuery = (pageNumber: string): QueryObserverResult<t.Conversation[]> => {
return useQuery([QueryKeys.allConversations, pageNumber], () => return useQuery([QueryKeys.allConversations, pageNumber], () =>
dataService.getConversations(pageNumber), { dataService.getConversations(pageNumber), {
// refetchOnWindowFocus: false, // refetchOnWindowFocus: false,
@ -181,3 +137,67 @@ export const useGetSearchEnabledQuery = (config?: UseQueryOptions<boolean>): Que
} }
); );
} }
export const useGetEndpointsQuery = (): QueryObserverResult<t.TEndpoints> => {
return useQuery([QueryKeys.endpoints], () =>
dataService.getAIEndpoints(), {
refetchOnWindowFocus: false,
refetchOnReconnect: false,
refetchOnMount: false,
}
);
}
export const useCreatePresetMutation = (): UseMutationResult<t.Preset[]> => {
const queryClient = useQueryClient();
return useMutation(
(payload: t.TCreatePresetRequest) =>
dataService.createPreset(payload),
{
onSuccess: () => {
queryClient.invalidateQueries([QueryKeys.presets]);
},
}
);
};
export const useUpdatePresetMutation = (): UseMutationResult<t.TPreset[]> => {
const queryClient = useQueryClient();
return useMutation(
(payload: t.TUpdatePresetRequest) =>
dataService.updatePreset(payload),
{
onSuccess: () => {
queryClient.invalidateQueries([QueryKeys.presets]);
},
}
);
};
export const useGetPresetsQuery = (): QueryObserverResult<t.TPreset[], unknown> => {
return useQuery([QueryKeys.presets], () => dataService.getPresets(), {
refetchOnWindowFocus: false,
refetchOnReconnect: false,
refetchOnMount: false,
});
};
export const useDeleteAllPresetsMutation = (): UseMutationResult<unknown> => {
const queryClient = useQueryClient();
return useMutation(() => dataService.deletePresets(), {
onSuccess: () => {
queryClient.invalidateQueries([QueryKeys.presets]);
},
});
}
export const useSearchFetcher = (query: string, pageNumber: string, callback: () => void, config?: UseQueryOptions<t.TSearchResponse>): QueryObserverResult<t.TSearchResponse> => {
return useQuery<t.TSearchResponse>([QueryKeys.searchResults, pageNumber, query], () =>
dataService.searchConversations(query, pageNumber, callback), {
refetchOnWindowFocus: false,
refetchOnReconnect: false,
refetchOnMount: false,
...config
}
);
}

View file

@ -1,13 +1,12 @@
import axios, { AxiosRequestConfig } from "axios"; import axios, { AxiosRequestConfig } from "axios";
async function _get<T>(url: string, options?: AxiosRequestConfig): Promise<T> { async function _get<T>(url: string, options?: AxiosRequestConfig): Promise<T> {
const response = await axios.get(url, {...options}); const response = await axios.get(url, { withCredentials: true, ...options});
return response.data; return response.data;
} }
async function _post(url: string, arg?: any) { async function _post(url: string, data?: any) {
const modifiedData = {arg, withCredentials: true} const response = await axios.post(url, JSON.stringify(data), {
const response = await axios.post(url, modifiedData, {
headers: { "Content-Type": "application/json" }, headers: { "Content-Type": "application/json" },
}); });
return response.data; return response.data;