import { Button } from '@/components/ui/button' import { Dialog, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle } from '@/components/ui/dialog' import { Drawer, DrawerClose, DrawerContent, DrawerDescription, DrawerFooter, DrawerHeader, DrawerTitle } from '@/components/ui/drawer' import { Input } from '@/components/ui/input' import { Label } from '@/components/ui/label' import { createJoinDraftEvent } from '@/lib/draft-event' import { useNostr } from '@/providers/NostrProvider' import { useScreenSize } from '@/providers/ScreenSizeProvider' import relayMembershipService from '@/services/relay-membership.service' import { TRelayInfo } from '@/types' import { useState } from 'react' import { useTranslation } from 'react-i18next' import { toast } from 'sonner' export default function JoinDialog({ relayInfo, showJoinDialog, setShowJoinDialog, onMembershipStatusChange }: { relayInfo: TRelayInfo showJoinDialog: boolean setShowJoinDialog: (open: boolean) => void onMembershipStatusChange: (status: boolean) => void }) { const { t } = useTranslation() const { isSmallScreen } = useScreenSize() const { publish } = useNostr() const [inviteCode, setInviteCode] = useState('') const [isLoading, setIsLoading] = useState(false) const handleJoinSubmit = async () => { setIsLoading(true) try { const draftEvent = createJoinDraftEvent(inviteCode) const joinRequestEvent = await publish(draftEvent, { specifiedRelayUrls: [relayInfo.url] }) toast.success(t('Join request sent successfully')) await relayMembershipService.addNewMember(relayInfo.url, joinRequestEvent.pubkey) onMembershipStatusChange(true) setInviteCode('') setShowJoinDialog(false) } catch (error) { const errors = error instanceof AggregateError ? error.errors : [error] errors.forEach((err) => { toast.error( `${t('Failed to send join request')}: ${err instanceof Error ? err.message : String(err)}`, { duration: 10_000 } ) console.error(err) }) return } finally { setIsLoading(false) } } const content = (
setInviteCode(e.target.value)} placeholder={t('Enter invite code')} required />

{t('You can get an invite code from a relay member.')}

) if (isSmallScreen) { return ( {t('Request to Join Relay')} {t('Enter the invite code you received from a relay member.')}
{content}
) } return ( {t('Request to Join Relay')} {t('Enter the invite code you received from a relay member.')} {content} ) }