'use client'; import { useState } from 'react'; import type { PickupLocation } from 'brainerce'; import { formatPrice } from 'brainerce'; import { useTranslations } from '@/core/lib/translations'; import { useCurrency } from '@/core/lib/use-currency'; import { cn } from '@/core/lib/utils'; interface PickupStepProps { locations: PickupLocation[]; onSelect: ( locationId: string, customerInfo: { email: string; firstName?: string; lastName?: string; phone?: string } ) => void; loading?: boolean; initialEmail?: string; className?: string; } export function PickupStep({ locations, onSelect, loading = false, initialEmail = '', className, }: PickupStepProps) { const t = useTranslations('checkout'); const tf = useTranslations('checkoutForm'); const tc = useTranslations('common'); const currency = useCurrency(); const [selectedId, setSelectedId] = useState(null); const [email, setEmail] = useState(initialEmail); const [firstName, setFirstName] = useState(''); const [lastName, setLastName] = useState(''); const [phone, setPhone] = useState(''); const [error, setError] = useState(null); const handleSubmit = (e: React.FormEvent) => { e.preventDefault(); if (!selectedId) { setError(t('pickupLocationRequired')); return; } if (!email.trim() || !/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(email)) { setError(tf('emailInvalid')); return; } setError(null); onSelect(selectedId, { email: email.trim(), firstName: firstName.trim() || undefined, lastName: lastName.trim() || undefined, phone: phone.trim() || undefined, }); }; const inputClass = 'bg-background text-foreground placeholder:text-muted-foreground focus:ring-primary/20 focus:border-primary h-10 w-full rounded border px-3 text-sm focus:outline-none focus:ring-2'; return (
{/* Pickup locations */}

{t('selectPickupLocation')}

{locations.map((loc) => { const price = parseFloat(loc.price); const isFree = price === 0; const isSelected = selectedId === loc.id; return ( ); })}
{/* Customer info */}

{t('yourDetails')}

setEmail(e.target.value)} className={cn(inputClass, 'border-border')} placeholder="your@email.com" required />
setFirstName(e.target.value)} className={cn(inputClass, 'border-border')} />
setLastName(e.target.value)} className={cn(inputClass, 'border-border')} />
setPhone(e.target.value)} className={cn(inputClass, 'border-border')} placeholder={tf('phonePlaceholder')} />
{error &&

{error}

}
); }