Skip to content

Commit 43be7fb

Browse files
authored
feat(ui): refactor staking leaderboard to responsive card layout (#112)
1 parent ebb8cfc commit 43be7fb

1 file changed

Lines changed: 66 additions & 0 deletions

File tree

Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,66 @@
1+
import React from "react";
2+
3+
export interface LeaderboardEntry {
4+
rank: number;
5+
address: string;
6+
amount: string;
7+
}
8+
9+
interface TableRowsProps {
10+
data: LeaderboardEntry[];
11+
}
12+
13+
export const TableRows: React.FC<TableRowsProps> = ({ data }) => {
14+
return (
15+
<div className="w-full max-w-7xl mx-auto px-4 sm:px-6 lg:px-8">
16+
{/* Desktop Header: Visible on md screens and above (>= 768px) */}
17+
<div className="hidden md:grid md:grid-cols-12 gap-4 bg-gray-100 dark:bg-gray-800 p-4 font-semibold text-xs uppercase tracking-wider text-gray-600 dark:text-gray-300 rounded-t-lg border-b border-gray-200 dark:border-gray-700">
18+
<div className="col-span-2">Rank</div>
19+
<div className="col-span-6">Address</div>
20+
<div className="col-span-4 text-right">Staked Amount</div>
21+
</div>
22+
23+
{/* Rows Container: Stacked Cards on Mobile (< 768px), Data Table Rows on Desktop (>= 768px) */}
24+
<div className="flex flex-col gap-3 md:gap-0">
25+
{data.map((item) => (
26+
<div
27+
key={item.address}
28+
className="flex flex-col md:grid md:grid-cols-12 md:gap-4 p-4 bg-white dark:bg-gray-900 border border-gray-200 dark:border-gray-800 rounded-xl md:rounded-none md:border-b md:border-x-0 md:border-t-0 hover:bg-gray-50 dark:hover:bg-gray-800/50 transition-colors shadow-sm md:shadow-none"
29+
>
30+
{/* Rank */}
31+
<div className="flex justify-between items-center md:col-span-2 mb-2 md:mb-0">
32+
<span className="md:hidden text-xs font-semibold uppercase text-gray-500 dark:text-gray-400">
33+
Rank
34+
</span>
35+
<span className="font-bold text-sm md:text-base text-gray-900 dark:text-white">
36+
#{item.rank}
37+
</span>
38+
</div>
39+
40+
{/* Address */}
41+
<div className="flex justify-between items-center md:col-span-6 mb-2 md:mb-0">
42+
<span className="md:hidden text-xs font-semibold uppercase text-gray-500 dark:text-gray-400">
43+
Address
44+
</span>
45+
<span className="font-mono text-xs md:text-sm text-gray-700 dark:text-gray-300 truncate max-w-[180px] sm:max-w-[280px] md:max-w-none">
46+
{item.address}
47+
</span>
48+
</div>
49+
50+
{/* Amount */}
51+
<div className="flex justify-between items-center md:col-span-4 md:text-right">
52+
<span className="md:hidden text-xs font-semibold uppercase text-gray-500 dark:text-gray-400">
53+
Staked Amount
54+
</span>
55+
<span className="font-bold text-sm md:text-base text-indigo-600 dark:text-indigo-400">
56+
{item.amount}
57+
</span>
58+
</div>
59+
</div>
60+
))}
61+
</div>
62+
</div>
63+
);
64+
};
65+
66+
export default TableRows;

0 commit comments

Comments
 (0)