'use client' import { Button } from '@/components/ui/button' import { Dialog, DialogContent, DialogDescription, DialogHeader, DialogTitle, DialogTrigger, } from '@/components/ui/dialog' import { Form, FormControl, FormField, FormItem, FormLabel, FormMessage, } from '@/components/ui/form' import { Input } from '@/components/ui/input' import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue, } from '@/components/ui/select' import { Textarea } from '@/components/ui/textarea' import { AlertTriangle, Check, Loader2, MessageSquarePlus } from 'lucide-react' import { useState } from 'react' import { useForm } from 'react-hook-form' import { z } from 'zod' import { zodResolver } from '@hookform/resolvers/zod' import { toast } from '@/hooks/use-toast' import httpBrowserClient from '@/lib/httpBrowserClient' import { ApiEndpoints } from '@/config/api' const SupportFormSchema = z.object({ name: z.string().min(1, { message: 'Name is required' }), email: z.string().email({ message: 'Invalid email address' }), phone: z.string().optional(), category: z.enum(['general', 'technical', 'billing-and-payments', 'other'], { message: 'Support category is required', }), message: z.string().min(1, { message: 'Message is required' }), }) export default function SupportButton() { const [open, setOpen] = useState(false) const [isSubmitting, setIsSubmitting] = useState(false) const [isSubmitSuccessful, setIsSubmitSuccessful] = useState(false) const [errorMessage, setErrorMessage] = useState(null) const form = useForm({ resolver: zodResolver(SupportFormSchema), defaultValues: { name: '', email: '', phone: '', category: 'general', message: '', }, }) const onSubmit = async (data: any) => { setIsSubmitting(true) setErrorMessage(null) try { // Use the existing httpBrowserClient to call the NestJS endpoint const response = await httpBrowserClient.post( ApiEndpoints.support.customerSupport(), data ) setIsSubmitSuccessful(true) toast({ title: 'Support request submitted', description: response.data.message || 'We will get back to you soon.', }) // Wait 3 seconds before closing the dialog setTimeout(() => { setOpen(false) }, 3000) } catch (error) { console.error('Error submitting support request:', error) setErrorMessage( 'Error submitting support request. Please try again later.' ) toast({ title: 'Error submitting support request', description: 'Please try again later', variant: 'destructive', }) } finally { setIsSubmitting(false) } } const onOpenChange = (open: boolean) => { setOpen(open) if (!open) { form.reset() setIsSubmitSuccessful(false) setErrorMessage(null) } } return ( Contact Support Fill out the form below and we'll get back to you as soon as possible.
( Support Category )} /> ( Name )} /> ( Email )} /> ( Phone (Optional) )} /> ( Message