import React, { useState, useRef, useCallback } from 'react'; import { sendEmailOtp } from '../core/checkout-api'; import type { EmailStepProps } from '../core/types'; const EmailStep: React.FC = ({ onOtpSent, onSkip, functionBaseUrl, merchantId, }) => { const [email, setEmail] = useState(''); const [loading, setLoading] = useState(false); const [error, setError] = useState(null); const inputRef = useRef(null); const handleChange = useCallback((e: React.ChangeEvent) => { setEmail(e.target.value.trim()); setError(null); }, []); const handleSubmit = useCallback(async (e: React.FormEvent) => { e.preventDefault(); if (!/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(email)) { setError('Enter a valid email address.'); inputRef.current?.focus(); return; } setLoading(true); setError(null); try { const { reused } = await sendEmailOtp({ functionBaseUrl, merchantId }, email); onOtpSent(email.toLowerCase(), { reused }); } catch (err: unknown) { setError(err instanceof Error ? err.message : 'Failed to send code. Please try again.'); } finally { setLoading(false); } }, [email, functionBaseUrl, merchantId, onOtpSent]); return (
{/* Icon */}

Faster checkout

Enter your email to load saved addresses

{error && ( )}
); }; export default EmailStep;