import React, { useState } from 'react'; import { Head, Link, router } from '@inertiajs/react'; import axios from 'axios'; import { toast } from 'sonner'; import { Loader2, Users, DollarSign, MessageSquare } from 'lucide-react'; export default function Register() { const [data, setData] = useState({ name: '', email: '', phone: '', emirates_id_file: null, }); const [loading, setLoading] = useState(false); const [errors, setErrors] = useState({}); const handleInputChange = (field, value) => { setData(prev => ({ ...prev, [field]: value })); if (errors[field]) { setErrors(prev => ({ ...prev, [field]: null })); } }; const validateForm = () => { const newErrors = {}; if (!data.name.trim()) { newErrors.name = 'Sponsor name is required.'; } if (!data.email.trim()) { newErrors.email = 'Email address is required.'; } else if (!/\S+@\S+\.\S+/.test(data.email)) { newErrors.email = 'Please enter a valid email address.'; } if (!data.phone.trim()) { newErrors.phone = 'Mobile number is required.'; } else if (!/^[0-9]{7,15}$/.test(data.phone)) { newErrors.phone = 'Please enter a valid mobile number (7-15 digits without country code).'; } setErrors(newErrors); return Object.keys(newErrors).length === 0; }; const handleSubmit = async (e) => { e.preventDefault(); setErrors({}); if (!validateForm()) { toast.error('Validation failed. Please correct the fields in red.'); return; } setLoading(true); const formData = new FormData(); formData.append('name', data.name); formData.append('email', data.email); formData.append('phone', data.phone); if (data.emirates_id_file) { formData.append('emirates_id_file', data.emirates_id_file); } try { await axios.post('/employer/register', formData, { headers: { 'Content-Type': 'multipart/form-data' } }); toast.success('Registration details saved! Verification code sent to your email.'); router.visit('/employer/verify-email'); } catch (err) { if (err.response) { if (err.response.status === 409) { const errMsg = err.response.data?.errors?.email || 'This email address is already registered.'; setErrors({ email: errMsg }); toast.error(errMsg); } else if (err.response.status === 422) { setErrors(err.response.data.errors || {}); toast.error('Validation failed. Please correct the fields in red.'); } else { toast.error('Something went wrong. Please try again.'); } } else { toast.error('Network error. Please check your internet connection.'); } } finally { setLoading(false); } }; const renderStepIndicator = () => (
{[ { step: 1, label: 'Register' }, { step: 2, label: 'Verify' }, { step: 3, label: 'Payment' }, { step: 4, label: 'Password' } ].map((s) => (
{s.step}
{s.label}
{s.step < 4 && (
)} ))}
); return (
{/* Left Brand Panel (Desktop Only) */}
M
Migrant Portal
Employer Registration

Find verified domestic workers directly.

Unlock direct access to top domestic candidates with a Migrant premium subscription. Find, interview, and hire directly without middlemen.

{/* Stat Row */}
500+
Verified Workers
Premium
Employer Access
Direct
Messaging
© 2026 Migrant. All rights reserved.
{/* Right Registration Form */}
{renderStepIndicator()}

Create Account

Register your employer portal to start searching

{/* Company Name */} {/* Sponsor Name */}
handleInputChange('name', e.target.value)} placeholder="e.g. Abdullah Bin Ahmed" className={`w-full px-3.5 py-3 rounded-xl border text-sm focus:outline-none focus:ring-2 transition-all ${ errors.name ? 'border-red-500 focus:ring-red-500/20 focus:border-red-500' : 'border-slate-300 focus:ring-[#185FA5]/20 focus:border-[#185FA5]' }`} /> {errors.name && (

{Array.isArray(errors.name) ? errors.name[0] : errors.name}

)}
{/* Email */}
handleInputChange('email', e.target.value)} placeholder="employer@domain.com" className={`w-full px-3.5 py-3 rounded-xl border text-sm focus:outline-none focus:ring-2 transition-all ${ errors.email ? 'border-red-500 focus:ring-red-500/20 focus:border-red-500' : 'border-slate-300 focus:ring-[#185FA5]/20 focus:border-[#185FA5]' }`} /> {errors.email && (

{Array.isArray(errors.email) ? errors.email[0] : errors.email}

)}
{/* Mobile Number */}
handleInputChange('phone', e.target.value)} placeholder="e.g. 501234567" className={`w-full px-3.5 py-3 rounded-xl border text-sm focus:outline-none focus:ring-2 transition-all ${ errors.phone ? 'border-red-500 focus:ring-red-500/20 focus:border-red-500' : 'border-slate-300 focus:ring-[#185FA5]/20 focus:border-[#185FA5]' }`} /> {errors.phone && (

{Array.isArray(errors.phone) ? errors.phone[0] : errors.phone}

)}
{/* Emirates ID File */}
handleInputChange('emirates_id_file', e.target.files[0])} className={`w-full px-3.5 py-2.5 rounded-xl border text-sm focus:outline-none focus:ring-2 transition-all file:mr-4 file:py-1 file:px-3 file:rounded-lg file:border-0 file:text-xs file:font-semibold file:bg-[#185FA5]/10 file:text-[#185FA5] hover:file:bg-[#185FA5]/20 cursor-pointer ${ errors.emirates_id_file ? 'border-red-500 focus:ring-red-500/20 focus:border-red-500' : 'border-slate-300 focus:ring-[#185FA5]/20 focus:border-[#185FA5]' }`} /> {errors.emirates_id_file && (

{Array.isArray(errors.emirates_id_file) ? errors.emirates_id_file[0] : errors.emirates_id_file}

)}

Already have an account?{' '} Sign in

); }