'use client' import { useState, forwardRef } from 'react' import { useSession } from 'next-auth/react' import Modal from './Modal' import Button from './Button' type CreateTeamButtonProps = { /** Optional: Parent kann damit eine Liste refreshen */ setRefetchKey?: (key: string) => void } const CreateTeamButton = forwardRef( ({ setRefetchKey }, ref) => { const { data: session } = useSession() const [teamname, setTeamname] = useState('') const [showModal, setShowModal] = useState(false) const [status, setStatus] = useState<'idle' | 'success' | 'error'>('idle') const [message, setMessage] = useState('') // Modal schließen + Backdrop sicher entfernen const closeCreateModalAndCleanup = () => { const modalEl = document.getElementById('modal-create-team') if (modalEl && (window as any).HSOverlay?.close) { ;(window as any).HSOverlay.close(modalEl) } setShowModal(false) requestAnimationFrame(() => { document.querySelectorAll('.hs-overlay-backdrop').forEach(el => el.remove()) document.querySelectorAll('.hs-overlay[aria-hidden="true"]').forEach(el => { (el as HTMLElement).style.pointerEvents = 'none' ;(el as HTMLElement).style.display = 'none' }) document.body.classList.remove('overflow-hidden') }) } const handleSubmit = async () => { setStatus('idle') setMessage('') if (!teamname.trim()) { setStatus('error') setMessage('Bitte gib einen Teamnamen ein.') return } try { const res = await fetch('/api/team/create', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ teamname, leader: session?.user?.steamId }), }) const result = await res.json() if (!res.ok) throw new Error(result.message || 'Fehler beim Erstellen') setStatus('success') setMessage(`Team "${result.team.name}" wurde erfolgreich erstellt!`) setTeamname('') // Nach kurzer Bestätigung Modal schließen, aufräumen und optional Parent refreshen setTimeout(() => { closeCreateModalAndCleanup() requestAnimationFrame(() => { // Nur aufrufen, wenn vom Parent übergeben setRefetchKey?.(Date.now().toString()) }) }, 800) } catch (err: any) { setStatus('error') setMessage(err.message || 'Fehler beim Erstellen des Teams') } } return (
{ setShowModal(false) closeCreateModalAndCleanup() }} onSave={handleSubmit} closeButtonTitle="Team erstellen" >
{ setTeamname(e.target.value) setStatus('idle') setMessage('') }} placeholder="Gebe einen Teamnamen ein..." className={` py-2.5 sm:py-3 px-4 block w-full rounded-lg sm:text-sm dark:bg-neutral-900 dark:border-neutral-700 dark:text-neutral-400 dark:placeholder-neutral-500 dark:focus:ring-neutral-600 ${ status === 'error' ? 'border-red-500 focus:border-red-500 focus:ring-red-500' : status === 'success' ? 'border-teal-500 focus:border-teal-500 focus:ring-teal-500' : 'border-gray-300 focus:border-blue-500 focus:ring-blue-500' } `} required name="teamname" aria-describedby="teamname-feedback" /> {status !== 'idle' && (
{status === 'error' ? ( <> ) : ( )}
)} {message && (

{message}

)}
) } ) CreateTeamButton.displayName = 'CreateTeamButton' export default CreateTeamButton