'use client'; import { useState, useEffect } from 'react'; import { useParams, useRouter } from 'next/navigation'; interface InviteData { inviter_name: string | null; inviter_avatar: string | null; invitee_name: string | null; invitee_email: string | null; task_title: string | null; task_description: string | null; due_at: string | null; message: string | null; } export default function InvitePage() { const { token } = useParams(); const router = useRouter(); const [invite, setInvite] = useState(null); const [name, setName] = useState(''); const [email, setEmail] = useState(''); const [password, setPassword] = useState(''); const [loading, setLoading] = useState(true); const [error, setError] = useState(''); const [accepting, setAccepting] = useState(false); useEffect(() => { fetch(`/api/v1/invite/${token}`) .then(r => { if (!r.ok) return r.json().then(d => { throw new Error(d.message || 'Not found'); }); return r.json(); }) .then(d => { setInvite(d.data); setName(d.data?.invitee_name || ''); setEmail(d.data?.invitee_email || ''); }) .catch(e => setError(e.message || 'Pozvanka nenalezena')) .finally(() => setLoading(false)); }, [token]); async function accept() { if (!name || name.trim().length < 2) { setError('Jmeno musi mit alespon 2 znaky'); return; } setAccepting(true); setError(''); try { const res = await fetch(`/api/v1/invite/${token}/accept`, { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ name, password: password || undefined, email: email || invite?.invitee_email }) }); const data = await res.json(); if (!res.ok) { throw new Error(data.message || 'Chyba pri prijimani'); } if (data.data?.token) { localStorage.setItem('taskteam_token', data.data.token); localStorage.setItem('taskteam_user', JSON.stringify(data.data.user)); router.push('/tasks'); } } catch (e) { setError(e instanceof Error ? e.message : 'Chyba pri prijimani'); } setAccepting(false); } if (loading) { return (
); } if (error && !invite) { return (
😕

Pozvanka neni platna

{error}

); } return (
🎉

Task Team

{invite?.inviter_avatar ? ( ) : (
{invite?.inviter_name?.[0]?.toUpperCase() || '?'}
)} {invite?.inviter_name || 'Nekdo'} te zve
📋 {invite?.task_title || 'Task'}
{invite?.task_description && (

{invite.task_description}

)} {invite?.due_at && (
📅 {new Date(invite.due_at).toLocaleDateString('cs-CZ')}
)} {invite?.message && (

“{invite.message}”

)}
{error && (
{error}
)}
setName(e.target.value)} placeholder="Tvoje jmeno" className="w-full px-4 py-3 rounded-lg border dark:border-gray-600 bg-white dark:bg-gray-800 focus:ring-2 focus:ring-blue-500 outline-none" /> {!invite?.invitee_email && ( setEmail(e.target.value)} placeholder="Tvuj email" className="w-full px-4 py-3 rounded-lg border dark:border-gray-600 bg-white dark:bg-gray-800 focus:ring-2 focus:ring-blue-500 outline-none" /> )} setPassword(e.target.value)} placeholder="Heslo (min 6 znaku)" className="w-full px-4 py-3 rounded-lg border dark:border-gray-600 bg-white dark:bg-gray-800 focus:ring-2 focus:ring-blue-500 outline-none" />
); }