import { useState, useId, useRef, memo } from 'react'; import * as Menu from '@ariakit/react/menu'; import { Ellipsis, Share2, Copy, Archive, Pen, Trash } from 'lucide-react'; import type { MouseEvent } from 'react'; import type * as t from '~/common'; import { useDuplicateConversationMutation, useGetStartupConfig } from '~/data-provider'; import { useLocalize, useArchiveHandler, useNavigateToConvo } from '~/hooks'; import { useToastContext, useChatContext } from '~/Providers'; import { DropdownPopup } from '~/components/ui'; import DeleteButton from './DeleteButton'; import ShareButton from './ShareButton'; import { cn } from '~/utils'; function ConvoOptions({ conversationId, title, retainView, renameHandler, isPopoverActive, setIsPopoverActive, isActiveConvo, }: { conversationId: string | null; title: string | null; retainView: () => void; renameHandler: (e: MouseEvent) => void; isPopoverActive: boolean; setIsPopoverActive: React.Dispatch>; isActiveConvo: boolean; }) { const localize = useLocalize(); const { index } = useChatContext(); const { data: startupConfig } = useGetStartupConfig(); const archiveHandler = useArchiveHandler(conversationId, true, retainView); const { navigateToConvo } = useNavigateToConvo(index); const { showToast } = useToastContext(); const shareButtonRef = useRef(null); const deleteButtonRef = useRef(null); const [showShareDialog, setShowShareDialog] = useState(false); const [showDeleteDialog, setShowDeleteDialog] = useState(false); const duplicateConversation = useDuplicateConversationMutation({ onSuccess: (data) => { navigateToConvo(data.conversation); showToast({ message: localize('com_ui_duplication_success'), status: 'success', }); }, onMutate: () => { showToast({ message: localize('com_ui_duplication_processing'), status: 'info', }); }, onError: () => { showToast({ message: localize('com_ui_duplication_error'), status: 'error', }); }, }); const shareHandler = () => { setShowShareDialog(true); }; const deleteHandler = () => { setShowDeleteDialog(true); }; const duplicateHandler = () => { setIsPopoverActive(false); duplicateConversation.mutate({ conversationId: conversationId ?? '', }); }; const dropdownItems: t.MenuItemProps[] = [ { label: localize('com_ui_share'), onClick: shareHandler, icon: , show: startupConfig && startupConfig.sharedLinksEnabled, /** NOTE: THE FOLLOWING PROPS ARE REQUIRED FOR MENU ITEMS THAT OPEN DIALOGS */ hideOnClick: false, ref: shareButtonRef, render: (props) =>