From 32adc6b6941f58dbcf7aa4a8e4e7d5cdeb6bd0b5 Mon Sep 17 00:00:00 2001 From: orenzhang <41963680+OrenZhang@users.noreply.github.com> Date: Fri, 17 Apr 2026 21:24:32 +0800 Subject: [PATCH] feat(leaderboard): improve layout responsiveness and enhance percentage calculation --- frontend/app/(main)/layout.tsx | 2 +- .../common/leaderboard/leaderboard-table.tsx | 16 +++++++++++++--- frontend/components/layout/header.tsx | 2 +- 3 files changed, 15 insertions(+), 5 deletions(-) diff --git a/frontend/app/(main)/layout.tsx b/frontend/app/(main)/layout.tsx index 958077bf..d8361612 100644 --- a/frontend/app/(main)/layout.tsx +++ b/frontend/app/(main)/layout.tsx @@ -34,7 +34,7 @@ export default function MainLayout({
-
+
parseFloat(item.available_balance))) || 1 }, [items]) + const computePercentage = React.useCallback( + (balance: number) => { + const denominator = Math.log(maxBalance + 1) + if (denominator <= 0) return 0 + const safeBalance = Math.max(balance, 0) + return (Math.log(safeBalance + 1) / denominator) * 100 + }, + [maxBalance] + ) + const rankedItems = React.useMemo( () => items .map((entry, index) => ({ entry, rank: startRank + index, - percentage: (parseFloat(entry.available_balance) / maxBalance) * 100, + percentage: computePercentage(parseFloat(entry.available_balance)), })) .filter(({ entry }) => entry.user_id !== currentUserEntry?.user_id), - [items, startRank, currentUserEntry?.user_id, maxBalance] + [items, startRank, currentUserEntry?.user_id, computePercentage] ) const virtualizer = useVirtualizer({ @@ -69,7 +79,7 @@ export const LeaderboardTable = React.memo(function LeaderboardTable({ }, [virtualItems, rankedItems.length, hasMore, loading, onLoadMore]) const currentUserPercentage = currentUserEntry - ? (parseFloat(currentUserEntry.available_balance) / maxBalance) * 100 + ? computePercentage(parseFloat(currentUserEntry.available_balance)) : 0 if (loading && items.length === 0) { diff --git a/frontend/components/layout/header.tsx b/frontend/components/layout/header.tsx index 4e04b50c..e8c532e3 100644 --- a/frontend/components/layout/header.tsx +++ b/frontend/components/layout/header.tsx @@ -96,7 +96,7 @@ export function SiteHeader({ isFullWidth = false, onToggleFullWidth }: { isFullW
-
+
setSearchOpen(true)}>