Protect against react key duplicates (close #2278) (#2309)

* Fix duplicate react keys in post search

* Protect against duplicate react keys in feeds
zio/stable
Paul Frazee 2023-12-27 08:49:39 -08:00 committed by GitHub
parent 0c9dc2163a
commit 8b6ecf6bff
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 15 additions and 9 deletions

View File

@ -117,11 +117,7 @@ export class FeedViewPostsSlice {
}
export class NoopFeedTuner {
private keyCounter = 0
reset() {
this.keyCounter = 0
}
reset() {}
tune(
feed: FeedViewPost[],
_opts?: {dryRun: boolean; maintainOrder: boolean},
@ -131,13 +127,13 @@ export class NoopFeedTuner {
}
export class FeedTuner {
private keyCounter = 0
seenKeys: Set<string> = new Set()
seenUris: Set<string> = new Set()
constructor(public tunerFns: FeedTunerFn[]) {}
reset() {
this.keyCounter = 0
this.seenKeys.clear()
this.seenUris.clear()
}
@ -218,11 +214,16 @@ export class FeedTuner {
}
if (!dryRun) {
for (const slice of slices) {
slices = slices.filter(slice => {
if (this.seenKeys.has(slice._reactKey)) {
return false
}
for (const item of slice.items) {
this.seenUris.add(item.post.uri)
}
}
this.seenKeys.add(slice._reactKey)
return true
})
}
return slices

View File

@ -212,12 +212,17 @@ function SearchScreenPostResults({query}: {query: string}) {
const items = React.useMemo(() => {
let temp: SearchResultSlice[] = []
const seenUris = new Set()
for (const post of posts) {
if (seenUris.has(post.uri)) {
continue
}
temp.push({
type: 'post',
key: post.uri,
post,
})
seenUris.add(post.uri)
}
if (isFetchingNextPage) {