import { useCallback, useState } from 'react' import { Thread } from '@janhq/core' import { motion as m } from 'framer-motion' import { useAtomValue, useSetAtom } from 'jotai' import { MoreHorizontalIcon } from 'lucide-react' import { twMerge } from 'tailwind-merge' import useThreads from '@/hooks/useThreads' import ModalCleanThread from '../ModalCleanThread' import ModalDeleteThread from '../ModalDeleteThread' import ModalEditTitleThread from '../ModalEditTitleThread' import TypingAnimated from '../TypingAnimated' import { editMessageAtom } from '@/helpers/atoms/ChatMessage.atom' import { getActiveThreadIdAtom, getThreadIdsShouldAnimateTitleAtom, } from '@/helpers/atoms/Thread.atom' type Props = { thread: Thread } const ThreadItem: React.FC = ({ thread }) => { const activeThreadId = useAtomValue(getActiveThreadIdAtom) const getThreadIdsShouldAnimateTitle = useAtomValue( getThreadIdsShouldAnimateTitleAtom ) const setEditMessage = useSetAtom(editMessageAtom) const { setActiveThread } = useThreads() const [contextMenu, setContextMenu] = useState<{ visible: boolean thread?: Thread }>({ visible: false, thread: undefined, }) const onContextMenu = (event: React.MouseEvent, thread: Thread) => { event.preventDefault() setContextMenu({ visible: true, thread, }) } const closeContextMenu = () => { setContextMenu({ visible: false, thread: undefined, }) } const onThreadClicked = useCallback( (thread: Thread) => { setActiveThread(thread.id) setEditMessage('') }, [setActiveThread, setEditMessage] ) return ( onThreadClicked(thread)} onContextMenu={(e) => onContextMenu(e, thread)} onMouseLeave={closeContextMenu} >
{getThreadIdsShouldAnimateTitle.includes(thread.id) ? ( ) : ( {thread.title} )}
) } export default ThreadItem