Assign keys to feed slices via a counter, to enable duplicate items in the feed if needed
This commit is contained in:
+17
-12
@@ -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++}`),
|
||||||
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user