mirror of
https://github.com/dergigi/boris.git
synced 2026-02-21 06:54:41 +01:00
fix: use bookmark pubkey for article author instead of tag lookup
- Pass pubkey along with bookmark data to handleSelectUrl - Use bookmark.pubkey directly when constructing naddr - More reliable article loading with correct author attribution - Update type signatures across all components
This commit is contained in:
2
dist/index.html
vendored
2
dist/index.html
vendored
@@ -5,7 +5,7 @@
|
||||
<link rel="icon" type="image/svg+xml" href="/vite.svg" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||
<title>Boris - Nostr Bookmarks</title>
|
||||
<script type="module" crossorigin src="/assets/index-Be3omHES.js"></script>
|
||||
<script type="module" crossorigin src="/assets/index-B-AkjDEr.js"></script>
|
||||
<link rel="stylesheet" crossorigin href="/assets/index-ChEoItgK.css">
|
||||
</head>
|
||||
<body>
|
||||
|
||||
@@ -15,7 +15,7 @@ import { CardView } from './BookmarkViews/CardView'
|
||||
interface BookmarkItemProps {
|
||||
bookmark: IndividualBookmark
|
||||
index: number
|
||||
onSelectUrl?: (url: string, bookmark?: { id: string; kind: number; tags: string[][] }) => void
|
||||
onSelectUrl?: (url: string, bookmark?: { id: string; kind: number; tags: string[][]; pubkey: string }) => void
|
||||
viewMode?: ViewMode
|
||||
}
|
||||
|
||||
@@ -73,7 +73,7 @@ export const BookmarkItem: React.FC<BookmarkItemProps> = ({ bookmark, index, onS
|
||||
// For kind:30023 articles, pass the bookmark data instead of URL
|
||||
if (bookmark.kind === 30023) {
|
||||
if (onSelectUrl) {
|
||||
onSelectUrl('', { id: bookmark.id, kind: bookmark.kind, tags: bookmark.tags })
|
||||
onSelectUrl('', { id: bookmark.id, kind: bookmark.kind, tags: bookmark.tags, pubkey: bookmark.pubkey })
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
@@ -9,7 +9,7 @@ import { ViewMode } from './Bookmarks'
|
||||
|
||||
interface BookmarkListProps {
|
||||
bookmarks: Bookmark[]
|
||||
onSelectUrl?: (url: string, bookmark?: { id: string; kind: number; tags: string[][] }) => void
|
||||
onSelectUrl?: (url: string, bookmark?: { id: string; kind: number; tags: string[][]; pubkey: string }) => void
|
||||
isCollapsed: boolean
|
||||
onToggleCollapse: () => void
|
||||
onLogout: () => void
|
||||
|
||||
@@ -13,7 +13,7 @@ interface CardViewProps {
|
||||
index: number
|
||||
hasUrls: boolean
|
||||
extractedUrls: string[]
|
||||
onSelectUrl?: (url: string, bookmark?: { id: string; kind: number; tags: string[][] }) => void
|
||||
onSelectUrl?: (url: string, bookmark?: { id: string; kind: number; tags: string[][]; pubkey: string }) => void
|
||||
getIconForUrlType: IconGetter
|
||||
firstUrlClassification: { buttonText: string } | null
|
||||
authorNpub: string
|
||||
|
||||
@@ -11,7 +11,7 @@ interface CompactViewProps {
|
||||
index: number
|
||||
hasUrls: boolean
|
||||
extractedUrls: string[]
|
||||
onSelectUrl?: (url: string, bookmark?: { id: string; kind: number; tags: string[][] }) => void
|
||||
onSelectUrl?: (url: string, bookmark?: { id: string; kind: number; tags: string[][]; pubkey: string }) => void
|
||||
getIconForUrlType: IconGetter
|
||||
firstUrlClassification: { buttonText: string } | null
|
||||
}
|
||||
@@ -32,7 +32,7 @@ export const CompactView: React.FC<CompactViewProps> = ({
|
||||
if (!onSelectUrl) return
|
||||
|
||||
if (isArticle) {
|
||||
onSelectUrl('', { id: bookmark.id, kind: bookmark.kind, tags: bookmark.tags })
|
||||
onSelectUrl('', { id: bookmark.id, kind: bookmark.kind, tags: bookmark.tags, pubkey: bookmark.pubkey })
|
||||
} else if (hasUrls) {
|
||||
onSelectUrl(extractedUrls[0])
|
||||
}
|
||||
@@ -68,7 +68,7 @@ export const CompactView: React.FC<CompactViewProps> = ({
|
||||
onClick={(e) => {
|
||||
e.stopPropagation()
|
||||
if (isArticle) {
|
||||
onSelectUrl?.('', { id: bookmark.id, kind: bookmark.kind, tags: bookmark.tags })
|
||||
onSelectUrl?.('', { id: bookmark.id, kind: bookmark.kind, tags: bookmark.tags, pubkey: bookmark.pubkey })
|
||||
} else {
|
||||
onSelectUrl?.(extractedUrls[0])
|
||||
}
|
||||
|
||||
@@ -10,7 +10,7 @@ interface LargeViewProps {
|
||||
index: number
|
||||
hasUrls: boolean
|
||||
extractedUrls: string[]
|
||||
onSelectUrl?: (url: string, bookmark?: { id: string; kind: number; tags: string[][] }) => void
|
||||
onSelectUrl?: (url: string, bookmark?: { id: string; kind: number; tags: string[][]; pubkey: string }) => void
|
||||
getIconForUrlType: IconGetter
|
||||
firstUrlClassification: { buttonText: string } | null
|
||||
previewImage: string | null
|
||||
|
||||
@@ -114,7 +114,7 @@ const Bookmarks: React.FC<BookmarksProps> = ({ relayPool, onLogout }) => {
|
||||
}
|
||||
}
|
||||
|
||||
const handleSelectUrl = async (url: string, bookmark?: { id: string; kind: number; tags: string[][] }) => {
|
||||
const handleSelectUrl = async (url: string, bookmark?: { id: string; kind: number; tags: string[][]; pubkey: string }) => {
|
||||
if (!relayPool) return
|
||||
|
||||
setSelectedUrl(url)
|
||||
@@ -129,15 +129,11 @@ const Bookmarks: React.FC<BookmarksProps> = ({ relayPool, onLogout }) => {
|
||||
// For articles, construct an naddr and fetch using article service
|
||||
const dTag = bookmark.tags.find(t => t[0] === 'd')?.[1] || ''
|
||||
|
||||
// Try to get author from tags first, then fall back to bookmark id as pubkey
|
||||
const author = bookmark.tags.find(t => t[0] === 'author')?.[1] ||
|
||||
(bookmark.id.length === 64 ? bookmark.id : undefined)
|
||||
|
||||
if (dTag !== undefined) {
|
||||
if (dTag !== undefined && bookmark.pubkey) {
|
||||
const pointer = {
|
||||
identifier: dTag,
|
||||
kind: 30023,
|
||||
pubkey: author || bookmark.id,
|
||||
pubkey: bookmark.pubkey,
|
||||
}
|
||||
const naddr = nip19.naddrEncode(pointer)
|
||||
const article = await fetchArticleByNaddr(relayPool, naddr)
|
||||
@@ -147,7 +143,7 @@ const Bookmarks: React.FC<BookmarksProps> = ({ relayPool, onLogout }) => {
|
||||
url: `nostr:${naddr}`
|
||||
})
|
||||
} else {
|
||||
throw new Error('Invalid article reference - missing d tag')
|
||||
throw new Error('Invalid article reference - missing d tag or pubkey')
|
||||
}
|
||||
} else {
|
||||
// For regular URLs, fetch readable content
|
||||
|
||||
Reference in New Issue
Block a user