Spaces:
Running
Running
import type { FC } from 'react' | |
import { | |
memo, | |
useRef, | |
} from 'react' | |
import { useHover } from 'ahooks' | |
import type { ConversationItem } from '@/models/share' | |
import { MessageDotsCircle } from '@/app/components/base/icons/src/vender/solid/communication' | |
import ItemOperation from '@/app/components/explore/item-operation' | |
type ItemProps = { | |
isPin?: boolean | |
item: ConversationItem | |
onOperate: (type: string, item: ConversationItem) => void | |
onChangeConversation: (conversationId: string) => void | |
currentConversationId: string | |
} | |
const Item: FC<ItemProps> = ({ | |
isPin, | |
item, | |
onOperate, | |
onChangeConversation, | |
currentConversationId, | |
}) => { | |
const ref = useRef(null) | |
const isHovering = useHover(ref) | |
return ( | |
<div | |
ref={ref} | |
key={item.id} | |
className={` | |
flex mb-0.5 last-of-type:mb-0 py-1.5 pl-3 pr-1.5 text-sm font-medium text-gray-700 | |
rounded-lg cursor-pointer hover:bg-gray-50 group | |
${currentConversationId === item.id && 'text-primary-600 bg-primary-50'} | |
`} | |
onClick={() => onChangeConversation(item.id)} | |
> | |
<MessageDotsCircle className={`shrink-0 mt-1 mr-2 w-4 h-4 text-gray-400 ${currentConversationId === item.id && 'text-primary-600'}`} /> | |
<div className='grow py-0.5 break-all' title={item.name}>{item.name}</div> | |
{item.id !== '' && ( | |
<div className='shrink-0 h-6' onClick={e => e.stopPropagation()}> | |
<ItemOperation | |
isPinned={!!isPin} | |
isItemHovering={isHovering} | |
togglePin={() => onOperate(isPin ? 'unpin' : 'pin', item)} | |
isShowDelete | |
isShowRenameConversation | |
onRenameConversation={() => onOperate('rename', item)} | |
onDelete={() => onOperate('delete', item)} | |
/> | |
</div> | |
)} | |
</div> | |
) | |
} | |
export default memo(Item) | |