feat(ui): resolve author names using applesauce ProfileModel

- Import useEventModel and Models from applesauce-react
- Use ProfileModel to fetch author profile data for each bookmark
- Display author name/display_name/nip05 instead of raw pubkey
- Fallback to short pubkey if profile not available
- Improves readability by showing human-readable author names
This commit is contained in:
Gigi
2025-10-03 00:00:04 +02:00
parent 096509baf6
commit 0bae6674ce

View File

@@ -22,6 +22,8 @@ import {
faEyeSlash, faEyeSlash,
faThumbtack faThumbtack
} from '@fortawesome/free-solid-svg-icons' } from '@fortawesome/free-solid-svg-icons'
import { useEventModel } from 'applesauce-react/hooks'
import { Models } from 'applesauce-core'
import { IndividualBookmark } from '../types/bookmarks' import { IndividualBookmark } from '../types/bookmarks'
import { formatDate, renderParsedContent } from '../utils/bookmarkUtils' import { formatDate, renderParsedContent } from '../utils/bookmarkUtils'
import { extractUrlsFromContent } from '../services/bookmarkHelpers' import { extractUrlsFromContent } from '../services/bookmarkHelpers'
@@ -47,6 +49,17 @@ export const BookmarkItem: React.FC<BookmarkItemProps> = ({ bookmark, index, onS
const extractedUrls = extractUrlsFromContent(bookmark.content) const extractedUrls = extractUrlsFromContent(bookmark.content)
const hasUrls = extractedUrls.length > 0 const hasUrls = extractedUrls.length > 0
// Resolve author profile using applesauce
const authorProfile = useEventModel(Models.ProfileModel, [bookmark.pubkey])
// Get display name for author
const getAuthorDisplayName = () => {
if (authorProfile?.name) return authorProfile.name
if (authorProfile?.display_name) return authorProfile.display_name
if (authorProfile?.nip05) return authorProfile.nip05
return short(bookmark.pubkey) // fallback to short pubkey
}
// Map kind numbers to FontAwesome icons // Map kind numbers to FontAwesome icons
const getKindIcon = (kind: number) => { const getKindIcon = (kind: number) => {
const iconMap: Record<number, any> = { const iconMap: Record<number, any> = {
@@ -139,7 +152,7 @@ export const BookmarkItem: React.FC<BookmarkItemProps> = ({ bookmark, index, onS
<FontAwesomeIcon icon={getKindIcon(bookmark.kind)} /> <FontAwesomeIcon icon={getKindIcon(bookmark.kind)} />
</span> </span>
<span> <span>
Author: {short(bookmark.pubkey)} Author: {getAuthorDisplayName()}
<button className="copy-btn" onClick={() => copy(bookmark.pubkey)} title="Copy author pubkey"> <button className="copy-btn" onClick={() => copy(bookmark.pubkey)} title="Copy author pubkey">
<FontAwesomeIcon icon={faCopy} /> <FontAwesomeIcon icon={faCopy} />
</button> </button>