diff options
author | dan <dan.abramov@gmail.com> | 2024-01-22 23:10:06 +0000 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-01-22 15:10:06 -0800 |
commit | 21846ce52dede2d81b53fe89d27f4fe1c102737f (patch) | |
tree | ccefaf7f9746580cb6300921fe678e536fc00c36 /src | |
parent | d25b17ab19e7373b4463be13b8611997b3f028dd (diff) | |
download | voidsky-21846ce52dede2d81b53fe89d27f4fe1c102737f.tar.zst |
Fix orphan replies in linear mode (#2578)
Diffstat (limited to 'src')
-rw-r--r-- | src/view/com/post-thread/PostThread.tsx | 16 |
1 files changed, 12 insertions, 4 deletions
diff --git a/src/view/com/post-thread/PostThread.tsx b/src/view/com/post-thread/PostThread.tsx index 49086652f..58408e847 100644 --- a/src/view/com/post-thread/PostThread.tsx +++ b/src/view/com/post-thread/PostThread.tsx @@ -157,7 +157,11 @@ function PostThreadLoaded({ const posts = React.useMemo(() => { let arr = [TOP_COMPONENT].concat( Array.from( - flattenThreadSkeleton(sortThread(thread, threadViewPrefs), hasSession), + flattenThreadSkeleton( + sortThread(thread, threadViewPrefs), + hasSession, + treeView, + ), ), ) if (arr.length > maxVisible) { @@ -167,7 +171,7 @@ function PostThreadLoaded({ arr.push(BOTTOM_COMPONENT) } return arr - }, [thread, maxVisible, threadViewPrefs, hasSession]) + }, [thread, treeView, maxVisible, threadViewPrefs, hasSession]) /** * NOTE @@ -486,10 +490,11 @@ function isThreadPost(v: unknown): v is ThreadPost { function* flattenThreadSkeleton( node: ThreadNode, hasSession: boolean, + treeView: boolean, ): Generator<YieldedItem, void> { if (node.type === 'post') { if (node.parent) { - yield* flattenThreadSkeleton(node.parent, hasSession) + yield* flattenThreadSkeleton(node.parent, hasSession, treeView) } else if (node.ctx.isParentLoading) { yield PARENT_SPINNER } @@ -502,7 +507,10 @@ function* flattenThreadSkeleton( } if (node.replies?.length) { for (const reply of node.replies) { - yield* flattenThreadSkeleton(reply, hasSession) + yield* flattenThreadSkeleton(reply, hasSession, treeView) + if (!treeView && !node.ctx.isHighlightedPost) { + break + } } } else if (node.ctx.isChildLoading) { yield CHILD_SPINNER |