'use client' import type { FC } from 'react' import React, { useCallback, useRef, useState } from 'react' import { useTranslation } from 'react-i18next' import { RiArrowRightUpLine, RiMoreFill } from '@remixicon/react' import ActionButton from '@/app/components/base/action-button' // import Button from '@/app/components/base/button' import { PortalToFollowElem, PortalToFollowElemContent, PortalToFollowElemTrigger, } from '@/app/components/base/portal-to-follow-elem' import cn from '@/utils/classnames' type Props = { onInfo: () => void onCheckVersion: () => void onRemove: () => void detailUrl: string } const OperationDropdown: FC = ({ onInfo, onCheckVersion, onRemove, detailUrl, }) => { const { t } = useTranslation() const [open, doSetOpen] = useState(false) const openRef = useRef(open) const setOpen = useCallback((v: boolean) => { doSetOpen(v) openRef.current = v }, [doSetOpen]) const handleTrigger = useCallback(() => { setOpen(!openRef.current) }, [setOpen]) return (
{ onInfo() handleTrigger() }} className='px-3 py-1.5 rounded-lg text-text-secondary system-md-regular cursor-pointer hover:bg-state-base-hover' >{t('plugin.detailPanel.operation.info')}
{ onCheckVersion() handleTrigger() }} className='px-3 py-1.5 rounded-lg text-text-secondary system-md-regular cursor-pointer hover:bg-state-base-hover' >{t('plugin.detailPanel.operation.checkUpdate')}
{t('plugin.detailPanel.operation.viewDetail')}
{ onRemove() handleTrigger() }} className='px-3 py-1.5 rounded-lg text-text-secondary system-md-regular cursor-pointer hover:text-text-destructive hover:bg-state-destructive-hover' >{t('plugin.detailPanel.operation.remove')}
) } export default React.memo(OperationDropdown)