first commit

This commit is contained in:
Michaël
2026-01-29 14:13:11 -03:00
commit 2302748c87
105 changed files with 93301 additions and 0 deletions
+103
View File
@@ -0,0 +1,103 @@
'use client';
import { useState } from 'react';
import { useRouter } from 'next/navigation';
import Link from 'next/link';
import { useLanguage } from '@/context/LanguageContext';
import { useAuth } from '@/context/AuthContext';
import Card from '@/components/ui/Card';
import Button from '@/components/ui/Button';
import Input from '@/components/ui/Input';
import toast from 'react-hot-toast';
export default function RegisterPage() {
const router = useRouter();
const { t } = useLanguage();
const { register } = useAuth();
const [loading, setLoading] = useState(false);
const [formData, setFormData] = useState({
name: '',
email: '',
password: '',
phone: '',
});
const handleSubmit = async (e: React.FormEvent) => {
e.preventDefault();
setLoading(true);
try {
await register(formData);
toast.success('Account created successfully!');
router.push('/');
} catch (error: any) {
toast.error(error.message || t('auth.errors.emailExists'));
} finally {
setLoading(false);
}
};
return (
<div className="section-padding min-h-[70vh] flex items-center">
<div className="container-page">
<div className="max-w-md mx-auto">
<div className="text-center mb-8">
<h1 className="text-3xl font-bold">{t('auth.register.title')}</h1>
<p className="mt-2 text-gray-600">{t('auth.register.subtitle')}</p>
</div>
<Card className="p-8">
<form onSubmit={handleSubmit} className="space-y-6">
<Input
id="name"
label={t('auth.register.name')}
value={formData.name}
onChange={(e) => setFormData({ ...formData, name: e.target.value })}
required
minLength={2}
/>
<Input
id="email"
label={t('auth.register.email')}
type="email"
value={formData.email}
onChange={(e) => setFormData({ ...formData, email: e.target.value })}
required
/>
<Input
id="password"
label={t('auth.register.password')}
type="password"
value={formData.password}
onChange={(e) => setFormData({ ...formData, password: e.target.value })}
required
minLength={8}
/>
<Input
id="phone"
label={t('auth.register.phone')}
type="tel"
value={formData.phone}
onChange={(e) => setFormData({ ...formData, phone: e.target.value })}
/>
<Button type="submit" className="w-full" size="lg" isLoading={loading}>
{t('auth.register.submit')}
</Button>
</form>
<p className="mt-6 text-center text-sm text-gray-600">
{t('auth.register.hasAccount')}{' '}
<Link href="/login" className="text-secondary-blue hover:underline font-medium">
{t('auth.register.login')}
</Link>
</p>
</Card>
</div>
</div>
</div>
);
}