mirror of
https://github.com/danny-avila/LibreChat.git
synced 2025-12-18 09:20:15 +01:00
Add support for deleting individual presets
This commit is contained in:
parent
fbeff7a461
commit
48e33fe1e9
6 changed files with 39 additions and 39 deletions
|
|
@ -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>
|
||||||
|
|
|
||||||
|
|
@ -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 "
|
||||||
|
|
|
||||||
|
|
@ -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);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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`;
|
||||||
|
}
|
||||||
|
|
|
||||||
|
|
@ -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> {
|
||||||
|
|
|
||||||
|
|
@ -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(
|
||||||
|
(payload: t.TPreset | {}) =>
|
||||||
|
dataService.deletePreset(payload),
|
||||||
|
{
|
||||||
onSuccess: () => {
|
onSuccess: () => {
|
||||||
queryClient.invalidateQueries([QueryKeys.presets]);
|
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,
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue