'use client' import React, { useState } from 'react' import Modal from '@/app/components/base/modal' import Button from '@/app/components/base/button' import type { Item } from '@/app/components/base/select' import { PortalSelect } from '@/app/components/base/select' type InstallFromGitHubProps = { onClose: () => void } type InstallStep = 'url' | 'version' | 'package' | 'installed' const InstallFromGitHub: React.FC = ({ onClose }) => { const [step, setStep] = useState('url') const [repoUrl, setRepoUrl] = useState('') const [selectedVersion, setSelectedVersion] = useState('') const [selectedPackage, setSelectedPackage] = useState('') // Mock data - replace with actual data fetched from the backend const versions: Item[] = [ { value: '1.0.1', name: '1.0.1' }, { value: '1.2.0', name: '1.2.0' }, { value: '1.2.1', name: '1.2.1' }, { value: '1.3.2', name: '1.3.2' }, ] const packages: Item[] = [ { value: 'package1', name: 'Package 1' }, { value: 'package2', name: 'Package 2' }, { value: 'package3', name: 'Package 3' }, ] const handleNext = () => { switch (step) { case 'url': // TODO: Validate URL and fetch versions setStep('version') break case 'version': // TODO: Validate version and fetch packages setStep('package') break case 'package': // TODO: Handle installation setStep('installed') break } } const isInputValid = () => { switch (step) { case 'url': return !!repoUrl.trim() case 'version': return !!selectedVersion case 'package': return !!selectedPackage default: return true } } const InfoRow = ({ label, value }: { label: string; value: string }) => (
{label}
{value}
) return (
Install plugin from GitHub
{step !== 'installed' && 'Please make sure that you only install plugins from a trusted source.'}
{step === 'url' && ( <> setRepoUrl(e.target.value)} // TODO: needs to verify the url className='flex items-center self-stretch rounded-lg border border-components-input-border-active bg-components-input-bg-active shadows-shadow-xs p-2 gap-[2px] flex-grow overflow-hidden text-components-input-text-filled text-ellipsis system-sm-regular' placeholder='Please enter GitHub repo URL' /> )} {step === 'version' && ( <> setSelectedVersion(item.value as string)} items={versions} placeholder="Please select a version" popupClassName='w-[432px] z-[1001]' /> )} {step === 'package' && ( <> setSelectedPackage(item.value as string)} items={packages} placeholder="Please select a package" popupClassName='w-[432px] z-[1001]' /> )} {step === 'installed' && ( <>
The plugin has been installed successfully.
{[ { label: 'Repository', value: repoUrl }, { label: 'Version', value: selectedVersion }, { label: 'Package', value: selectedPackage }, ].map(({ label, value }) => ( ))}
)}
{step === 'installed' ? ( ) : ( <> )}
) } export default InstallFromGitHub