You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
52 lines
1.7 KiB
52 lines
1.7 KiB
import { Skeleton } from '@/components/ui/skeleton' |
|
import { useFetchProfile } from '@/hooks' |
|
import { useFetchNip05 } from '@/hooks/useFetchNip05' |
|
import { toNoteList } from '@/lib/link' |
|
import { SecondaryPageLink } from '@/PageManager' |
|
import { BadgeAlert, BadgeCheck } from 'lucide-react' |
|
import { Favicon } from '../Favicon' |
|
|
|
export default function Nip05({ pubkey, append }: { pubkey: string; append?: string }) { |
|
const { profile } = useFetchProfile(pubkey) |
|
const { nip05IsVerified, nip05Name, nip05Domain, isFetching } = useFetchNip05( |
|
profile?.nip05, |
|
pubkey |
|
) |
|
|
|
if (isFetching) { |
|
return ( |
|
<div className="flex items-center py-1"> |
|
<Skeleton className="h-3 w-16" /> |
|
</div> |
|
) |
|
} |
|
|
|
if (!profile?.nip05 || !nip05Name || !nip05Domain) return null |
|
|
|
return ( |
|
<div |
|
className="flex items-center gap-1 truncate [&_svg]:!size-3.5 [&_svg]:shrink-0" |
|
onClick={(e) => e.stopPropagation()} |
|
> |
|
{nip05Name !== '_' ? ( |
|
<span className="text-sm text-muted-foreground truncate">@{nip05Name}</span> |
|
) : null} |
|
{nip05IsVerified ? ( |
|
<Favicon |
|
domain={nip05Domain} |
|
className="w-3.5 h-3.5" |
|
fallback={<BadgeCheck className="text-primary" />} |
|
/> |
|
) : ( |
|
<BadgeAlert className="text-muted-foreground" /> |
|
)} |
|
<SecondaryPageLink |
|
to={toNoteList({ domain: nip05Domain })} |
|
className={`hover:underline truncate text-sm ${nip05IsVerified ? 'text-primary' : 'text-muted-foreground'}`} |
|
> |
|
{nip05Domain} |
|
</SecondaryPageLink> |
|
{append && <span className="text-sm text-muted-foreground truncate">{append}</span>} |
|
</div> |
|
) |
|
}
|
|
|