fix(highlights): preserve immediate UI highlight after creation by merging streaming results instead of overwriting in article and external URL loaders

This commit is contained in:
Gigi
2025-10-20 09:07:42 +02:00
parent 8ff3f08d8c
commit d2181ad772
3 changed files with 14 additions and 35 deletions

View File

@@ -74,19 +74,18 @@ export function useArticleLoader({
try {
setHighlightsLoading(true)
setHighlights([]) // Clear old highlights
const highlightsMap = new Map<string, Highlight>()
await fetchHighlightsForArticle(
relayPool,
articleCoordinate,
article.event.id,
(highlight) => {
// Deduplicate highlights by ID as they arrive
if (!highlightsMap.has(highlight.id)) {
highlightsMap.set(highlight.id, highlight)
const highlightsList = Array.from(highlightsMap.values())
setHighlights(highlightsList.sort((a, b) => b.created_at - a.created_at))
}
// Merge streaming results with existing UI state to preserve locally created highlights
setHighlights((prev) => {
if (prev.some(h => h.id === highlight.id)) return prev
const next = [highlight, ...prev]
return next.sort((a, b) => b.created_at - a.created_at)
})
},
settings
)