'use client' import { useState } from 'react' import { cn } from '@/lib/utils' import { Mail, Loader2, Send } from 'lucide-react' import { Dialog, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle, DialogTrigger, } from '@/components/ui/dialog' import { Button } from '@/components/ui/button' import { Textarea } from '@/components/ui/textarea' import { useToast } from '@/components/ui/use-toast' interface SupportLinkProps { variant?: 'inline' | 'muted' subject?: string children?: React.ReactNode className?: string } export function SupportLink({ variant = 'inline', subject, children, className, }: SupportLinkProps) { const [open, setOpen] = useState(false) const [message, setMessage] = useState('') const [isSending, setIsSending] = useState(false) const [sent, setSent] = useState(false) const { toast } = useToast() async function handleSubmit(e: React.FormEvent) { e.preventDefault() if (message.trim().length < 5) return setIsSending(true) try { const res = await fetch('/api/support/contact', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ subject, message: message.trim() }), }) if (!res.ok) { const data = await res.json() throw new Error(data.error || 'Kunde inte skicka meddelandet') } setSent(true) setTimeout(() => { setOpen(false) setSent(false) setMessage('') }, 2000) } catch (error) { toast({ title: 'Kunde inte skicka', description: error instanceof Error ? error.message : 'Försök igen.', variant: 'destructive', }) } finally { setIsSending(false) } } function handleOpenChange(next: boolean) { setOpen(next) if (!next) { setSent(false) setMessage('') } } const trigger = variant === 'muted' ? ( {children ?? 'Kontakta support'} ) : ( {children ?? 'Kontakta support'} ) return ( {trigger} Kontakta support Beskriv ditt ärende så återkommer vi så snart vi kan. {sent ? ( Tack! Vi har mottagit ditt meddelande. ) : ( setMessage(e.target.value)} placeholder="Beskriv vad du behöver hjälp med..." className="min-h-[120px] resize-none" maxLength={5000} disabled={isSending} autoFocus /> {message.length}/5000 tecken setOpen(false)} disabled={isSending} > Avbryt {isSending ? ( <> Skickar... > ) : ( <> Skicka > )} )} ) }
Tack! Vi har mottagit ditt meddelande.
{message.length}/5000 tecken