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('Loading...')}
) : inviteCode ? (

{t('This invite code can be used by others to join the relay.')}

) : (
{t('No invite code available from this relay.')}
) if (isSmallScreen) { return ( {t('Get Invite Code')} {t('Share this invite code with others to invite them to join this relay.')}
{content}
) } return ( {t('Get Invite Code')} {t('Share this invite code with others to invite them to join this relay.')} {content} ) }