From 870505cbe23a04aeece902943e335c6e78ab5d8b Mon Sep 17 00:00:00 2001 From: Paul Frazee Date: Tue, 12 Dec 2023 13:07:09 -0800 Subject: [PATCH] Go back to content-driven slice keys in feeds (#2190) * Go back to deterministic react keys * Quick fix to cases when custom feeds serve empty responses --- src/lib/api/feed-manip.ts | 20 ++++++++++---------- src/lib/api/feed/custom.ts | 2 +- 2 files changed, 11 insertions(+), 11 deletions(-) diff --git a/src/lib/api/feed-manip.ts b/src/lib/api/feed-manip.ts index 622724b3..9a050fd3 100644 --- a/src/lib/api/feed-manip.ts +++ b/src/lib/api/feed-manip.ts @@ -14,9 +14,15 @@ export type FeedTunerFn = ( ) => FeedViewPostsSlice[] export class FeedViewPostsSlice { + _reactKey: string isFlattenedReply = false - constructor(public items: FeedViewPost[], public _reactKey: string) {} + constructor(public items: FeedViewPost[]) { + const item = items[0] + this._reactKey = `slice-${item.post.uri}-${ + item.reason?.indexedAt || item.post.indexedAt + }` + } get uri() { if (this.isFlattenedReply) { @@ -120,9 +126,7 @@ export class NoopFeedTuner { feed: FeedViewPost[], _opts?: {dryRun: boolean; maintainOrder: boolean}, ): FeedViewPostsSlice[] { - return feed.map( - item => new FeedViewPostsSlice([item], `slice-${this.keyCounter++}`), - ) + return feed.map(item => new FeedViewPostsSlice([item])) } } @@ -160,9 +164,7 @@ export class FeedTuner { }) if (maintainOrder) { - slices = feed.map( - item => new FeedViewPostsSlice([item], `slice-${this.keyCounter++}`), - ) + slices = feed.map(item => new FeedViewPostsSlice([item])) } else { // arrange the posts into thread slices for (let i = feed.length - 1; i >= 0; i--) { @@ -178,9 +180,7 @@ export class FeedTuner { continue } } - slices.unshift( - new FeedViewPostsSlice([item], `slice-${this.keyCounter++}`), - ) + slices.unshift(new FeedViewPostsSlice([item])) } } diff --git a/src/lib/api/feed/custom.ts b/src/lib/api/feed/custom.ts index 47ffc65e..94cbff13 100644 --- a/src/lib/api/feed/custom.ts +++ b/src/lib/api/feed/custom.ts @@ -37,7 +37,7 @@ export class CustomFeedAPI implements FeedAPI { res.data.feed = res.data.feed.slice(0, limit) } return { - cursor: res.data.cursor, + cursor: res.data.feed.length ? res.data.cursor : undefined, feed: res.data.feed, } }