import { NDKEvent, NDKKind, NDKUser } from '@nostr-dev-kit/ndk'; import * as Avatar from '@radix-ui/react-avatar'; import { minidenticon } from 'minidenticons'; import { useEffect, useState } from 'react'; import { Link, useNavigate } from 'react-router-dom'; import { toast } from 'sonner'; import { UserStats } from '@app/users/components/stats'; import { useNDK } from '@libs/ndk/provider'; import { useStorage } from '@libs/storage/provider'; import { NIP05 } from '@shared/nip05'; import { useProfile } from '@utils/hooks/useProfile'; import { displayNpub } from '@utils/shortenKey'; export function UserProfile({ pubkey }: { pubkey: string }) { const { db } = useStorage(); const { ndk } = useNDK(); const { user } = useProfile(pubkey); const [followed, setFollowed] = useState(false); const navigate = useNavigate(); const svgURI = 'data:image/svg+xml;utf8,' + encodeURIComponent(minidenticon(pubkey, 90, 50)); const follow = async () => { try { if (!ndk.signer) return navigate('/new/privkey'); setFollowed(true); const user = ndk.getUser({ pubkey: db.account.pubkey }); const contacts = await user.follows(); const add = await user.follow(new NDKUser({ pubkey: pubkey }), contacts); if (!add) { toast.success('You already follow this user'); setFollowed(false); } } catch (e) { toast.error(e); setFollowed(false); } }; const unfollow = async () => { try { if (!ndk.signer) return navigate('/new/privkey'); setFollowed(false); const user = ndk.getUser({ pubkey: db.account.pubkey }); const contacts = await user.follows(); contacts.delete(new NDKUser({ pubkey: pubkey })); const list = [...contacts].map((item) => [ 'p', item.pubkey, item.relayUrls?.[0] || '', '', ]); const event = new NDKEvent(ndk); event.content = ''; event.kind = NDKKind.Contacts; event.tags = list; await event.publish(); } catch (e) { toast.error(e); } }; useEffect(() => { if (db.account.follows.includes(pubkey)) { setFollowed(true); } }, []); if (!user) return

Loading...

; return ( <>
{user?.banner ? ( user banner ) : (
)}
{pubkey}
{user.name || user.display_name || user.displayName || 'No name'}
{user?.nip05 ? ( ) : ( {displayNpub(pubkey, 16)} )}
{user?.about || user?.bio ? (

{user.about || user.bio}

) : (
)}
{followed ? ( ) : ( )} Message
); }