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 { Input } from '@/components/ui/input' import { Label } from '@/components/ui/label' import { useScreenSize } from '@/providers/ScreenSizeProvider' import relayMembershipService from '@/services/relay-membership.service' import { TRelayInfo } from '@/types' import { Check, Copy } from 'lucide-react' import { useEffect, useState } from 'react' import { useTranslation } from 'react-i18next' import { toast } from 'sonner' export default function InviteCodeDialog({ relayInfo, showInviteCodeDialog, setShowInviteCodeDialog }: { relayInfo: TRelayInfo showInviteCodeDialog: boolean setShowInviteCodeDialog: (open: boolean) => void }) { const { t } = useTranslation() const { isSmallScreen } = useScreenSize() const [isFetching, setIsFetching] = useState(false) const [inviteCode, setInviteCode] = useState('') const [copied, setCopied] = useState(false) useEffect(() => { if (!showInviteCodeDialog) { setInviteCode('') return } const getInviteCode = async () => { setIsFetching(true) try { if (relayInfo.pubkey) { const code = await relayMembershipService.requestInviteCode( relayInfo.url, relayInfo.pubkey ) if (code) { setInviteCode(code) } else { toast.error(t('Failed to get invite code from relay')) } } } catch (error: any) { toast.error(error.message || t('Failed to get invite code')) } finally { setIsFetching(false) } } getInviteCode() }, [showInviteCodeDialog]) const handleCopyInviteCode = () => { if (!inviteCode) return navigator.clipboard.writeText(inviteCode) toast.success(t('Invite code copied to clipboard')) setCopied(true) setTimeout(() => { setCopied(false) }, 2000) } const content = isFetching ? (
{t('This invite code can be used by others to join the relay.')}