import { Repeat2, Quote } from 'lucide-react'; import { useState } from 'react'; import type { NostrEvent } from '@nostrify/nostrify'; import { Popover, PopoverContent, PopoverTrigger } from '@/components/ui/popover'; import { Drawer, DrawerContent, DrawerTrigger } from '@/components/ui/drawer'; import { ReplyComposeModal } from '@/components/ReplyComposeModal'; import { useIsMobile } from '@/hooks/useIsMobile'; import { useNostrPublish } from '@/hooks/useNostrPublish'; import { useCurrentUser } from '@/hooks/useCurrentUser'; import { useQueryClient } from '@tanstack/react-query'; import { useToast } from '@/hooks/useToast'; interface RepostMenuProps { event: NostrEvent; children: React.ReactNode; } export function RepostMenu({ event, children }: RepostMenuProps) { const isMobile = useIsMobile(); const [open, setOpen] = useState(false); const [quoteOpen, setQuoteOpen] = useState(false); const { user } = useCurrentUser(); const { mutate: publishEvent } = useNostrPublish(); const queryClient = useQueryClient(); const { toast } = useToast(); const handleRepost = () => { if (!user) { toast({ title: 'Please log in to repost', variant: 'destructive' }); return; } // Kind 6 repost publishEvent( { kind: 6, content: JSON.stringify(event), created_at: Math.floor(Date.now() / 1000), tags: [ ['e', event.id], ['p', event.pubkey], ], }, { onSuccess: () => { toast({ title: 'Reposted!' }); setOpen(false); // Invalidate stats to refetch counts queryClient.invalidateQueries({ queryKey: ['event-stats', event.id] }); queryClient.invalidateQueries({ queryKey: ['event-interactions', event.id] }); }, onError: () => { toast({ title: 'Failed to repost', variant: 'destructive' }); }, } ); }; const handleQuote = () => { setOpen(false); setQuoteOpen(true); }; const menuContent = (