From 1387f406a306fd261e9ade2534a96310bc10862d Mon Sep 17 00:00:00 2001 From: Yi Date: Tue, 22 Oct 2024 16:40:27 +0800 Subject: [PATCH] fix: log format --- .../install-from-github/index.tsx | 154 ++++++++++-------- web/app/components/plugins/types.ts | 7 + 2 files changed, 96 insertions(+), 65 deletions(-) diff --git a/web/app/components/plugins/install-plugin/install-from-github/index.tsx b/web/app/components/plugins/install-plugin/install-from-github/index.tsx index 7d3fa3a12b..e34948c479 100644 --- a/web/app/components/plugins/install-plugin/install-from-github/index.tsx +++ b/web/app/components/plugins/install-plugin/install-from-github/index.tsx @@ -6,37 +6,46 @@ import Button from '@/app/components/base/button' import type { Item } from '@/app/components/base/select' import { PortalSelect } from '@/app/components/base/select' import type { GitHubRepoReleaseResponse } from '@/app/components/plugins/types' -import { installPackageFromGitHub } from '@/service/plugins' +import { InstallStep } from '../../types' import Toast from '@/app/components/base/toast' type InstallFromGitHubProps = { onClose: () => void } -type InstallStep = 'url' | 'version' | 'package' | 'installed' - type GitHubUrlInfo = { isValid: boolean owner?: string repo?: string } -const InstallFromGitHub: React.FC = ({ onClose }) => { - const [step, setStep] = useState('url') - const [repoUrl, setRepoUrl] = useState('') - const [selectedVersion, setSelectedVersion] = useState('') - const [selectedPackage, setSelectedPackage] = useState('') - const [releases, setReleases] = useState([]) +type InstallState = { + step: InstallStep + repoUrl: string + selectedVersion: string + selectedPackage: string + releases: GitHubRepoReleaseResponse[] +} - const versions: Item[] = releases.map(release => ({ +const InstallFromGitHub: React.FC = ({ onClose }) => { + const [state, setState] = useState({ + step: InstallStep.url, + repoUrl: '', + selectedVersion: '', + selectedPackage: '', + releases: [], + }) + + const versions: Item[] = state.releases.map(release => ({ value: release.tag_name, name: release.tag_name, })) - const packages: Item[] = selectedVersion - ? (releases - .find(release => release.tag_name === selectedVersion) - ?.assets.map(asset => ({ + const packages: Item[] = state.selectedVersion + ? (state.releases + .find(release => release.tag_name === state.selectedVersion) + ?.assets +.map(asset => ({ value: asset.browser_download_url, name: asset.name, })) || []) @@ -58,25 +67,26 @@ const InstallFromGitHub: React.FC = ({ onClose }) => { } const handleInstall = async () => { - try { - const response = await installPackageFromGitHub({ repo: repoUrl, version: selectedVersion, package: selectedPackage }) - if (response.plugin_unique_identifier) { - setStep('installed') - console.log('Package installed:') - } - else { - console.error('Failed to install package:') - } - } - catch (error) { - console.error('Error installing package:') - } + // try { + // const response = await installPackageFromGitHub({ repo: state.repoUrl, version: state.selectedVersion, package: state.selectedPackage }) + // if (response.plugin_unique_identifier) { + // setState(prevState => ({...prevState, step: InstallStep.installed})) + // console.log('Package installed:') + // } + // else { + // console.error('Failed to install package:') + // } + // } + // catch (error) { + // console.error('Error installing package:') + // } + setState(prevState => ({ ...prevState, step: InstallStep.installed })) } const handleNext = async () => { - switch (step) { - case 'url': { - const { isValid, owner, repo } = parseGitHubUrl(repoUrl) + switch (state.step) { + case InstallStep.url: { + const { isValid, owner, repo } = parseGitHubUrl(state.repoUrl) if (!isValid || !owner || !repo) { Toast.notify({ type: 'error', @@ -97,8 +107,7 @@ const InstallFromGitHub: React.FC = ({ onClose }) => { name: asset.name, })), })) - setReleases(formattedReleases) - setStep('version') + setState(prevState => ({ ...prevState, releases: formattedReleases, step: InstallStep.version })) } catch (error) { Toast.notify({ @@ -108,23 +117,36 @@ const InstallFromGitHub: React.FC = ({ onClose }) => { } break } - case 'version': - setStep('package') + case InstallStep.version: + setState(prevState => ({ ...prevState, step: InstallStep.package })) break - case 'package': + case InstallStep.package: handleInstall() break } } + const handleBack = () => { + setState((prevState) => { + switch (prevState.step) { + case InstallStep.version: + return { ...prevState, step: InstallStep.url } + case InstallStep.package: + return { ...prevState, step: InstallStep.version } + default: + return prevState + } + }) + } + const isInputValid = () => { - switch (step) { - case 'url': - return !!repoUrl.trim() - case 'version': - return !!selectedVersion - case 'package': - return !!selectedPackage + switch (state.step) { + case InstallStep.url: + return !!state.repoUrl.trim() + case InstallStep.version: + return !!state.selectedVersion + case InstallStep.package: + return !!state.selectedPackage default: return true } @@ -132,13 +154,15 @@ const InstallFromGitHub: React.FC = ({ onClose }) => { const InfoRow = ({ label, value }: { label: string; value: string }) => (
-
-
+
+
{label}
-
- {value} +
+
+ {value} +
) @@ -157,12 +181,12 @@ const InstallFromGitHub: React.FC = ({ onClose }) => { Install plugin from GitHub
- {step !== 'installed' && 'Please make sure that you only install plugins from a trusted source.'} + {state.step !== InstallStep.installed && 'Please make sure that you only install plugins from a trusted source.'}
-
- {step === 'url' && ( +
+ {state.step === InstallStep.url && ( <>