import React from "react"; import { NavLink, useParams, useNavigate } from "react-router"; import { useTranslation } from "react-i18next"; import { I18nKey } from "#/i18n/declaration"; import { ConversationCard } from "./conversation-card"; import { useUserConversations } from "#/hooks/query/use-user-conversations"; import { useDeleteConversation } from "#/hooks/mutation/use-delete-conversation"; import { ConfirmDeleteModal } from "./confirm-delete-modal"; import { LoadingSpinner } from "#/components/shared/loading-spinner"; import { ExitConversationModal } from "./exit-conversation-modal"; import { useClickOutsideElement } from "#/hooks/use-click-outside-element"; interface ConversationPanelProps { onClose: () => void; } export function ConversationPanel({ onClose }: ConversationPanelProps) { const { t } = useTranslation(); const { conversationId: currentConversationId } = useParams(); const ref = useClickOutsideElement(onClose); const navigate = useNavigate(); const [confirmDeleteModalVisible, setConfirmDeleteModalVisible] = React.useState(false); const [ confirmExitConversationModalVisible, setConfirmExitConversationModalVisible, ] = React.useState(false); const [selectedConversationId, setSelectedConversationId] = React.useState< string | null >(null); const { data: conversations, isFetching, error } = useUserConversations(); const { mutate: deleteConversation } = useDeleteConversation(); const handleDeleteProject = (conversationId: string) => { setConfirmDeleteModalVisible(true); setSelectedConversationId(conversationId); }; const handleConfirmDelete = () => { if (selectedConversationId) { deleteConversation( { conversationId: selectedConversationId }, { onSuccess: () => { if (selectedConversationId === currentConversationId) { navigate("/"); } }, }, ); } }; return (
{isFetching && (
)} {error && (

{error.message}

)} {conversations?.length === 0 && (

{t(I18nKey.CONVERSATION$NO_CONVERSATIONS)}

)} {conversations?.map((project) => ( {({ isActive }) => ( handleDeleteProject(project.conversation_id)} title={project.title} selectedRepository={project.selected_repository} lastUpdatedAt={project.last_updated_at} createdAt={project.created_at} status={project.status} conversationId={project.conversation_id} /> )} ))} {confirmDeleteModalVisible && ( { handleConfirmDelete(); setConfirmDeleteModalVisible(false); }} onCancel={() => setConfirmDeleteModalVisible(false)} /> )} {confirmExitConversationModalVisible && ( { onClose(); }} onClose={() => setConfirmExitConversationModalVisible(false)} /> )}
); }