'use client' import React, { useCallback, useState } from 'react' import Modal from '@/app/components/base/modal' import type { PluginDeclaration } from '../../types' import { InstallStep } from '../../types' import Uploading from './steps/uploading' import Install from './steps/install' import Installed from './steps/installed' import { useTranslation } from 'react-i18next' import { toolNotionManifest } from '../../card/card-mock' const i18nPrefix = 'plugin.installModal' type InstallFromLocalPackageProps = { file: File onSuccess: () => void onClose: () => void } const InstallFromLocalPackage: React.FC = ({ file, onClose, }) => { const { t } = useTranslation() // uploading -> readyToInstall -> installed const [step, setStep] = useState(InstallStep.uploading) const [uniqueIdentifier, setUniqueIdentifier] = useState(null) const getTitle = useCallback(() => { if (step === InstallStep.installed) return t(`${i18nPrefix}.installedSuccessfully`) return t(`${i18nPrefix}.installPlugin`) }, []) const [manifest, setManifest] = useState(toolNotionManifest) const handleUploaded = useCallback((result: { uniqueIdentifier: string manifest: PluginDeclaration }) => { setUniqueIdentifier(result.uniqueIdentifier) setManifest(result.manifest) setStep(InstallStep.readyToInstall) }, []) const handleInstalled = useCallback(async () => { setStep(InstallStep.installed) }, []) return (
{getTitle()}
{step === InstallStep.uploading && ( )} { step === InstallStep.readyToInstall && ( ) } { step === InstallStep.installed && ( ) }
) } export default InstallFromLocalPackage