mirror of
https://github.com/dergigi/boris.git
synced 2026-02-01 13:14:21 +01:00
- Add getProfileDisplayName() utility function for consistent profile name resolution - Update all components to use standardized npub fallback format instead of hex - Fix useProfileLabels hook to include fallback npub labels when profiles lack names - Refactor NostrMentionLink to eliminate duplication between npub/nprofile cases - Remove debug console.log statements from RichContent component - Update AuthorCard, SidebarHeader, HighlightItem, Support, BlogPostCard, ResolvedMention, and useEventLoader to use new utilities
58 lines
1.6 KiB
TypeScript
58 lines
1.6 KiB
TypeScript
import React from 'react'
|
|
import { useNavigate } from 'react-router-dom'
|
|
import { FontAwesomeIcon } from '@fortawesome/react-fontawesome'
|
|
import { faUserCircle } from '@fortawesome/free-solid-svg-icons'
|
|
import { useEventModel } from 'applesauce-react/hooks'
|
|
import { Models } from 'applesauce-core'
|
|
import { nip19 } from 'nostr-tools'
|
|
import { getProfileDisplayName } from '../utils/nostrUriResolver'
|
|
|
|
interface AuthorCardProps {
|
|
authorPubkey: string
|
|
clickable?: boolean
|
|
}
|
|
|
|
const AuthorCard: React.FC<AuthorCardProps> = ({ authorPubkey, clickable = true }) => {
|
|
const navigate = useNavigate()
|
|
const profile = useEventModel(Models.ProfileModel, [authorPubkey])
|
|
|
|
const getAuthorName = () => {
|
|
return getProfileDisplayName(profile, authorPubkey)
|
|
}
|
|
|
|
const authorImage = profile?.picture || profile?.image
|
|
const authorBio = profile?.about
|
|
|
|
const handleClick = () => {
|
|
if (clickable) {
|
|
const npub = nip19.npubEncode(authorPubkey)
|
|
navigate(`/p/${npub}/writings`)
|
|
}
|
|
}
|
|
|
|
return (
|
|
<div
|
|
className={`author-card ${clickable ? 'author-card-clickable' : ''}`}
|
|
onClick={handleClick}
|
|
style={clickable ? { cursor: 'pointer' } : undefined}
|
|
>
|
|
<div className="author-card-avatar">
|
|
{authorImage ? (
|
|
<img src={authorImage} alt={getAuthorName()} />
|
|
) : (
|
|
<FontAwesomeIcon icon={faUserCircle} />
|
|
)}
|
|
</div>
|
|
<div className="author-card-content">
|
|
<div className="author-card-name">{getAuthorName()}</div>
|
|
{authorBio && (
|
|
<p className="author-card-bio">{authorBio}</p>
|
|
)}
|
|
</div>
|
|
</div>
|
|
)
|
|
}
|
|
|
|
export default AuthorCard
|
|
|