'use client'; import React, { useState, useEffect } from 'react'; import Link from 'next/link'; import { useRouter } from 'next/navigation'; import { RegisterData } from '@/app/types'; import { googleLogin } from '@/app/API/auth/GoogleLogin'; import './register.scss'; interface RegisterFormProps { onSubmit: (data: RegisterData) => Promise; error?: string; loading?: boolean; } const RegisterForm: React.FC = ({ onSubmit, error, loading }) => { const router = useRouter(); const [formData, setFormData] = useState({ name: '', lastname: '', email: '', password: '', confirmPassword: '' }); const [showPassword, setShowPassword] = useState({ password: false, confirmPassword: false }); const [passwordError, setPasswordError] = useState(''); const [googleLoading, setGoogleLoading] = useState(false); const [googleError, setGoogleError] = useState(null); useEffect(() => { if (formData.confirmPassword && formData.password !== formData.confirmPassword) { setPasswordError('Passwords do not match'); } else { setPasswordError(''); } }, [formData.password, formData.confirmPassword]); useEffect(() => { const initializeGoogleSignIn = () => { if (typeof window !== 'undefined' && window.google?.accounts?.id) { google.accounts.id.initialize({ client_id: process.env.NEXT_PUBLIC_GOOGLE_CLIENT_ID ?? '', callback: handleGoogleResponse, context: 'signup' }); const buttonElement = document.getElementById("googleSignInButton"); if (buttonElement) { google.accounts.id.renderButton( buttonElement, { theme: "filled_blue", size: "large", width: "100%", type: "standard", text: "signup_with", shape: "rectangular", logo_alignment: "left" } ); } } }; initializeGoogleSignIn(); return () => { const buttonElement = document.getElementById("googleSignInButton"); if (buttonElement) { buttonElement.innerHTML = ''; } }; }, []); const handleGoogleResponse = async (response: google.accounts.id.CredentialResponse) => { setGoogleLoading(true); try { const result = await googleLogin(response.credential); if (result.success && result.data) { localStorage.setItem('user', JSON.stringify(result.data.user)); router.push('/dashboard'); } else { setGoogleError(result.message || 'Google authentication failed'); } } catch (err) { console.error('Google auth error:', err); setGoogleError('Google authentication failed'); } finally { setGoogleLoading(false); } }; const handleChange = (e: React.ChangeEvent) => { setFormData(prev => ({ ...prev, [e.target.name]: e.target.value })); }; const togglePasswordVisibility = (field: 'password' | 'confirmPassword') => { setShowPassword(prev => ({ ...prev, [field]: !prev[field] })); }; const handleSubmit = async (e: React.FormEvent) => { e.preventDefault(); if (passwordError) return; await onSubmit(formData); }; return (

or
{error && (
{error}
)}
Must be at least 8 characters long
{passwordError && (
{passwordError}
)}
{googleError && (
{googleError}
)}
Already have an account? Sign in
); }; export default RegisterForm;