'use client' import { useEffect, 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' const InstallPluginDropdown = () => { const fileInputRef = useRef(null) const [isMenuOpen, setIsMenuOpen] = useState(false) const [selectedAction, setSelectedAction] = useState(null) const [selectedFile, setSelectedFile] = useState(null) const menuRef = useRef(null) const handleFileChange = (event: React.ChangeEvent) => { const file = event.target.files?.[0] if (file) { setSelectedFile(file) setSelectedAction('local') setIsMenuOpen(false) } } useEffect(() => { const handleClickOutside = (event: MouseEvent) => { if (menuRef.current && !menuRef.current.contains(event.target as Node)) setIsMenuOpen(false) } document.addEventListener('mousedown', handleClickOutside) return () => { document.removeEventListener('mousedown', handleClickOutside) } }, []) return (
{isMenuOpen && (
Install Form {[ { 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