'use client'; import { useState } from 'react'; import { signUp, signIn } from '@/lib/auth-client'; import { useRouter } from 'next/navigation'; import Link from 'next/link'; import { Button } from '@/components/ui/Button'; import { Input } from '@/components/ui/Input'; export default function SignUpPage() { const router = useRouter(); const [formData, setFormData] = useState({ name: '', email: '', password: '', confirmPassword: '', }); const [errors, setErrors] = useState>({}); const [isLoading, setIsLoading] = useState(false); const validateForm = () => { const newErrors: Record = {}; // Name validation if (!formData.name.trim()) { newErrors.name = 'Meno je povinné'; } else if (formData.name.length < 2) { newErrors.name = 'Meno musí mať aspoň 2 znaky'; } // Email validation const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/; if (!formData.email) { newErrors.email = 'Email je povinný'; } else if (!emailRegex.test(formData.email)) { newErrors.email = 'Neplatný formát emailu'; } // Password validation if (!formData.password) { newErrors.password = 'Heslo je povinné'; } else if (formData.password.length < 8) { newErrors.password = 'Heslo musí mať aspoň 8 znakov'; } else if (!/(?=.*[a-z])/.test(formData.password)) { newErrors.password = 'Heslo musí obsahovať malé písmeno'; } else if (!/(?=.*[A-Z])/.test(formData.password)) { newErrors.password = 'Heslo musí obsahovať veľké písmeno'; } else if (!/(?=.*\d)/.test(formData.password)) { newErrors.password = 'Heslo musí obsahovať číslo'; } // Confirm password validation if (formData.password !== formData.confirmPassword) { newErrors.confirmPassword = 'Heslá sa nezhodujú'; } setErrors(newErrors); return Object.keys(newErrors).length === 0; }; const handleSubmit = async (e: React.FormEvent) => { e.preventDefault(); if (!validateForm()) { return; } setIsLoading(true); setErrors({}); try { // Register user with Better Auth await signUp.email({ email: formData.email, password: formData.password, name: formData.name, }, { onSuccess: async () => { // Auto sign in after registration await signIn.email({ email: formData.email, password: formData.password, }, { onSuccess: () => { router.push('/dashboard'); router.refresh(); }, onError: () => { // Registration successful but login failed router.push('/auth/signin?registered=true'); }, }); }, onError: (ctx) => { setErrors({ general: ctx.error.message || 'Registrácia zlyhala' }); }, }); } catch (error) { setErrors({ general: 'Nastala chyba. Skúste to znova.' }); } finally { setIsLoading(false); } }; return (
{/* Back Button */} Späť na hlavnú stránku {/* Header */}

Vytvorte si účet

Pripojte sa k športovej komunite

{/* Form */}
{errors.general && (
{errors.general}
)}
setFormData({ ...formData, name: e.target.value })} placeholder="Ján Novák" className={errors.name ? 'border-red-500' : ''} disabled={isLoading} /> {errors.name && (

{errors.name}

)}
setFormData({ ...formData, email: e.target.value })} placeholder="jan.novak@email.com" className={errors.email ? 'border-red-500' : ''} disabled={isLoading} /> {errors.email && (

{errors.email}

)}
setFormData({ ...formData, password: e.target.value })} placeholder="••••••••" className={errors.password ? 'border-red-500' : ''} disabled={isLoading} /> {errors.password && (

{errors.password}

)}

Min. 8 znakov, veľké písmeno, malé písmeno a číslo

setFormData({ ...formData, confirmPassword: e.target.value })} placeholder="••••••••" className={errors.confirmPassword ? 'border-red-500' : ''} disabled={isLoading} /> {errors.confirmPassword && (

{errors.confirmPassword}

)}
{/* OAuth Divider */}
Alebo sa zaregistrujte pomocou
{/* OAuth Buttons */}

Už máte účet?{' '} Prihláste sa

); }