'use client' import type { FC } from 'react' import React, { useCallback, useRef, useState } from 'react' import { useTranslation } from 'react-i18next' import { PluginSource } from '../types' 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 = { source: PluginSource onInfo: () => void onCheckVersion: () => void onRemove: () => void detailUrl: string } const OperationDropdown: FC = ({ source, detailUrl, onInfo, onCheckVersion, onRemove, }) => { 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 (
{source === PluginSource.github && (
{ 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')}
)} {source === PluginSource.github && (
{ 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')}
)} {(source === PluginSource.marketplace || source === PluginSource.github) && ( {t('plugin.detailPanel.operation.viewDetail')} )} {(source === PluginSource.marketplace || source === PluginSource.github) && (
)}
{ 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)