diff --git a/src/components/HOCs/WithLeaderboard/WithLeaderboard.jsx b/src/components/HOCs/WithLeaderboard/WithLeaderboard.jsx index 96c9a040d..8c96cd215 100644 --- a/src/components/HOCs/WithLeaderboard/WithLeaderboard.jsx +++ b/src/components/HOCs/WithLeaderboard/WithLeaderboard.jsx @@ -39,7 +39,16 @@ const WithLeaderboard = function (WrappedComponent, initialMonthsPast = 1, initi const merged = _clone(this.state.leaderboard); if (merged) { merged.splice(userLeaderboard[0].rank - 1, userLeaderboard.length, ...userLeaderboard); - this.setState({ leaderboard: merged }); + // Deduplicate by userId, keeping the first occurrence at the correct + // rank position. This prevents duplicate entries when the user already + // appeared in the initially fetched leaderboard at a different index. + const seen = new Set(); + const deduped = merged.filter((entry) => { + if (seen.has(entry.userId)) return false; + seen.add(entry.userId); + return true; + }); + this.setState({ leaderboard: deduped }); } } }; diff --git a/src/services/Leaderboard/Leaderboard.js b/src/services/Leaderboard/Leaderboard.js index 6c9e0470e..09d0efa87 100644 --- a/src/services/Leaderboard/Leaderboard.js +++ b/src/services/Leaderboard/Leaderboard.js @@ -201,6 +201,7 @@ export const initializeLeaderboardParams = function ( endDate, ) { if (numberMonths === CURRENT_MONTH) { + params.monthDuration = CURRENT_MONTH; params.start = startOfMonth(new Date()).toISOString(); params.end = endOfDay(new Date()).toISOString(); } else if (numberMonths === CUSTOM_RANGE && startDate && endDate) {