import { Helmet } from 'react-helmet-async' import { useState } from 'react' import { toast } 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 { Link } from 'react-router-dom' import { submitLead } from '@/lib/api' import { useDebounce } from '@/hooks/useDebounce' const Contact = () => { const [formState, setFormState] = useState({ company: '', name: '', email: '', phone: '', zip: '', message: '', service_interest: '', company_website: '', // Honeypot field - hidden from humans, bots will fill it }) const [errors, setErrors] = useState({ company: '', name: '', email: '', message: '', }) // Debounce validation errors so they don't flash on every keystroke const debouncedErrors = useDebounce(errors, 300) const [isSubmitting, setIsSubmitting] = useState(false) 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 handleSubmitForm() } const handleSubmitForm = async () => { setIsSubmitting(true) try { await submitLead(formState) toast.success("Thanks! We\'ll be in touch shortly.") setFormState({ company: '', name: '', email: '', phone: '', zip: '', message: '', service_interest: '', }) setErrors({ company: '', name: '', email: '', message: '', }) } catch (error) { // 409 means duplicate email - this is actually good news if (error.response?.status === 409) { toast.success("We already have your submission! We\'ll be in touch.") } else { toast.error(error.message || 'Failed to submit form. Please try again.') } } finally { setIsSubmitting(false) } } 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 ( <> Contact Queue North | Schedule a Consultation {/* 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.

(321) 730-8020
(888) 656-2850
info@queuenorth.com
Fill Out the Form
{/* 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

Contact Us

Use the form on the right to get in touch with our team.

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 */}
{debouncedErrors.company && (

{debouncedErrors.company}

)}
{debouncedErrors.name && (

{debouncedErrors.name}

)}
{debouncedErrors.email && (

{debouncedErrors.email}

)}