| import { useFormContext } from 'react-hook-form'; | |
| import { | |
| Label, | |
| Button, | |
| OGDialog, | |
| TrashIcon, | |
| useToastContext, | |
| OGDialogTrigger, | |
| OGDialogTemplate, | |
| } from '@librechat/client'; | |
| import type { Agent, AgentCreateParams } from 'librechat-data-provider'; | |
| import type { UseMutationResult } from '@tanstack/react-query'; | |
| import { logger, getDefaultAgentFormValues } from '~/utils'; | |
| import { useLocalize, useSetIndexOptions } from '~/hooks'; | |
| import { useDeleteAgentMutation } from '~/data-provider'; | |
| import { useChatContext } from '~/Providers'; | |
| import { isEphemeralAgent } from '~/common'; | |
| export default function DeleteButton({ | |
| agent_id, | |
| setCurrentAgentId, | |
| createMutation, | |
| }: { | |
| agent_id: string; | |
| setCurrentAgentId: React.Dispatch<React.SetStateAction<string | undefined>>; | |
| createMutation: UseMutationResult<Agent, Error, AgentCreateParams>; | |
| }) { | |
| const localize = useLocalize(); | |
| const { reset } = useFormContext(); | |
| const { showToast } = useToastContext(); | |
| const { conversation } = useChatContext(); | |
| const { setOption } = useSetIndexOptions(); | |
| const deleteAgent = useDeleteAgentMutation({ | |
| onSuccess: (_, vars, context) => { | |
| const updatedList = context as Agent[] | undefined; | |
| if (!updatedList) { | |
| return; | |
| } | |
| showToast({ | |
| message: localize('com_ui_agent_deleted'), | |
| status: 'success', | |
| }); | |
| if (createMutation.data?.id ?? '') { | |
| logger.log('agents', 'resetting createMutation'); | |
| createMutation.reset(); | |
| } | |
| const firstAgent = updatedList[0] as Agent | undefined; | |
| if (!firstAgent) { | |
| setCurrentAgentId(undefined); | |
| reset(getDefaultAgentFormValues()); | |
| return setOption('agent_id')(''); | |
| } | |
| if (vars.agent_id === conversation?.agent_id) { | |
| setOption('model')(''); | |
| return setOption('agent_id')(firstAgent.id); | |
| } | |
| const currentAgent = updatedList.find((agent) => agent.id === conversation?.agent_id); | |
| if (currentAgent) { | |
| setCurrentAgentId(currentAgent.id); | |
| } | |
| setCurrentAgentId(firstAgent.id); | |
| }, | |
| onError: (error) => { | |
| console.error(error); | |
| showToast({ | |
| message: localize('com_ui_agent_delete_error'), | |
| status: 'error', | |
| }); | |
| }, | |
| }); | |
| if (isEphemeralAgent(agent_id)) { | |
| return null; | |
| } | |
| return ( | |
| <OGDialog> | |
| <OGDialogTrigger asChild> | |
| <Button | |
| size="sm" | |
| variant="outline" | |
| aria-label={localize('com_ui_delete') + ' ' + localize('com_ui_agent')} | |
| type="button" | |
| > | |
| <div className="flex w-full items-center justify-center gap-2 text-red-500"> | |
| <TrashIcon /> | |
| </div> | |
| </Button> | |
| </OGDialogTrigger> | |
| <OGDialogTemplate | |
| title={localize('com_ui_delete') + ' ' + localize('com_ui_agent')} | |
| className="max-w-[450px]" | |
| main={ | |
| <> | |
| <div className="flex w-full flex-col items-center gap-2"> | |
| <div className="grid w-full items-center gap-2"> | |
| <Label htmlFor="delete-agent" className="text-left text-sm font-medium"> | |
| {localize('com_ui_delete_agent_confirm')} | |
| </Label> | |
| </div> | |
| </div> | |
| </> | |
| } | |
| selection={{ | |
| selectHandler: () => deleteAgent.mutate({ agent_id }), | |
| selectClasses: 'bg-red-600 hover:bg-red-700 dark:hover:bg-red-800 text-white', | |
| selectText: localize('com_ui_delete'), | |
| }} | |
| /> | |
| </OGDialog> | |
| ); | |
| } | |