'use client' import type { PluginDeclaration, UpdateFromGitHubPayload } from '../../../types' import { Button } from '@langgenius/dify-ui/button' import { Select, SelectContent, SelectItem, SelectItemIndicator, SelectItemText, SelectTrigger } from '@langgenius/dify-ui/select' import * as React from 'react' import { useTranslation } from 'react-i18next' import Badge from '@/app/components/base/badge' import { handleUpload } from '../../hooks' const i18nPrefix = 'installFromGitHub' type SelectOption = { value: string | number name: string } type SelectPackageProps = { updatePayload: UpdateFromGitHubPayload repoUrl: string selectedVersion: string versions: SelectOption[] onSelectVersion: (item: SelectOption) => void selectedPackage: string packages: SelectOption[] onSelectPackage: (item: SelectOption) => void onUploaded: (result: { uniqueIdentifier: string manifest: PluginDeclaration }) => void onFailed: (errorMsg: string) => void onBack: () => void } const SelectPackage: React.FC = ({ updatePayload, repoUrl, selectedVersion, versions, onSelectVersion, selectedPackage, packages, onSelectPackage, onUploaded, onFailed, onBack, }) => { const { t } = useTranslation() const isEdit = Boolean(updatePayload) const [isUploading, setIsUploading] = React.useState(false) const selectedVersionOption = versions.find(item => String(item.value) === selectedVersion) ?? null const selectedPackageOption = packages.find(item => String(item.value) === selectedPackage) ?? null const handleUploadPackage = async () => { if (isUploading) return setIsUploading(true) try { const repo = repoUrl.replace('https://github.com/', '') await handleUpload(repo, selectedVersion, selectedPackage, (GitHubPackage) => { onUploaded({ uniqueIdentifier: GitHubPackage.unique_identifier, manifest: GitHubPackage.manifest, }) }) } catch (e: any) { if (e.response?.message) onFailed(e.response?.message) else onFailed(t(`${i18nPrefix}.uploadFailed`, { ns: 'plugin' })) } finally { setIsUploading(false) } } return ( <>
{!isEdit && ( )}
) } export default SelectPackage