'use client'; import { useState, useEffect, useActionState, useTransition } from 'react'; import { Modal } from '@/components/ui/Modal'; import { LoadingSpinner } from '@/components/ui/LoadingSpinner'; import { createServerAction, type ServerActionResult } from '@/lib/actions/server-management'; import { useServerCreationPopup } from '@/lib/context/ServerCreationPopupContext'; interface CreateServerModalProps { isOpen: boolean; onClose: () => void; } const initialState: ServerActionResult = { success: false, message: '', data: undefined }; export function CreateServerModal({ isOpen, onClose }: CreateServerModalProps) { const [serverName, setServerName] = useState(''); const [submittedName, setSubmittedName] = useState(''); const [isSubmitting, setIsSubmitting] = useState(false); const [isPending, setTransition] = useTransition(); const [state, formAction] = useActionState(createServerAction, initialState); const { showPopup } = useServerCreationPopup(); useEffect(() => { if (state.success && state.data?.id) { showPopup(state.data.id, submittedName); onClose(); setIsSubmitting(false); } }, [state.success, state.data, showPopup, onClose, submittedName]); const handleSubmit = (e: React.FormEvent) => setTransition(async () => { e.preventDefault(); if (!serverName.trim()) { return; } setIsSubmitting(true); const formData = new FormData(); formData.append('name', serverName.trim()); formAction(formData); setSubmittedName(serverName.trim()); setServerName(''); }); const handleClose = () => { if (isSubmitting) { return; } onClose(); setServerName(''); setIsSubmitting(false); }; return ( {!state.success && state.message && (
{state.message}
)}
setServerName(e.target.value)} required disabled={isSubmitting || isPending} className="mt-1 block w-full rounded-md border border-gray-600 bg-gray-700 px-3 py-2 text-white focus:border-blue-500 focus:ring-1 focus:ring-blue-500 focus:outline-none disabled:opacity-50" placeholder="Enter server name..." />
); }