'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' import { submitFeedback } from '@/lib/support/submit-feedback' import { useCompanyOptional } from '@/contexts/CompanyContext' 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() const companyCtx = useCompanyOptional() if (companyCtx?.isSandbox) return null async function handleSubmit(e: React.FormEvent) { e.preventDefault() if (message.trim().length < 5) return setIsSending(true) const result = await submitFeedback({ subject, message: message.trim() }) setIsSending(false) if (result.ok) { setSent(true) setTimeout(() => { setOpen(false) setSent(false) setMessage('') }, 2000) } else { toast({ title: 'Kunde inte skicka', description: result.error || 'Försök igen.', variant: 'destructive', }) } } 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