From bed56ba9b64f57aaf0af135eeae85242f611801f Mon Sep 17 00:00:00 2001 From: Naincy Chourasia Date: Fri, 3 Jul 2026 05:04:50 +0000 Subject: [PATCH] fix: correct load more button visibility for discussion responses --- lms/djangoapps/discussion/rest_api/api.py | 41 +++++++++++-------- .../discussion/rest_api/tests/test_api_v2.py | 1 + .../comment_client/thread.py | 1 + 3 files changed, 26 insertions(+), 17 deletions(-) diff --git a/lms/djangoapps/discussion/rest_api/api.py b/lms/djangoapps/discussion/rest_api/api.py index b5b6d79baca4..2c44f3293764 100644 --- a/lms/djangoapps/discussion/rest_api/api.py +++ b/lms/djangoapps/discussion/rest_api/api.py @@ -1685,6 +1685,7 @@ def get_comment_list( "response_limit": page_size, "reverse_order": reverse_order, "merge_question_type_responses": merge_question_type_responses, + "show_deleted": show_deleted, }, ) # Responses to discussion threads cannot be separated by endorsed, but @@ -2317,17 +2318,11 @@ def get_response_comments(request, comment_id, page, page_size, requested_fields response_comments = response["children"] break - response_skip = page_size * (page - 1) - paged_response_comments = response_comments[ - response_skip: (response_skip + page_size) - ] - if not paged_response_comments and page != 1: - raise PageNotFoundError("Page not found (No results on this page).") - + # Filter deleted content from the FULL list first if not show_deleted: - paged_response_comments = [ + response_comments = [ response - for response in paged_response_comments + for response in response_comments if not response.get("is_deleted", False) ] else: @@ -2336,14 +2331,31 @@ def get_response_comments(request, comment_id, page, page_size, requested_fields "`show_deleted` can only be set by users with moderation roles." ) - # Apply muting filter if not including muted content + # Filter muted content from the FULL list + include_muted = request.GET.get("include_muted", False) + include_muted = include_muted in ["true", "True", True] if not include_muted: - paged_response_comments = filter_muted_content( + response_comments = filter_muted_content( request.user, context["course"].id, - paged_response_comments + response_comments ) + # NOW calculate pagination based on FILTERED total + total_comments_count = len(response_comments) + num_pages = ( + (total_comments_count + page_size - 1) // page_size + if total_comments_count else 1 + ) + + # Then paginate the filtered list + response_skip = page_size * (page - 1) + paged_response_comments = response_comments[ + response_skip: (response_skip + page_size) + ] + if not paged_response_comments and page != 1: + raise PageNotFoundError("Page not found (No results on this page).") + results = _serialize_discussion_entities( request, context, @@ -2352,11 +2364,6 @@ def get_response_comments(request, comment_id, page, page_size, requested_fields DiscussionEntity.comment, ) - total_comments_count = len(response_comments) - num_pages = ( - (total_comments_count + page_size - 1) // page_size - if total_comments_count else 1 - ) paginator = DiscussionAPIPagination( request, page, num_pages, total_comments_count ) diff --git a/lms/djangoapps/discussion/rest_api/tests/test_api_v2.py b/lms/djangoapps/discussion/rest_api/tests/test_api_v2.py index 1236ad97c4f3..7b083ef5aa9c 100644 --- a/lms/djangoapps/discussion/rest_api/tests/test_api_v2.py +++ b/lms/djangoapps/discussion/rest_api/tests/test_api_v2.py @@ -4025,6 +4025,7 @@ def test_basic_query_params(self): "with_responses": True, "reverse_order": False, "merge_question_type_responses": False, + "show_deleted": False, }, "course_id": str(self.course.id), } diff --git a/openedx/core/djangoapps/django_comment_common/comment_client/thread.py b/openedx/core/djangoapps/django_comment_common/comment_client/thread.py index 8a76c96781f1..d6f4f45ccef9 100644 --- a/openedx/core/djangoapps/django_comment_common/comment_client/thread.py +++ b/openedx/core/djangoapps/django_comment_common/comment_client/thread.py @@ -216,6 +216,7 @@ def _retrieve(self, *args, **kwargs): "merge_question_type_responses": kwargs.get( "merge_question_type_responses", False ), + "show_deleted": kwargs.get("show_deleted"), } request_params = utils.clean_forum_params(request_params) course_id = kwargs.get("course_id")