Add support for deleting individual presets

This commit is contained in:
Daniel D Orlando 2023-04-06 08:02:08 -07:00
parent fbeff7a461
commit 48e33fe1e9
6 changed files with 39 additions and 39 deletions

View file

@ -5,7 +5,7 @@ import EndpointItems from './EndpointItems';
import PresetItems from './PresetItems'; import PresetItems from './PresetItems';
import FileUpload from './FileUpload'; import FileUpload from './FileUpload';
import getIcon from '~/utils/getIcon'; import getIcon from '~/utils/getIcon';
import { useDeleteAllPresetsMutation } from '~/data-provider'; import { useDeletePresetMutation } from '~/data-provider';
import { Button } from '../../ui/Button.tsx'; import { Button } from '../../ui/Button.tsx';
import { import {
DropdownMenu, DropdownMenu,
@ -33,7 +33,7 @@ export default function NewConversationMenu() {
// const { model, promptPrefix, chatGptLabel, conversationId } = conversation; // const { model, promptPrefix, chatGptLabel, conversationId } = conversation;
const { newConversation } = store.useConversation(); const { newConversation } = store.useConversation();
const deletePresetsMutation = useDeleteAllPresetsMutation(); const deletePresetsMutation = useDeletePresetMutation();
const importPreset = jsonData => { const importPreset = jsonData => {
handleFileSelected(jsonData).then(setPresets); handleFileSelected(jsonData).then(setPresets);
@ -79,8 +79,12 @@ export default function NewConversationMenu() {
setPreset(preset); setPreset(preset);
}; };
const clearPreset = () => { const clearAllPresets = () => {
deletePresetsMutation.mutate(); deletePresetsMutation.mutate({arg: {}});
};
const onDeletePreset = preset => {
deletePresetsMutation.mutate({arg: preset});
}; };
const icon = getIcon({ const icon = getIcon({
@ -92,9 +96,7 @@ export default function NewConversationMenu() {
}); });
return ( return (
<Dialog <Dialog>
// onOpenChange={onOpenChange}
>
<DropdownMenu <DropdownMenu
open={menuOpen} open={menuOpen}
onOpenChange={setMenuOpen} onOpenChange={setMenuOpen}
@ -102,7 +104,6 @@ export default function NewConversationMenu() {
<DropdownMenuTrigger asChild> <DropdownMenuTrigger asChild>
<Button <Button
variant="outline" variant="outline"
// style={{backgroundColor: 'rgb(16, 163, 127)'}}
className={`absolute top-[0.25px] mb-0 ml-1 items-center rounded-md border-0 p-1 outline-none focus:ring-0 focus:ring-offset-0 disabled:top-[0.25px] dark:data-[state=open]:bg-opacity-50 md:top-1 md:left-1 md:ml-0 md:pl-1 md:disabled:top-1`} className={`absolute top-[0.25px] mb-0 ml-1 items-center rounded-md border-0 p-1 outline-none focus:ring-0 focus:ring-offset-0 disabled:top-[0.25px] dark:data-[state=open]:bg-opacity-50 md:top-1 md:left-1 md:ml-0 md:pl-1 md:disabled:top-1`}
> >
{icon} {icon}
@ -140,7 +141,6 @@ export default function NewConversationMenu() {
<Button <Button
type="button" type="button"
className="h-auto bg-transparent px-2 py-1 text-xs font-medium font-normal text-red-700 hover:bg-slate-200 hover:text-red-700 dark:bg-transparent dark:text-red-400 dark:hover:bg-gray-800 dark:hover:text-red-400" className="h-auto bg-transparent px-2 py-1 text-xs font-medium font-normal text-red-700 hover:bg-slate-200 hover:text-red-700 dark:bg-transparent dark:text-red-400 dark:hover:bg-gray-800 dark:hover:text-red-400"
// onClick={clearPreset}
> >
Clear All Clear All
</Button> </Button>
@ -149,7 +149,7 @@ export default function NewConversationMenu() {
title="Clear presets" title="Clear presets"
description="Are you sure you want to clear all presets? This is irreversible." description="Are you sure you want to clear all presets? This is irreversible."
selection={{ selection={{
selectHandler: clearPreset, selectHandler: clearAllPresets,
selectClasses: 'bg-red-600 hover:bg-red-700 dark:hover:bg-red-800 text-white', selectClasses: 'bg-red-600 hover:bg-red-700 dark:hover:bg-red-800 text-white',
selectText: 'Clear' selectText: 'Clear'
}} }}
@ -166,7 +166,7 @@ export default function NewConversationMenu() {
presets={presets} presets={presets}
onSelect={onSelectPreset} onSelect={onSelectPreset}
onChangePreset={onChangePreset} onChangePreset={onChangePreset}
onDeletePreset={clearPresetsTrigger} onDeletePreset={onDeletePreset}
/> />
) : ( ) : (
<DropdownMenuLabel className="dark:text-gray-300">No preset yet.</DropdownMenuLabel> <DropdownMenuLabel className="dark:text-gray-300">No preset yet.</DropdownMenuLabel>

View file

@ -45,15 +45,6 @@ export default function PresetItem({ preset = {}, value, onSelect, onChangePrese
{icon} {icon}
{preset?.title} {preset?.title}
<small className="ml-2">({getPresetTitle()})</small> <small className="ml-2">({getPresetTitle()})</small>
{/* <RenameButton
twcss={`ml-auto mr-2 ${buttonClass.className}`}
onRename={onRename}
renaming={renaming}
onMouseOver={handleMouseOver}
onMouseOut={handleMouseOut}
renameHandler={renameHandler}
/> */}
<div className="flex w-4 flex-1" /> <div className="flex w-4 flex-1" />
<button <button
className="invisible m-0 p-2 mr-1 rounded-md text-gray-400 hover:text-gray-700 group-hover:visible dark:text-gray-400 dark:hover:text-gray-200 " className="invisible m-0 p-2 mr-1 rounded-md text-gray-400 hover:text-gray-700 group-hover:visible dark:text-gray-400 dark:hover:text-gray-200 "

View file

@ -62,6 +62,7 @@ export default function Nav({ navVisible, setNavVisible }) {
}); });
useEffect(() => { useEffect(() => {
//we use isInitialLoading here instead of isLoading because query is disabled by default
if (searchQueryFn.isInitialLoading) { if (searchQueryFn.isInitialLoading) {
setIsFetching(true); setIsFetching(true);
} }

View file

@ -42,10 +42,14 @@ export const presets = () => {
return `/api/presets`; return `/api/presets`;
} }
export const deletePresets = () => { export const deletePreset = () => {
return `/api/presets/delete`; return `/api/presets/delete`;
} }
export const aiEndpoints = () => { export const aiEndpoints = () => {
return `/api/endpoints`; return `/api/endpoints`;
} }
export const tokenizer = () => {
return `/api/tokenizer`;
}

View file

@ -41,8 +41,8 @@ export function updatePreset(payload: t.TPreset): Promise<t.TPreset[]> {
return request.post(endpoints.presets(), payload); return request.post(endpoints.presets(), payload);
} }
export function deletePresets(): Promise<unknown> { export function deletePreset(arg: t.TPreset | {}): Promise<t.TPreset[]> {
return request.post(endpoints.deletePresets(), {arg: {}}); return request.post(endpoints.deletePreset(), arg);
} }
export function getSearchEnabled(): Promise<boolean> { export function getSearchEnabled(): Promise<boolean> {

View file

@ -77,8 +77,7 @@ export const useGetConversationByIdMutation = (
export const useUpdateConversationMutation = ( export const useUpdateConversationMutation = (
id: string id: string
): UseMutationResult< ): UseMutationResult<t.TUpdateConversationResponse, unknown, t.TUpdateConversationRequest, unknown> => {
t.TUpdateConversationResponse> => {
const queryClient = useQueryClient(); const queryClient = useQueryClient();
return useMutation( return useMutation(
(payload: t.TUpdateConversationRequest) => (payload: t.TUpdateConversationRequest) =>
@ -92,9 +91,10 @@ export const useUpdateConversationMutation = (
); );
}; };
export const useDeleteConversationMutation = ( export const useDeleteConversationMutation = (
id?: string id?: string
): UseMutationResult<t.TDeleteConversationResponse> => { ): UseMutationResult<t.TDeleteConversationResponse, unknown, t.TDeleteConversationRequest, unknown> => {
const queryClient = useQueryClient(); const queryClient = useQueryClient();
return useMutation( return useMutation(
(payload: t.TDeleteConversationRequest) => (payload: t.TDeleteConversationRequest) =>
@ -117,7 +117,7 @@ export const useClearConversationsMutation = (): UseMutationResult<unknown> => {
}); });
}; };
export const useGetConversationsQuery = (pageNumber: string): QueryObserverResult<t.Conversation[]> => { export const useGetConversationsQuery = (pageNumber: string): QueryObserverResult<t.TConversation[]> => {
return useQuery([QueryKeys.allConversations, pageNumber], () => return useQuery([QueryKeys.allConversations, pageNumber], () =>
dataService.getConversations(pageNumber), { dataService.getConversations(pageNumber), {
refetchOnReconnect: false, refetchOnReconnect: false,
@ -147,10 +147,10 @@ export const useGetEndpointsQuery = (): QueryObserverResult<t.TEndpoints> => {
); );
} }
export const useCreatePresetMutation = (): UseMutationResult<t.Preset[]> => { export const useCreatePresetMutation = (): UseMutationResult<t.TPreset[], unknown, t.TPreset, unknown> => {
const queryClient = useQueryClient(); const queryClient = useQueryClient();
return useMutation( return useMutation(
(payload: t.TCreatePresetRequest) => (payload: t.TPreset) =>
dataService.createPreset(payload), dataService.createPreset(payload),
{ {
onSuccess: () => { onSuccess: () => {
@ -160,10 +160,10 @@ export const useCreatePresetMutation = (): UseMutationResult<t.Preset[]> => {
); );
}; };
export const useUpdatePresetMutation = (): UseMutationResult<t.TPreset[]> => { export const useUpdatePresetMutation = (): UseMutationResult<t.TPreset[], unknown, t.TPreset, unknown> => {
const queryClient = useQueryClient(); const queryClient = useQueryClient();
return useMutation( return useMutation(
(payload: t.TUpdatePresetRequest) => (payload: t.TPreset) =>
dataService.updatePreset(payload), dataService.updatePreset(payload),
{ {
onSuccess: () => { onSuccess: () => {
@ -181,13 +181,17 @@ export const useGetPresetsQuery = (): QueryObserverResult<t.TPreset[], unknown>
}); });
}; };
export const useDeleteAllPresetsMutation = (): UseMutationResult<unknown> => { export const useDeletePresetMutation = (): UseMutationResult<t.TPreset[], unknown, t.TPreset | {}, unknown> => {
const queryClient = useQueryClient(); const queryClient = useQueryClient();
return useMutation(() => dataService.deletePresets(), { return useMutation(
onSuccess: () => { (payload: t.TPreset | {}) =>
queryClient.invalidateQueries([QueryKeys.presets]); dataService.deletePreset(payload),
}, {
}); onSuccess: () => {
queryClient.invalidateQueries([QueryKeys.presets]);
},
}
);
} }
export const useSearchQuery = ( export const useSearchQuery = (
@ -196,7 +200,7 @@ export const useSearchQuery = (
config?: UseQueryOptions<t.TSearchResults> config?: UseQueryOptions<t.TSearchResults>
): QueryObserverResult<t.TSearchResults> => { ): QueryObserverResult<t.TSearchResults> => {
console.log('useSearchFetcher', searchQuery, pageNumber) console.log('useSearchFetcher', searchQuery, pageNumber)
return useQuery<t.TSearchResponse>([QueryKeys.searchResults, pageNumber, searchQuery], () => return useQuery<t.TSearchResults>([QueryKeys.searchResults, pageNumber, searchQuery], () =>
dataService.searchConversations(searchQuery, pageNumber), { dataService.searchConversations(searchQuery, pageNumber), {
refetchOnWindowFocus: false, refetchOnWindowFocus: false,
refetchOnReconnect: false, refetchOnReconnect: false,