'use client' import { useMutation } from '@apollo/client' import { Phone, ArrowRight } from 'lucide-react' import { useState } from 'react' import { Button } from '@/components/ui/button' import { GlassInput } from '@/components/ui/input' import { Label } from '@/components/ui/label' import { SEND_SMS_CODE } from '@/graphql/mutations' import { AuthLayout } from './auth-layout' interface PhoneStepProps { onNext: (phone: string) => void registrationType?: 'REFERRAL' | 'PARTNER' | null referrerCode?: string | null } export function PhoneStep({ onNext, registrationType }: PhoneStepProps) { const [phone, setPhone] = useState('') const [isLoading, setIsLoading] = useState(false) const [error, setError] = useState(null) const [sendSmsCode] = useMutation(SEND_SMS_CODE) const formatPhoneNumber = (value: string) => { const numbers = value.replace(/\D/g, '') if (numbers.length === 0) return '' if (numbers[0] === '8') { const withoutFirst = numbers.slice(1) return formatRussianNumber('7' + withoutFirst) } if (numbers[0] === '7') { return formatRussianNumber(numbers) } return formatRussianNumber('7' + numbers) } const formatRussianNumber = (numbers: string) => { if (numbers.length <= 1) return '+7' if (numbers.length <= 4) return `+7 (${numbers.slice(1)}` if (numbers.length <= 7) return `+7 (${numbers.slice(1, 4)}) ${numbers.slice(4)}` if (numbers.length <= 9) return `+7 (${numbers.slice(1, 4)}) ${numbers.slice(4, 7)}-${numbers.slice(7)}` return `+7 (${numbers.slice(1, 4)}) ${numbers.slice(4, 7)}-${numbers.slice(7, 9)}-${numbers.slice(9, 11)}` } const handlePhoneChange = (e: React.ChangeEvent) => { const formatted = formatPhoneNumber(e.target.value) setPhone(formatted) setError(null) } const isValidPhone = (phone: string) => { const numbers = phone.replace(/\D/g, '') return numbers.length === 11 && (numbers.startsWith('7') || numbers.startsWith('8')) } const handleSubmit = async (e: React.FormEvent) => { e.preventDefault() if (!isValidPhone(phone)) { setError('Введите корректный номер телефона') return } setIsLoading(true) setError(null) try { const cleanPhone = phone.replace(/\D/g, '') const formattedPhone = cleanPhone.startsWith('8') ? '7' + cleanPhone.slice(1) : cleanPhone const { data } = await sendSmsCode({ variables: { phone: formattedPhone }, }) if (data.sendSmsCode.success) { onNext(phone) } else { setError('Ошибка отправки SMS. Попробуйте позже.') } } catch (error: unknown) { console.error('SMS sending error:', error) setError(error instanceof Error ? error.message : 'Ошибка отправки SMS. Попробуйте позже.') } finally { setIsLoading(false) } } return ( {/* Индикатор типа регистрации */} {registrationType && (
{registrationType === 'PARTNER' ? '🤝' : '📎'}

{registrationType === 'PARTNER' ? 'Регистрация по партнерской ссылке' : 'Регистрация по реферальной ссылке'}

{registrationType === 'PARTNER' ? 'Вы получите +100 сфер ⚡ и автоматически станете партнером' : 'Вы получите +100 сфер ⚡ за регистрацию'}

)}
{ // Устанавливаем курсор в начало если поле пустое или содержит только +7 if (phone === '' || phone === '+7') { setTimeout(() => { e.target.setSelectionRange(0, 0) }, 0) } }} /> {error &&

{error}

}
) }