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 (
{/* Page Hero */}

Contact Us

Have questions about our services? We're here to help. Fill out the form and we'll get back to you shortly.

{/* Contact Form */}
{/* Left - Info */}

Get in Touch

Our team of communications and infrastructure experts is ready to help you find the right solution for your business needs.

Hours of Operation

Monday - Friday: 8:00 AM - 6:00 PM CT

Email

info@queuenorth.com

Why Choose Queue North?

    {[ '8x8 Certified Partner with proven expertise', '25+ years of industry experience', 'SMB to Enterprise solutions', 'Focus on your business outcomes', ].map((item, index) => (
  • {item}
  • ))}
{/* Right - Form */}
{errors.company && (

{errors.company}

)}
{errors.name && (

{errors.name}

)}
{errors.email && (

{errors.email}

)}