'use client' import { useRef, useState } from 'react' import { RiAddLine, RiArrowDownSLine } from '@remixicon/react' import Button from '@/app/components/base/button' import { MagicBox } from '@/app/components/base/icons/src/vender/solid/mediaAndDevices' import { FileZip } from '@/app/components/base/icons/src/vender/solid/files' import { Github } from '@/app/components/base/icons/src/vender/solid/general' import InstallFromMarketplace from '@/app/components/plugins/install-plugin/install-from-marketplace' import InstallFromGitHub from '@/app/components/plugins/install-plugin/install-from-github' import InstallFromLocalPackage from '@/app/components/plugins/install-plugin/install-from-local-package' import cn from '@/utils/classnames' import { PortalToFollowElem, PortalToFollowElemContent, PortalToFollowElemTrigger, } from '@/app/components/base/portal-to-follow-elem' import { useSelector as useAppContextSelector } from '@/context/app-context' const InstallPluginDropdown = () => { const fileInputRef = useRef(null) const [isMenuOpen, setIsMenuOpen] = useState(false) const [selectedAction, setSelectedAction] = useState(null) const [selectedFile, setSelectedFile] = useState(null) const { enable_marketplace } = useAppContextSelector(s => s.systemFeatures) const handleFileChange = (event: React.ChangeEvent) => { const file = event.target.files?.[0] if (file) { setSelectedFile(file) setSelectedAction('local') setIsMenuOpen(false) } } return (
setIsMenuOpen(v => !v)}>
Install Form
{[ ...( enable_marketplace ? [{ icon: MagicBox, text: 'Marketplace', action: 'marketplace' }] : [] ), { icon: Github, text: 'GitHub', action: 'github' }, { icon: FileZip, text: 'Local Package File', action: 'local' }, ].map(({ icon: Icon, text, action }) => (
{ if (action === 'local') { fileInputRef.current?.click() } else { setSelectedAction(action) setIsMenuOpen(false) } }} > {text}
))}
{selectedAction === 'marketplace' && setSelectedAction(null)} />} {selectedAction === 'github' && setSelectedAction(null)}/>} {selectedAction === 'local' && selectedFile && ( setSelectedAction(null)}/> ) }
) } export default InstallPluginDropdown