import React, { useState, useEffect } from 'react'; import { Head, Link, router } from '@inertiajs/react'; import axios from 'axios'; import { toast } from 'sonner'; import { ShieldCheck, CheckCircle, ArrowLeft, MailCheck, Loader2, RefreshCw, KeyRound } from 'lucide-react'; export default function VerifyEmail({ email }) { const [otp, setOtp] = useState(''); const [loading, setLoading] = useState(false); const [resending, setResending] = useState(false); const [errors, setErrors] = useState({}); // Cooldown timer state for resending OTP (60s) const [cooldown, setCooldown] = useState(60); useEffect(() => { let timer; if (cooldown > 0) { timer = setTimeout(() => setCooldown(cooldown - 1), 1000); } return () => clearTimeout(timer); }, [cooldown]); const handleOtpChange = (e) => { const val = e.target.value.replace(/[^0-9]/g, '').slice(0, 6); setOtp(val); if (errors.otp) { setErrors({}); } }; const handleSubmit = async (e) => { e.preventDefault(); if (otp.length !== 6) { setErrors({ otp: 'Please enter all 6 digits of the code.' }); return; } setLoading(true); setErrors({}); try { const response = await axios.post('/employer/verify-email', { otp }); toast.success('Email verified successfully! Let\'s secure your account.'); router.visit('/employer/create-password'); } catch (err) { if (err.response) { if (err.response.status === 422 || err.response.status === 400) { const otpErr = err.response.data?.errors?.otp || err.response.data?.message || 'Verification failed.'; setErrors({ otp: otpErr }); toast.error(otpErr); } else if (err.response.status === 429) { toast.error('Too many requests. Please slow down.'); } else { toast.error('Failed to verify OTP. Please try again.'); } } else { toast.error('Network error. Please check your connection.'); } } finally { setLoading(false); } }; const handleResend = async () => { if (cooldown > 0 || resending) return; setResending(true); try { const response = await axios.post('/employer/resend-otp'); toast.success('A new verification code has been dispatched to your email.'); setCooldown(60); // Reset timer setOtp(''); } catch (err) { if (err.response) { toast.error(err.response.data?.message || 'Failed to dispatch verification code.'); if (err.response.status === 429) { setCooldown(60); // Reset cooldown on too many requests } } else { toast.error('Network error. Please check your connection.'); } } finally { setResending(false); } }; const renderStepIndicator = () => (
{[ { step: 1, label: 'Register' }, { step: 2, label: 'Verify Code' }, { step: 3, label: 'Set Password' } ].map((s) => (
{s.step}
{s.label}
))}
); return (
{/* Left Brand Panel */}
M
Marketplace

Verify Your Business Email.

We take platform trust seriously. Verify your email to ensure secure account setup.

Empowering Household Recruitment Since 2024
{/* Right Form Content */}

Email Verification

Step 2 of 3: Enter Hashed Passcode

{renderStepIndicator()}

Check Your Email

We dispatched a 6-digit confirmation code to:
{email}

{errors.otp && (

{errors.otp}

)}
{cooldown > 0 ? (

Resend Code available in {cooldown}s

) : ( )}
Change Email / Back
); }