From 0ff14b56e1216a972630e3ebe526eb4b51820ff2 Mon Sep 17 00:00:00 2001 From: yashvi-3106 Date: Wed, 1 Jul 2026 15:28:37 +0530 Subject: [PATCH 1/3] fix(frontend): adjust pagination totalPages and currentPage to respect search filters --- frontend/js/leaderboard/pagination.js | 4 +--- frontend/js/leaderboard/search.js | 3 +++ frontend/leaderboard.html | 1 + 3 files changed, 5 insertions(+), 3 deletions(-) diff --git a/frontend/js/leaderboard/pagination.js b/frontend/js/leaderboard/pagination.js index 8bbb79e7..3078a132 100644 --- a/frontend/js/leaderboard/pagination.js +++ b/frontend/js/leaderboard/pagination.js @@ -8,9 +8,7 @@ function setupPaginationListeners() { }); document.getElementById("next-page-btn")?.addEventListener("click", () => { - const totalPages = Math.ceil( - leaderboardData[activeDatasetType].length / itemsPerPage, - ); + const totalPages = window.totalPages || 1; if (currentPage < totalPages) { currentPage++; diff --git a/frontend/js/leaderboard/search.js b/frontend/js/leaderboard/search.js index 2bbb48de..ef321155 100644 --- a/frontend/js/leaderboard/search.js +++ b/frontend/js/leaderboard/search.js @@ -18,6 +18,7 @@ function setupSearchListeners() { clearBtn.style.display = e.target.value.trim() !== "" ? "flex" : "none"; + currentPage = 1; applyFiltersAndRender(); }, 300), ); @@ -29,6 +30,7 @@ function setupSearchListeners() { clearBtn.style.display = "none"; searchInput.focus(); + currentPage = 1; applyFiltersAndRender(); }); @@ -53,6 +55,7 @@ function setupSearchListeners() { currentSearchTerm = ""; clearBtn.style.display = "none"; searchInput.blur(); + currentPage = 1; applyFiltersAndRender(); } }); diff --git a/frontend/leaderboard.html b/frontend/leaderboard.html index 701222a9..5754fbe2 100644 --- a/frontend/leaderboard.html +++ b/frontend/leaderboard.html @@ -557,6 +557,7 @@

Leaderboard

); const totalPages = Math.ceil(renderableData.length / itemsPerPage) || 1; + window.totalPages = totalPages; document.getElementById("prev-page-btn").disabled = currentPage === 1; document.getElementById("next-page-btn").disabled = currentPage === totalPages; From 08c3d2fae5f7c44816012a2a5e548eb5dccd0bea Mon Sep 17 00:00:00 2001 From: yashvi-3106 Date: Wed, 1 Jul 2026 22:16:02 +0530 Subject: [PATCH 2/3] fix(frontend): disable pagination controls and show single-page view during active search --- frontend/js/leaderboard/pagination.js | 7 +++ frontend/leaderboard.html | 81 ++++++++++++++++++--------- 2 files changed, 60 insertions(+), 28 deletions(-) diff --git a/frontend/js/leaderboard/pagination.js b/frontend/js/leaderboard/pagination.js index 3078a132..518b3063 100644 --- a/frontend/js/leaderboard/pagination.js +++ b/frontend/js/leaderboard/pagination.js @@ -23,6 +23,13 @@ function renderPagination(totalItems) { if (!pageNumbers) return; + const isSearching = + typeof currentSearchTerm !== "undefined" && currentSearchTerm.length > 0; + if (isSearching) { + pageNumbers.innerHTML = ""; + return; + } + const totalPages = Math.ceil(totalItems / itemsPerPage); pageNumbers.innerHTML = ""; diff --git a/frontend/leaderboard.html b/frontend/leaderboard.html index 5754fbe2..6d11db86 100644 --- a/frontend/leaderboard.html +++ b/frontend/leaderboard.html @@ -556,38 +556,63 @@

Leaderboard

(user) => user && !zeroScoreUserIds.has(user.id), ); - const totalPages = Math.ceil(renderableData.length / itemsPerPage) || 1; - window.totalPages = totalPages; - document.getElementById("prev-page-btn").disabled = currentPage === 1; - document.getElementById("next-page-btn").disabled = - currentPage === totalPages; - + const isSearching = currentSearchTerm.length > 0; const statsEl = document.getElementById("leaderboard-stats"); - const startRow = - renderableData.length === 0 - ? 0 - : (currentPage - 1) * itemsPerPage + 1; - - const endRow = Math.min( - currentPage * itemsPerPage, - renderableData.length, - ); + if (isSearching) { + document.getElementById("prev-page-btn").disabled = true; + document.getElementById("next-page-btn").disabled = true; + window.totalPages = 1; + + const totalMatched = filteredData.length; + const startRow = totalMatched === 0 ? 0 : 1; + const endRow = totalMatched; + + statsEl.innerHTML = ` +
+ Total Users: ${totalMatched} + | Showing: ${startRow}-${endRow} + | Page: 1/1 +
+ `; + } else { + const totalPages = + Math.ceil(renderableData.length / itemsPerPage) || 1; + window.totalPages = totalPages; + document.getElementById("prev-page-btn").disabled = currentPage === 1; + document.getElementById("next-page-btn").disabled = + currentPage === totalPages; + + const startRow = + renderableData.length === 0 + ? 0 + : (currentPage - 1) * itemsPerPage + 1; + + const endRow = Math.min( + currentPage * itemsPerPage, + renderableData.length, + ); - statsEl.innerHTML = ` -
- Total Users: ${filteredData.length} - | Showing: ${startRow}-${endRow} - | Page: ${currentPage}/${totalPages} -
- `; + statsEl.innerHTML = ` +
+ Total Users: ${renderableData.length} + | Showing: ${startRow}-${endRow} + | Page: ${currentPage}/${totalPages} +
+ `; + } - renderLeaderboard(filteredData, zeroScoreUserIds, totalPages); + renderLeaderboard(filteredData, zeroScoreUserIds, window.totalPages); } function renderLeaderboard(data, zeroScoreUserIds, totalPages) { From d3310274caa4f0ddb22d2f177bedddef71c7b72d Mon Sep 17 00:00:00 2001 From: Jagdish Prajapati Date: Thu, 2 Jul 2026 09:01:07 +0530 Subject: [PATCH 3/3] Update leaderboard to show total user count while not searching --- frontend/leaderboard.html | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/frontend/leaderboard.html b/frontend/leaderboard.html index 6d11db86..cff71a80 100644 --- a/frontend/leaderboard.html +++ b/frontend/leaderboard.html @@ -593,10 +593,10 @@

Leaderboard

? 0 : (currentPage - 1) * itemsPerPage + 1; - const endRow = Math.min( - currentPage * itemsPerPage, - renderableData.length, - ); + const endRow = + currentPage === totalPages + ? filteredData.length + : currentPage * itemsPerPage; statsEl.innerHTML = `
Leaderboard margin-bottom:1rem; font-family:'Fira Code', monospace; "> - Total Users: ${renderableData.length} + Total Users: ${filteredData.length} | Showing: ${startRow}-${endRow} | Page: ${currentPage}/${totalPages}