Skip to content

Commit 3048149

Browse files
authored
feat: update leaderboard UI with top 3 highlights and trophy icons (#1617)
1 parent b434421 commit 3048149

File tree

2 files changed

+95
-29
lines changed

2 files changed

+95
-29
lines changed

src/common/playleaderboard/TopPlayCreators.jsx

Lines changed: 52 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -4,23 +4,39 @@ import TableCell from '@mui/material/TableCell';
44
import TableContainer from '@mui/material/TableContainer';
55
import TableHead from '@mui/material/TableHead';
66
import TableRow from '@mui/material/TableRow';
7+
import EmojiEventsIcon from '@mui/icons-material/EmojiEvents';
78
import './leaderBoard.css';
89

910
const TopPlayCreators = ({ topPlayCreators }) => {
10-
const profilePicture = (name, avatarUrl) => {
11-
return (
12-
<div className="flex flex-row items-center gap-4">
13-
<img
14-
alt={name}
15-
className="rounded-full border-solid h-8 w-8"
16-
src={avatarUrl}
17-
title={name}
18-
/>
19-
<div className="leaderboard-table-cell">{name}</div>
20-
</div>
21-
);
11+
const getRankIcon = (rank) => {
12+
if (rank === 1) {
13+
return <EmojiEventsIcon className="gold-trophy" fontSize="small" />;
14+
}
15+
16+
if (rank === 2) {
17+
return <EmojiEventsIcon className="silver-trophy" fontSize="small" />;
18+
}
19+
20+
if (rank === 3) {
21+
return <EmojiEventsIcon className="bronze-trophy" fontSize="small" />;
22+
}
23+
24+
return null;
2225
};
2326

27+
const profilePicture = (name, avatarUrl, rank) => (
28+
<div className="flex flex-row items-center gap-3">
29+
{getRankIcon(rank)}
30+
<img
31+
alt={name}
32+
className="h-8 w-8 rounded-full border-solid rank-avatar"
33+
src={avatarUrl}
34+
title={name}
35+
/>
36+
<div className="leaderboard-table-cell">{name}</div>
37+
</div>
38+
);
39+
2440
return (
2541
<TableContainer className="leaderboard-container">
2642
<Table aria-label="leader board">
@@ -30,24 +46,34 @@ const TopPlayCreators = ({ topPlayCreators }) => {
3046
Name
3147
</TableCell>
3248
<TableCell align="center" className="leaderboard-table-header">
33-
Number of plays
49+
Number of Plays
3450
</TableCell>
3551
</TableRow>
3652
</TableHead>
3753
<TableBody>
38-
{topPlayCreators.map((creator) => (
39-
<TableRow
40-
key={creator.displayName}
41-
sx={{ '&:last-child td, &:last-child th': { border: 0 } }}
42-
>
43-
<TableCell align="left" className="leaderboard-table-cell" component="th" scope="row">
44-
{profilePicture(creator.displayName, creator.avatarUrl)}
45-
</TableCell>
46-
<TableCell align="center" className="leaderboard-table-cell">
47-
{creator.count}
48-
</TableCell>
49-
</TableRow>
50-
))}
54+
{topPlayCreators.map((creator, index) => {
55+
const rank = index + 1;
56+
57+
return (
58+
<TableRow
59+
className={`rank-${rank}`}
60+
key={creator.displayName}
61+
sx={{ '&:last-child td, &:last-child th': { border: 0 } }}
62+
>
63+
<TableCell
64+
align="left"
65+
className="leaderboard-table-cell"
66+
component="th"
67+
scope="row"
68+
>
69+
{profilePicture(creator.displayName, creator.avatarUrl, rank)}
70+
</TableCell>
71+
<TableCell align="center" className="leaderboard-table-cell">
72+
{creator.count}
73+
</TableCell>
74+
</TableRow>
75+
);
76+
})}
5177
</TableBody>
5278
</Table>
5379
</TableContainer>

src/common/playleaderboard/leaderBoard.css

Lines changed: 43 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,11 +5,12 @@
55
margin-top: 10px;
66
margin-bottom: 20px;
77
padding: 5px 2rem 1rem 2rem;
8-
--tw-shadow: 0 20px 25px -5px rgb(0 0 0 / 0.1), 0 8px 10px -6px rgb(0 0 0 / 0.1);
8+
--tw-shadow: 0 20px 25px -5px rgb(0 0 0 / 0.1),
9+
0 8px 10px -6px rgb(0 0 0 / 0.1);
910
--tw-shadow-colored: 0 20px 25px -5px var(--tw-shadow-color),
1011
0 8px 10px -6px var(--tw-shadow-color);
11-
box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000),
12-
var(--tw-shadow);
12+
box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000),
13+
var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
1314
}
1415

1516
.leaderboard-table-cell {
@@ -24,6 +25,8 @@
2425
.leaderboard-heading {
2526
font-family: var(--ff-accent);
2627
font-size: 32px !important;
28+
text-align: center;
29+
margin-bottom: 12px;
2730
}
2831

2932
.leaderboard-text {
@@ -37,3 +40,40 @@
3740
justify-content: center;
3841
height: 100vh;
3942
}
43+
44+
/* Trophy colors */
45+
.gold-trophy {
46+
color: #ffd700;
47+
}
48+
.silver-trophy {
49+
color: #c0c0c0;
50+
}
51+
.bronze-trophy {
52+
color: #cd7f32;
53+
}
54+
55+
/* Highlight top 3 rows */
56+
.rank-1 {
57+
background: rgba(255, 215, 0, 0.15);
58+
font-weight: bold;
59+
}
60+
.rank-2 {
61+
background: rgba(192, 192, 192, 0.15);
62+
}
63+
.rank-3 {
64+
background: rgba(205, 127, 50, 0.15);
65+
}
66+
67+
/* Avatar borders */
68+
.rank-avatar {
69+
border: 2px solid transparent;
70+
}
71+
.rank-1 .rank-avatar {
72+
border-color: #ffd700;
73+
}
74+
.rank-2 .rank-avatar {
75+
border-color: #c0c0c0;
76+
}
77+
.rank-3 .rank-avatar {
78+
border-color: #cd7f32;
79+
}

0 commit comments

Comments
 (0)