import React, { useState } from 'react'; import { Link, useNavigate } from 'react-router-dom'; import { useAuthStore } from '../../stores/authStore'; export function RegisterPage() { const [username, setUsername] = useState(''); const [displayName, setDisplayName] = useState(''); const [password, setPassword] = useState(''); const [error, setError] = useState(''); const register = useAuthStore((s) => s.register); const isLoading = useAuthStore((s) => s.isLoading); const navigate = useNavigate(); const handleSubmit = async (e: React.FormEvent) => { e.preventDefault(); setError(''); if (!username.trim()) { setError('Username is required'); return; } if (username.trim().length < 3 || username.trim().length > 32) { setError('Username must be between 3 and 32 characters'); return; } if (!/^[a-zA-Z0-9_]+$/.test(username.trim())) { setError('Username can only contain letters, numbers, and underscores'); return; } if (!password) { setError('Password is required'); return; } if (password.length < 6) { setError('Password must be at least 6 characters'); return; } try { await register(username.trim(), password, displayName.trim() || undefined); navigate('/channels/@me'); } catch (err) { setError(err instanceof Error ? err.message : 'Registration failed'); } }; return (

Create an account

{error && (
{error}
)}
setUsername(e.target.value)} className="w-full px-3 py-2.5 bg-discord-bg-tertiary border-none rounded text-discord-text-primary outline-none focus:ring-2 focus:ring-discord-blurple transition-all" autoFocus autoComplete="username" />
setDisplayName(e.target.value)} className="w-full px-3 py-2.5 bg-discord-bg-tertiary border-none rounded text-discord-text-primary outline-none focus:ring-2 focus:ring-discord-blurple transition-all" autoComplete="name" />
setPassword(e.target.value)} className="w-full px-3 py-2.5 bg-discord-bg-tertiary border-none rounded text-discord-text-primary outline-none focus:ring-2 focus:ring-discord-blurple transition-all" autoComplete="new-password" />

Already have an account?{' '} Log In

); }