import { useStore } from '@nanostores/react'; import * as Dialog from '@radix-ui/react-dialog'; import { motion } from 'framer-motion'; import React, { Suspense, useEffect, useState } from 'react'; import { useChatDeployment } from '~/lib/hooks/useChatDeployment'; import { netlifyConnection } from '~/lib/stores/netlify'; import { DeploymentPlatformEnum } from '~/types/deployment'; const NetlifyConnection = React.lazy(() => import('~/components/header/connections/NetlifyConnection')); interface DeployToNetlifyDialogProps { isOpen: boolean; deploying: boolean; onClose: () => void; onDeploy: () => Promise; } export function DeployToNetlifyDialog({ deploying, isOpen, onClose, onDeploy }: DeployToNetlifyDialogProps) { const { getDeploymentByPlatform } = useChatDeployment(); const connection = useStore(netlifyConnection); const [isNetlifyConnected, setIsNetlifyConnected] = useState(false); const [showConnectionForm, setShowConnectionForm] = useState(false); useEffect(() => { if (connection.isConnect) { setIsNetlifyConnected(true); if (isOpen && !isNetlifyConnected && !showConnectionForm) { setShowConnectionForm(false); } } else { setIsNetlifyConnected(false); if (isOpen && !showConnectionForm) { setShowConnectionForm(true); } } }, [connection.isConnect, isOpen, isNetlifyConnected]); const checkNetlifyConnection = () => { if (connection.isConnect) { setIsNetlifyConnected(true); } }; const handleDeploy = async () => { if (!connection.isConnect) { return; } await onDeploy(); }; const handleClose = () => { if (!deploying) { onClose(); setShowConnectionForm(false); } }; const deploymentInfo = getDeploymentByPlatform(DeploymentPlatformEnum.NETLIFY); return ( !open && handleClose()}>
部署到 Netlify

{isNetlifyConnected ? '部署到 Netlify' : '连接 Netlify 账户'}

{isNetlifyConnected ? '您的项目将被部署到 Netlify。点击"部署"按钮开始部署。' : '需要连接 Netlify 账户才能部署项目。请在此页面完成连接。'}

{isNetlifyConnected ? ( {deploying ? ( <>
部署中... ) : ( <>
{!!deploymentInfo?.id ? '覆盖已有网站' : '部署到 Netlify'} )} ) : ( { checkNetlifyConnection(); setTimeout(checkNetlifyConnection, 500); }} className="px-4 py-2 rounded-lg bg-upage-elements-item-backgroundAccent text-upage-elements-item-contentAccent text-sm hover:bg-upage-elements-item-backgroundAccent/90 inline-flex items-center gap-2" whileHover={{ scale: 1.02 }} whileTap={{ scale: 0.98 }} >
刷新连接状态 )}
); }