import React, { useState } from 'react'; import { User, Mail, Lock, ArrowRight, ChevronLeft, Compass, Phone, MapPin } from 'lucide-react'; interface SignupPageProps { onBack: () => void; onSuccess: () => void; } export const SignupPage: React.FC = ({ onBack, onSuccess }) => { const [formData, setFormData] = useState({ name: '', email: '', password: '', confirmPassword: '', phone: '', address: '' }); const [error, setError] = useState(''); const [isLoading, setIsLoading] = useState(false); const handleSubmit = async (e: React.FormEvent) => { e.preventDefault(); setError(''); if (formData.password !== formData.confirmPassword) { setError('Mật khẩu xác nhận không khớp'); return; } setIsLoading(true); try { const API_BASE = `http://${window.location.hostname}:3001`; const response = await fetch(`${API_BASE}/api/v1/auth/signup`, { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ email: formData.email, password: formData.password, name: formData.name, phone: formData.phone || undefined, address: formData.address || undefined }), }); const data = await response.json(); if (!response.ok) { throw new Error(data.message || 'Đăng ký thất bại'); } onSuccess(); } catch (err: any) { setError(err.message); } finally { setIsLoading(false); } }; return (
{/* Nửa bên trái: Hình ảnh decor (Đồng bộ với LandingPage) */}
Travel background
Travel Planner

Bắt đầu hành trình của riêng bạn.

Tạo tài khoản để lưu lại những kế hoạch du lịch tuyệt vời nhất cùng bạn bè.

{/* Nửa bên phải: Form đăng ký */}

Tạo tài khoản mới

Khám phá các tính năng lập kế hoạch chuyên nghiệp.

{error && (
{error}
)}
setFormData({ ...formData, name: e.target.value })} className="w-full pl-12 pr-4 py-4 bg-gray-50 border border-gray-100 rounded-2xl focus:ring-2 focus:ring-blue-500 focus:bg-white outline-none transition-all" />
setFormData({ ...formData, email: e.target.value })} className="w-full pl-12 pr-4 py-4 bg-gray-50 border border-gray-100 rounded-2xl focus:ring-2 focus:ring-blue-500 focus:bg-white outline-none transition-all" />
setFormData({ ...formData, phone: e.target.value })} className="w-full pl-12 pr-4 py-4 bg-gray-50 border border-gray-100 rounded-2xl focus:ring-2 focus:ring-blue-500 focus:bg-white outline-none transition-all" />
setFormData({ ...formData, address: e.target.value })} className="w-full pl-12 pr-4 py-4 bg-gray-50 border border-gray-100 rounded-2xl focus:ring-2 focus:ring-blue-500 focus:bg-white outline-none transition-all" />
setFormData({ ...formData, password: e.target.value })} className="w-full px-4 py-4 bg-gray-50 border border-gray-100 rounded-2xl focus:ring-2 focus:ring-blue-500 focus:bg-white outline-none transition-all" />
setFormData({ ...formData, confirmPassword: e.target.value })} className="w-full px-4 py-4 bg-gray-50 border border-gray-100 rounded-2xl focus:ring-2 focus:ring-blue-500 focus:bg-white outline-none transition-all" />
); };