import { useState } from 'react' import { useMutation } from '@tanstack/react-query' import { useToast } from 'sonner' import { Button } from '@/components/ui/Button' import { Input } from '@/components/ui/Input' import { Textarea } from '@/components/ui/Textarea' import { Select } from '@/components/ui/Select' import { api } from '@/lib/api' const Contact = () => { const { toast } = useToast() const [formState, setFormState] = useState({ company: '', name: '', email: '', phone: '', zip: '', message: '', service_interest: '', }) const [errors, setErrors] = useState({ company: '', name: '', email: '', message: '', }) const mutation = useMutation({ mutationFn: (data) => api.post('/leads', data), onSuccess: () => { toast.success('Thanks! We\'ll be in touch shortly.') setFormState({ company: '', name: '', email: '', phone: '', zip: '', message: '', service_interest: '', }) setErrors({ company: '', name: '', email: '', message: '', }) }, onError: (error) => { toast.error(error.message || 'Failed to submit form. Please try again.') }, }) const validateForm = () => { const newErrors = { company: '', name: '', email: '', message: '', } // Validate required fields if (!formState.company.trim()) newErrors.company = 'Company name is required' if (!formState.name.trim()) newErrors.name = 'Name is required' if (!formState.message.trim()) newErrors.message = 'Message is required' // Validate email format const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/ if (!formState.email.trim()) { newErrors.email = 'Email is required' } else if (!emailRegex.test(formState.email)) { newErrors.email = 'Please enter a valid email address' } const hasErrors = Object.values(newErrors).some(error => error !== '') setErrors(newErrors) if (hasErrors) { toast.error('Please fix the errors in the form') return false } return true } const handleSubmit = (e) => { e.preventDefault() if (!validateForm()) return mutation.mutate(formState) } const handleChange = (e) => { const { name, value } = e.target setFormState(prev => ({ ...prev, [name]: value })) // Clear error for this field as user types if (errors[name]) { setErrors(prev => ({ ...prev, [name]: '' })) } } return (
Have questions about our services? We're here to help. Fill out the form and we'll get back to you shortly.
Our team of communications and infrastructure experts is ready to help you find the right solution for your business needs.
Monday - Friday: 8:00 AM - 6:00 PM CT
info@queuenorth.com