import { useState, useEffect, useRef } from 'react' import { GROOMSMEN, validateGroomsman } from '../groommen' import './NameModal.css' const STORAGE_KEY_PIN = 'cabo_voter_pin' export default function NameModal({ onSubmit }) { const [name, setName] = useState('') const [pin, setPin] = useState('') const [error, setError] = useState('') const [step, setStep] = useState(1) // 1 = name, 2 = pin const inputRef = useRef(null) useEffect(() => { if (step === 1) inputRef.current?.focus() }, [step]) const handleNameNext = (e) => { e.preventDefault() if (!name.trim()) return const key = name.trim().toLowerCase().replace(/\s+/g, '') if (!GROOMSMEN[key]) { setError(`"${name}" is not on the guest list. Check with the groom.`) return } setError('') setStep(2) // Pre-fill pin from localStorage if saved const saved = localStorage.getItem(STORAGE_KEY_PIN) if (saved) setPin(saved) } const handlePinSubmit = (e) => { e.preventDefault() if (pin.length !== 4) { setError('Enter the last 4 digits of your phone number.') return } const key = name.trim().toLowerCase().replace(/\s+/g, '') if (!validateGroomsman(name, pin)) { setError('Wrong PIN. Make sure you\'re using the correct name + last 4 digits.') return } localStorage.setItem(STORAGE_KEY_PIN, pin) onSubmit(name.trim()) } const handleBack = () => { setStep(1) setPin('') setError('') } return (
{step === 1 ? ( <>

πŸ„ Who's Voting?

Enter your full name as it appears on the guest list.

{ setName(e.target.value); setError('') }} placeholder="e.g. Jon, Toph, Hans…" maxLength={30} autoComplete="off" autoCapitalize="words" /> {error &&
{error}
}
) : ( <>

πŸ” Verify with PIN

Enter the last 4 digits of your phone number, {name.split(' ')[0]}.

{ setPin(e.target.value.replace(/\D/g, '')); setError('') }} placeholder="β€’β€’β€’β€’" autoComplete="off" className="pin-input" /> {error &&
{error}
}
)}
) }