'use client' import type { FC } from 'react' import React, { useEffect, useRef, useState } from 'react' import { RiDeleteBinLine, RiEditLine, RiMoreFill, RiPushpinLine, RiUnpinLine, } from '@remixicon/react' import { useTranslation } from 'react-i18next' import { useBoolean } from 'ahooks' import { PortalToFollowElem, PortalToFollowElemContent, PortalToFollowElemTrigger } from '@/app/components/base/portal-to-follow-elem' import ActionButton, { ActionButtonState } from '@/app/components/base/action-button' import cn from '@/utils/classnames' type Props = { isActive?: boolean isItemHovering?: boolean isPinned: boolean isShowRenameConversation?: boolean onRenameConversation?: () => void isShowDelete: boolean togglePin: () => void onDelete: () => void } const Operation: FC = ({ isActive, isItemHovering, isPinned, togglePin, isShowRenameConversation, onRenameConversation, isShowDelete, onDelete, }) => { const { t } = useTranslation() const [open, setOpen] = useState(false) const ref = useRef(null) const [isHovering, { setTrue: setIsHovering, setFalse: setNotHovering }] = useBoolean(false) useEffect(() => { if (!isItemHovering && !isHovering) setOpen(false) }, [isItemHovering, isHovering]) return ( setOpen(v => !v)} >
{ e.stopPropagation() }} >
{isPinned && } {!isPinned && } {isPinned ? t('explore.sidebar.action.unpin') : t('explore.sidebar.action.pin')}
{isShowRenameConversation && (
{t('explore.sidebar.action.rename')}
)} {isShowDelete && (
{t('explore.sidebar.action.delete')}
)}
) } export default React.memo(Operation)