/** * SupportPage — Accessible contact/support form * v0.13.5 TASK-MKT-004: Page support accessible */ import { useState } from 'react'; import { useTranslation } from 'react-i18next'; import { DashboardLayout } from '@/components/layout/DashboardLayout'; import { Button } from '@/components/ui/button'; import { Input } from '@/components/ui/input'; import { Textarea } from '@/components/ui/textarea'; import { Label } from '@/components/ui/label'; import { Select } from '@/components/ui/select'; import { useUser } from '@/features/auth/hooks/useUser'; import { apiClient } from '@/services/api/client'; import { Mail, CheckCircle2, AlertCircle, Send, HelpCircle } from 'lucide-react'; import { cn } from '@/lib/utils'; const CATEGORY_OPTIONS = [ { value: 'general', label: 'General' }, { value: 'payment', label: 'Payment' }, { value: 'account', label: 'Account' }, { value: 'bug', label: 'Bug Report' }, ]; type SubmitState = 'idle' | 'submitting' | 'success' | 'error'; export function SupportPage() { const { t } = useTranslation(); const { data: user } = useUser(); const [email, setEmail] = useState(user?.email || ''); const [subject, setSubject] = useState(''); const [message, setMessage] = useState(''); const [category, setCategory] = useState('general'); const [submitState, setSubmitState] = useState('idle'); const [errorMessage, setErrorMessage] = useState(''); const handleSubmit = async (e: React.FormEvent) => { e.preventDefault(); setSubmitState('submitting'); setErrorMessage(''); try { await apiClient.post('/support/tickets', { email: email.trim(), subject: subject.trim(), message: message.trim(), category, }); setSubmitState('success'); setSubject(''); setMessage(''); } catch (err: unknown) { setSubmitState('error'); const msg = err instanceof Error ? err.message : 'An error occurred'; setErrorMessage(msg); } }; const isValid = email.includes('@') && subject.trim().length >= 3 && message.trim().length >= 10; return (

{t('support.title', 'Support')}

{t('support.description', "Need help? Send us a message and we'll get back to you within 48 hours.")}

{submitState === 'success' ? (

{t('support.success.title', 'Message sent!')}

{t('support.success.description', "We've received your message and will respond to your email within 48 hours.")}

) : (
{/* Email */}
setEmail(e.target.value)} placeholder="your@email.com" className="pl-10" required aria-describedby="email-hint" />

{t('support.form.emailHint', "We'll respond to this address")}

{/* Category */}
setSubject(e.target.value)} placeholder={t('support.form.subjectPlaceholder', 'Brief description of your issue') as string} minLength={3} maxLength={500} required />
{/* Message */}