'use client'; import { useState } from 'react'; interface ContactModalProps { isOpen: boolean; onClose: () => void; } const ContactModal = ({ isOpen, onClose }: ContactModalProps) => { const [formData, setFormData] = useState({ phone: '', name: '', message: '' }); const [isLoading, setIsLoading] = useState(false); const [errors, setErrors] = useState({ phone: '', name: '' }); const [success, setSuccess] = useState(''); const [error, setError] = useState(''); const validatePhone = (phone: string) => { const phoneRegex = /^[78]\d{10}$/; return phoneRegex.test(phone.replace(/\D/g, '')); }; const validateName = (name: string) => { const nameRegex = /^[а-яёА-ЯЁa-zA-Z\s]{2,}$/; return nameRegex.test(name.trim()); }; const handleInputChange = (field: string, value: string) => { setFormData(prev => ({ ...prev, [field]: value })); // Очищаем ошибки при вводе if (errors[field as keyof typeof errors]) { setErrors(prev => ({ ...prev, [field]: '' })); } }; const handlePhoneChange = (e: React.ChangeEvent) => { let value = e.target.value.replace(/\D/g, ''); if (value.length > 11) { value = value.slice(0, 11); } if (value.length > 0 && !value.startsWith('7') && !value.startsWith('8')) { value = '7' + value; } let formattedValue = value; if (value.length > 1) { formattedValue = `+${value.slice(0, 1)} (${value.slice(1, 4)}) ${value.slice(4, 7)}-${value.slice(7, 9)}-${value.slice(9, 11)}`; } handleInputChange('phone', formattedValue); }; const handleSubmit = async (e: React.FormEvent) => { e.preventDefault(); const newErrors = { phone: '', name: '' }; const cleanPhone = formData.phone.replace(/\D/g, ''); if (!validatePhone(cleanPhone)) { newErrors.phone = 'Введите корректный номер телефона'; } if (!validateName(formData.name)) { newErrors.name = 'Имя должно содержать только буквы (минимум 2 символа)'; } if (newErrors.phone || newErrors.name) { setErrors(newErrors); return; } setIsLoading(true); try { const response = await fetch('/api/send-telegram', { method: 'POST', headers: { 'Content-Type': 'application/json', }, body: JSON.stringify({ type: 'contact', name: formData.name, phone: formData.phone, message: formData.message }), }); if (response.ok) { setFormData({ phone: '', name: '', message: '' }); setSuccess('Сообщение успешно отправлено!'); onClose(); } } catch (error) { console.error('Ошибка отправки:', error); setError('Произошла ошибка при отправке сообщения. Пожалуйста, попробуйте позже.'); } finally { setIsLoading(false); } }; if (!isOpen) return null; return (
{/* Фоновые декоративные элементы */}
{/* Основной контейнер */}
{/* Кнопка закрытия */} {/* Заголовок */}

Укажите свои данные

И наш менеджер свяжется с Вами в ближайшее время

{/* Форма */}