Assign keys to feed slices via a counter, to enable duplicate items in the feed if needed

This commit is contained in:
Paul Frazee
2023-11-29 13:04:04 -08:00
parent 4b3ec54add
commit 1c341e0a54
+17 -12
View File
@@ -16,14 +16,7 @@ export type FeedTunerFn = (
export class FeedViewPostsSlice { export class FeedViewPostsSlice {
isFlattenedReply = false isFlattenedReply = false
constructor(public items: FeedViewPost[] = []) {} constructor(public items: FeedViewPost[], public _reactKey: string) {}
get _reactKey() {
const rootItem = this.isFlattenedReply ? this.items[1] : this.items[0]
return `slice-${rootItem.post.uri}-${
rootItem.reason?.indexedAt || rootItem.post.indexedAt
}`
}
get uri() { get uri() {
if (this.isFlattenedReply) { if (this.isFlattenedReply) {
@@ -118,22 +111,30 @@ export class FeedViewPostsSlice {
} }
export class NoopFeedTuner { export class NoopFeedTuner {
reset() {} private keyCounter = 0
reset() {
this.keyCounter = 0
}
tune( tune(
feed: FeedViewPost[], feed: FeedViewPost[],
_tunerFns: FeedTunerFn[] = [], _tunerFns: FeedTunerFn[] = [],
_opts?: {dryRun: boolean; maintainOrder: boolean}, _opts?: {dryRun: boolean; maintainOrder: boolean},
): FeedViewPostsSlice[] { ): FeedViewPostsSlice[] {
return feed.map(item => new FeedViewPostsSlice([item])) return feed.map(
item => new FeedViewPostsSlice([item], `slice-${this.keyCounter++}`),
)
} }
} }
export class FeedTuner { export class FeedTuner {
private keyCounter = 0
seenUris: Set<string> = new Set() seenUris: Set<string> = new Set()
constructor() {} constructor() {}
reset() { reset() {
this.keyCounter = 0
this.seenUris.clear() this.seenUris.clear()
} }
@@ -148,7 +149,9 @@ export class FeedTuner {
let slices: FeedViewPostsSlice[] = [] let slices: FeedViewPostsSlice[] = []
if (maintainOrder) { if (maintainOrder) {
slices = feed.map(item => new FeedViewPostsSlice([item])) slices = feed.map(
item => new FeedViewPostsSlice([item], `slice-${this.keyCounter++}`),
)
} else { } else {
// arrange the posts into thread slices // arrange the posts into thread slices
for (let i = feed.length - 1; i >= 0; i--) { for (let i = feed.length - 1; i >= 0; i--) {
@@ -164,7 +167,9 @@ export class FeedTuner {
continue continue
} }
} }
slices.unshift(new FeedViewPostsSlice([item])) slices.unshift(
new FeedViewPostsSlice([item], `slice-${this.keyCounter++}`),
)
} }
} }