import React, { useCallback, useState } from 'react'; import { QueryKeys } from 'librechat-data-provider'; import { useQueryClient } from '@tanstack/react-query'; import { useParams, useNavigate } from 'react-router-dom'; import type { TMessage } from 'librechat-data-provider'; import { useDeleteConversationMutation } from '~/data-provider'; import { OGDialog, OGDialogTrigger, Label, Tooltip, TooltipContent, TooltipProvider, TooltipTrigger, } from '~/components/ui'; import OGDialogTemplate from '~/components/ui/OGDialogTemplate'; import { TrashIcon } from '~/components/svg'; import { useLocalize, useNewConvo } from '~/hooks'; type DeleteButtonProps = { conversationId: string; retainView: () => void; title: string; className?: string; showDeleteDialog?: boolean; setShowDeleteDialog?: (value: boolean) => void; }; export default function DeleteButton({ conversationId, retainView, title, className = '', showDeleteDialog, setShowDeleteDialog, }: DeleteButtonProps) { const localize = useLocalize(); const navigate = useNavigate(); const queryClient = useQueryClient(); const { newConversation } = useNewConvo(); const { conversationId: currentConvoId } = useParams(); const [open, setOpen] = useState(false); const deleteConvoMutation = useDeleteConversationMutation({ onSuccess: () => { if (currentConvoId === conversationId || currentConvoId === 'new') { newConversation(); navigate('/c/new', { replace: true }); } retainView(); }, }); const confirmDelete = useCallback(() => { const messages = queryClient.getQueryData([QueryKeys.messages, conversationId]); const thread_id = messages?.[messages.length - 1]?.thread_id; deleteConvoMutation.mutate({ conversationId, thread_id, source: 'button' }); }, [conversationId, deleteConvoMutation, queryClient]); const dialogContent = (
} selection={{ selectHandler: confirmDelete, selectClasses: 'bg-red-700 dark:bg-red-600 hover:bg-red-800 dark:hover:bg-red-800 text-white', selectText: localize('com_ui_delete'), }} /> ); if (showDeleteDialog !== undefined && setShowDeleteDialog !== undefined) { return ( {dialogContent} ); } return ( {localize('com_ui_delete')} {dialogContent} ); }