The counters serve the same purpose, we only need to know the count of the actual replies rendered to the view in order to calculate the replyIndex

This commit is contained in:
Eric Bailey
2025-10-14 15:52:52 -05:00
parent fceec83e08
commit 92f58c8723
3 changed files with 17 additions and 26 deletions
+7 -8
View File
@@ -135,11 +135,11 @@ export function sortAndAnnotateThreadItems(
} else if (AppBskyUnspeccedDefs.isThreadItemPost(item.value)) { } else if (AppBskyUnspeccedDefs.isThreadItemPost(item.value)) {
if (parentMetadata) { if (parentMetadata) {
/* /*
* Set this value before incrementing the `repliesIndexCounter`, since * Set this value before incrementing the `repliesSeenCounter` later
* `repliesIndexCounter` is 1-indexed and `replyIndex` is 0-indexed. * on, since `repliesSeenCounter` is 1-indexed and `replyIndex` is
* 0-indexed.
*/ */
metadata!.replyIndex = parentMetadata.repliesIndexCounter metadata!.replyIndex = parentMetadata.repliesSeenCounter
parentMetadata.repliesIndexCounter += 1
} }
const post = views.threadPost({ const post = views.threadPost({
@@ -194,12 +194,11 @@ export function sortAndAnnotateThreadItems(
if (childParentMetadata) { if (childParentMetadata) {
/* /*
* Set this value before incrementing the * Set this value before incrementing the
* `repliesIndexCounter`, since `repliesIndexCounter` is * `repliesSeenCounter` later on, since `repliesSeenCounter`
* 1-indexed and `replyIndex` is 0-indexed. * is 1-indexed and `replyIndex` is 0-indexed.
*/ */
childMetadata!.replyIndex = childMetadata!.replyIndex =
childParentMetadata.repliesIndexCounter childParentMetadata.repliesSeenCounter
childParentMetadata.repliesIndexCounter += 1
} }
const childPost = views.threadPost({ const childPost = views.threadPost({
+10 -17
View File
@@ -193,13 +193,14 @@ export type TraversalMetadata = {
*/ */
repliesUnhydrated: number repliesUnhydrated: number
/** /**
* The number of replies that have been seen so far in the traversal. * The number of replies that have been "seen" (actually able to be rendered)
* Excludes replies that are moderated in some way, since those are not * so far in the traversal. Excludes replies that are moderated in some way,
* "seen" on first load. Use `repliesIndexCounter` for the total number of * since those are not "seen" on first load.
* replies that were hydrated in the response.
* *
* After traversal, we can use this to calculate if we actually got all the * We use this to compute the `replyIndex` values of the children of this
* replies we expected, or if some were blocked, etc. * parent. E.g. if a reply is not hydrated on the response, or is moderated
* in some way (including by the user), this value is not incremented. So
* this represents the _actual_ index of the reply in the rendered view.
* *
* Note: this is a "counter", not an "index". Because this value is * Note: this is a "counter", not an "index". Because this value is
* incremented starting from 0, it is 1-indexed. So to when comparing to the * incremented starting from 0, it is 1-indexed. So to when comparing to the
@@ -207,17 +208,9 @@ export type TraversalMetadata = {
*/ */
repliesSeenCounter: number repliesSeenCounter: number
/** /**
* The total number of replies to this post hydrated in this response. Used * The index-0-based index of this reply in the parent post's replies. This
* for populating the `replyIndex` of the post by referencing this value on * is computed from the `repliesSeenCounter` of the parent post, prior to it
* the parent. * being incremented for this reply.
*
* Note: this is a "counter", not an "index". Because this value is
* incremented starting from 0, it is 1-indexed. So to when comparing to the
* `replyIndex`, you'll need to subtract 1 from this value.
*/
repliesIndexCounter: number
/**
* The index-0-based index of this reply in the parent post's replies.
*/ */
replyIndex: number replyIndex: number
/** /**
-1
View File
@@ -99,7 +99,6 @@ export function getTraversalMetadata({
repliesCount, repliesCount,
repliesUnhydrated, repliesUnhydrated,
repliesSeenCounter: 0, repliesSeenCounter: 0,
repliesIndexCounter: 0,
replyIndex: 0, replyIndex: 0,
skippedIndentIndices: new Set<number>(), skippedIndentIndices: new Set<number>(),
} }