diff --git a/frontend/leaderboard.html b/frontend/leaderboard.html
index a180665b..94e55c54 100644
--- a/frontend/leaderboard.html
+++ b/frontend/leaderboard.html
@@ -573,9 +573,13 @@
Leaderboard
.map((user) => user.id),
);
- const renderableData = filteredData.filter(
+ const activeList = filteredData.filter(
(user) => user && !zeroScoreUserIds.has(user.id),
);
+ const inactiveList = filteredData.filter(
+ (user) => user && zeroScoreUserIds.has(user.id),
+ );
+ const combinedData = [...activeList, ...inactiveList];
const isSearching = currentSearchTerm.length > 0;
const statsEl = document.getElementById("leaderboard-stats");
@@ -585,7 +589,7 @@ Leaderboard
document.getElementById("next-page-btn").disabled = true;
window.totalPages = 1;
- const totalMatched = filteredData.length;
+ const totalMatched = combinedData.length;
const startRow = totalMatched === 0 ? 0 : 1;
const endRow = totalMatched;
@@ -602,21 +606,20 @@ Leaderboard
`;
} else {
- const totalPages =
- Math.ceil(renderableData.length / itemsPerPage) || 1;
+ const totalPages = Math.ceil(combinedData.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
+ combinedData.length === 0
? 0
: (currentPage - 1) * itemsPerPage + 1;
const endRow =
currentPage === totalPages
- ? filteredData.length
+ ? combinedData.length
: currentPage * itemsPerPage;
statsEl.innerHTML = `
@@ -626,14 +629,14 @@ Leaderboard
margin-bottom:1rem;
font-family:'Fira Code', monospace;
">
- Total Users: ${filteredData.length}
+ Total Users: ${combinedData.length}
| Showing: ${startRow}-${endRow}
| Page: ${currentPage}/${totalPages}
`;
}
- renderLeaderboard(filteredData, zeroScoreUserIds, window.totalPages);
+ renderLeaderboard(combinedData, zeroScoreUserIds, window.totalPages);
}
function renderLeaderboard(data, zeroScoreUserIds, totalPages) {
@@ -655,55 +658,59 @@ Leaderboard
zeroScoreUserIds.has(user.id),
);
- const displayActiveData = isSearching
- ? activeList
- : activeList.slice(startIndex, endIndex);
+ // Pre-assign activeIndex to active users to render their correct rank
+ activeList.forEach((user, index) => {
+ user.activeIndex = index;
+ });
+
+ const displayData = isSearching
+ ? data
+ : data.slice(startIndex, endIndex);
- if (displayActiveData.length === 0 && inactiveList.length === 0) {
+ if (displayData.length === 0) {
const emptyStateHtml = `[SYS]: NO_MATCHING_USERS_FOUND
`;
body.innerHTML = emptyStateHtml;
mobileCards.innerHTML = emptyStateHtml;
return;
}
- displayActiveData.forEach((user, index) => {
- let rank =
- user.originalRank !== undefined
- ? user.originalRank
- : startIndex + index + 1;
+ displayData.forEach((user) => {
+ if (inactiveList.length > 0 && user.id === inactiveList[0].id) {
+ const dividerText = "── [ SECTION: NO ACTIVITY YET ] ──";
- if (activeDatasetType !== "overall" && user.score === 0) {
- rank = "--";
+ const tableHeader = document.createElement("div");
+ tableHeader.className = "no-results";
+ tableHeader.style.gridColumn = "1 / -1";
+ tableHeader.innerText = dividerText;
+ body.appendChild(tableHeader);
+
+ const mobileHeader = document.createElement("div");
+ mobileHeader.className = "no-results";
+ mobileHeader.innerText = dividerText;
+ mobileCards.appendChild(mobileHeader);
+ }
+
+ let rank;
+ if (zeroScoreUserIds.has(user.id)) {
+ rank = "";
+ } else {
+ rank =
+ user.originalRank !== undefined
+ ? user.originalRank
+ : user.activeIndex !== undefined
+ ? user.activeIndex + 1
+ : 1;
+
+ if (activeDatasetType !== "overall" && user.score === 0) {
+ rank = "--";
+ }
}
body.appendChild(renderLeaderboardRow(user, rank));
mobileCards.appendChild(renderMobileCard(user, rank));
});
- if (
- inactiveList.length > 0 &&
- (currentPage === totalPages || isSearching)
- ) {
- const dividerText = "── [ SECTION: NO ACTIVITY YET ] ──";
-
- const tableHeader = document.createElement("div");
- tableHeader.className = "no-results";
- tableHeader.style.gridColumn = "1 / -1";
- tableHeader.innerText = dividerText;
- body.appendChild(tableHeader);
-
- const mobileHeader = document.createElement("div");
- mobileHeader.className = "no-results";
- mobileHeader.innerText = dividerText;
- mobileCards.appendChild(mobileHeader);
-
- inactiveList.forEach((user) => {
- body.appendChild(renderLeaderboardRow(user, ""));
- mobileCards.appendChild(renderMobileCard(user, ""));
- });
- }
-
- renderPagination(activeList.length);
+ renderPagination(data.length);
}
function setActiveTab(activeTab) {