"use client"; import { useState, FormEvent } from 'react'; import { createTicket, CreateTicketData } from '@/lib/api/supportService'; import { useTicketCategories } from '@/lib/hooks/useSupport'; const CreateTicketForm = () => { const { categories, loading: categoriesLoading } = useTicketCategories(); const [formData, setFormData] = useState({ title: '', description: '', ticket_type: 'general', user_name: '', user_email: '', user_phone: '', company: '', category: undefined }); const [isSubmitting, setIsSubmitting] = useState(false); const [submitError, setSubmitError] = useState(null); const [submitSuccess, setSubmitSuccess] = useState(false); const [ticketNumber, setTicketNumber] = useState(''); const handleInputChange = ( e: React.ChangeEvent ) => { const { name, value } = e.target; setFormData(prev => ({ ...prev, [name]: name === 'category' ? (value ? parseInt(value) : undefined) : value })); }; const handleSubmit = async (e: FormEvent) => { e.preventDefault(); setIsSubmitting(true); setSubmitError(null); setSubmitSuccess(false); try { const response = await createTicket(formData); setTicketNumber(response.ticket_number); setSubmitSuccess(true); // Reset form setFormData({ title: '', description: '', ticket_type: 'general', user_name: '', user_email: '', user_phone: '', company: '', category: undefined }); } catch (error: any) { console.error('Ticket creation error:', error); // Provide user-friendly error messages based on error type let errorMessage = 'Failed to submit ticket. Please try again.'; if (error.message) { if (error.message.includes('email')) { errorMessage = 'There was an issue with your email address. Please check and try again.'; } else if (error.message.includes('network') || error.message.includes('fetch')) { errorMessage = 'Network error. Please check your connection and try again.'; } else if (error.message.includes('validation')) { errorMessage = 'Please check all required fields and try again.'; } else if (error.message.includes('server') || error.message.includes('500')) { errorMessage = 'Server error. Our team has been notified. Please try again later.'; } else { // Use the actual error message if it's user-friendly errorMessage = error.message; } } setSubmitError(errorMessage); } finally { setIsSubmitting(false); } }; if (submitSuccess) { return (

Ticket Created Successfully!

Your ticket number: {ticketNumber}

We've received your support request and will respond as soon as possible. Please save your ticket number for future reference.

); } return (

Submit a Support Ticket

Fill out the form below and our team will get back to you shortly.

ℹ️ Note: Only registered email addresses can submit tickets. If your email is not registered, please contact support@gnxsoft.com
{submitError && (
{submitError}
)}
{/* Personal Information */}

Personal Information

{/* Ticket Details */}

Ticket Details