diff options
Diffstat (limited to 'src/state/queries/usePostThread')
-rw-r--r-- | src/state/queries/usePostThread/traversal.ts | 32 |
1 files changed, 28 insertions, 4 deletions
diff --git a/src/state/queries/usePostThread/traversal.ts b/src/state/queries/usePostThread/traversal.ts index fbae4ecdb..124591125 100644 --- a/src/state/queries/usePostThread/traversal.ts +++ b/src/state/queries/usePostThread/traversal.ts @@ -265,12 +265,36 @@ export function sortAndAnnotateThreadItems( metadata.nextItemDepth = nextItem?.depth /* - * We can now officially calculate `isLastSibling` and `isLastChild` - * based on the actual data that we've seen. + * Item is the last "sibling" if we know for sure we're out of + * replies on the parent (even though this item itself may have its + * own reply branches). */ - metadata.isLastSibling = + const isLastSiblingByCounts = metadata.replyIndex === - metadata.parentMetadata.repliesSeenCounter - 1 + metadata.parentMetadata.repliesIndexCounter - 1 + + /* + * Item can also be the last "sibling" if we know we don't have a + * next item, OR if that next item's depth is less than this item's + * depth (meaning it's a sibling of the parent, not a child of this + * item). + */ + const isImplicitlyLastSibling = + metadata.nextItemDepth === undefined || + metadata.nextItemDepth < metadata.depth + + /* + * Ok now we can set the last sibling state. + */ + metadata.isLastSibling = + isLastSiblingByCounts || isImplicitlyLastSibling + + /* + * Item is the last "child" in a branch if there is no next item, + * or if the next item's depth is less than this item's depth (a + * sibling of the parent) or equal to this item's depth (a sibling + * of this item) + */ metadata.isLastChild = metadata.nextItemDepth === undefined || metadata.nextItemDepth <= metadata.depth |