import { Button } from '@/components/ui/button' import { Dialog, DialogContent, DialogDescription, DialogHeader, DialogTitle } from '@/components/ui/dialog' import { Drawer, DrawerContent, DrawerDescription, DrawerHeader, DrawerTitle } from '@/components/ui/drawer' import { Label } from '@/components/ui/label' import { RadioGroup, RadioGroupItem } from '@/components/ui/radio-group' import { createReportDraftEvent } from '@/lib/draft-event' import { useNostr } from '@/providers/NostrProvider' import { useScreenSize } from '@/providers/ScreenSizeProvider' import { Loader } from 'lucide-react' import { NostrEvent } from 'nostr-tools' import { useState } from 'react' import { useTranslation } from 'react-i18next' import { toast } from 'sonner' export default function ReportDialog({ event, isOpen, closeDialog }: { event: NostrEvent isOpen: boolean closeDialog: () => void }) { const { isSmallScreen } = useScreenSize() if (isSmallScreen) { return ( { if (!open) { closeDialog() } }} >
) } return ( { if (!open) { closeDialog() } }} > ) } function ReportContent({ event, closeDialog }: { event: NostrEvent; closeDialog: () => void }) { const { t } = useTranslation() const { pubkey, publish } = useNostr() const [reason, setReason] = useState(null) const [reporting, setReporting] = useState(false) const handleReport = async () => { if (!reason || !pubkey) return try { setReporting(true) const draftEvent = createReportDraftEvent(event, reason) await publish(draftEvent) toast.success(t('Successfully report')) closeDialog() } catch (error) { const errors = error instanceof AggregateError ? error.errors : [error] errors.forEach((err) => { toast.error( `${t('Failed to report')}: ${err instanceof Error ? err.message : String(err)}`, { duration: 10_000 } ) console.error(err) }) return } finally { setReporting(false) } } return (
{['nudity', 'malware', 'profanity', 'illegal', 'spam', 'other'].map((item) => (
))}
) }