From 14b8df989b959a6cdb5484c8dc2f13b62e4634da Mon Sep 17 00:00:00 2001 From: James Lounds Date: Fri, 21 Feb 2025 13:35:44 +0000 Subject: [PATCH] collapse downvoted comments by default when `DownvotedCollapsedByDefault` is set --- src/features/comment/inTree/CommentTree.tsx | 25 ++++++++++++++++----- 1 file changed, 19 insertions(+), 6 deletions(-) diff --git a/src/features/comment/inTree/CommentTree.tsx b/src/features/comment/inTree/CommentTree.tsx index 9f7cd29d3c..264eb02d88 100644 --- a/src/features/comment/inTree/CommentTree.tsx +++ b/src/features/comment/inTree/CommentTree.tsx @@ -32,15 +32,28 @@ export default function CommentTree({ baseDepth, }: CommentTreeProps) { const dispatch = useAppDispatch(); + const commentId = comment.comment_view.comment.id; + const hasUserCollapsed = useAppSelector((state) => + Object.hasOwn(state.comment.commentCollapsedById, commentId), + ); const collapsed = useAppSelector( - (state) => - state.comment.commentCollapsedById[comment.comment_view.comment.id], + (state) => state.comment.commentCollapsedById[commentId], ); const tapToCollapse = useAppSelector( (state) => state.settings.general.comments.tapToCollapse, ); const { activePageRef } = useContext(AppContext); + const downvotedCollapsedByDefault = useAppSelector( + (state) => state.settings.general.comments.downvotedCollapsedByDefault, + ); + + const isDownvoted = + comment.comment_view.counts.upvotes < comment.comment_view.counts.downvotes; + const shouldBeCollapsed = hasUserCollapsed + ? collapsed + : downvotedCollapsedByDefault && isDownvoted; + // Comment context chains don't show missing for parents const showMissing = (() => { if (!highlightedCommentId) return true; @@ -68,7 +81,7 @@ export default function CommentTree({ depth={comment.absoluteDepth - baseDepth} absoluteDepth={comment.absoluteDepth} key={comment.comment_view.comment.id} - collapsed={collapsed || fullyCollapsed} + collapsed={shouldBeCollapsed || fullyCollapsed} comment={comment} /> ); @@ -101,7 +114,7 @@ export default function CommentTree({ scrollCommentIntoViewIfNeeded(e.target, activePageRef); }} - collapsed={collapsed} + collapsed={shouldBeCollapsed} fullyCollapsed={!!fullyCollapsed} rootIndex={rootIndex} /> @@ -111,7 +124,7 @@ export default function CommentTree({ key={comment.comment_view.comment.id} highlightedCommentId={highlightedCommentId} comment={comment} - fullyCollapsed={collapsed || fullyCollapsed} + fullyCollapsed={shouldBeCollapsed || fullyCollapsed} rootIndex={rootIndex} baseDepth={baseDepth} /> @@ -126,7 +139,7 @@ export default function CommentTree({ depth={comment.absoluteDepth - baseDepth} absoluteDepth={comment.absoluteDepth} missing={comment.missing} - collapsed={collapsed || fullyCollapsed} + collapsed={shouldBeCollapsed || fullyCollapsed} />, ); }