Skip to content

Commit cbe15e5

Browse files
committed
refactor: top gainers losers
1 parent f25651d commit cbe15e5

1 file changed

Lines changed: 34 additions & 43 deletions

File tree

components/coin-details/TopGainersLosers.tsx

Lines changed: 34 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -2,55 +2,46 @@ import { Tabs, TabsContent, TabsList, TabsTrigger } from '@/components/ui/tabs';
22
import CoinCard from '../CoinCard';
33
import { getTopGainersLosers } from '@/lib/coingecko.actions';
44

5+
const TAB_CONFIG = [
6+
{ value: 'top-gainers', label: 'Top Gainers', key: 'top_gainers' },
7+
{ value: 'top-losers', label: 'Top Losers', key: 'top_losers' },
8+
] as const;
9+
10+
const renderCoinCard = (coin: TopGainersLosersResponse) => (
11+
<CoinCard
12+
key={coin.id}
13+
id={coin.id}
14+
name={coin.name}
15+
symbol={coin.symbol}
16+
image={coin.image}
17+
price={coin.usd}
18+
priceChangePercentage24h={coin.usd_24h_change}
19+
volume24={coin.usd_24h_vol}
20+
rank={coin.market_cap_rank}
21+
/>
22+
);
23+
524
export const TopGainersLosers = async () => {
625
const topGainersLosers = await getTopGainersLosers();
726

827
return (
9-
<Tabs defaultValue='top-gainers' className='mt-8 w-full'>
28+
<Tabs defaultValue='top-gainers' className='mt-8 w-full'>
1029
<TabsList className='size-full p-1 bg-transparent border-b border-dark-500 rounded-none '>
11-
<TabsTrigger
12-
value='top-gainers'
13-
className='data-[state=active]:border-none! data-[state=active]:bg-transparent! flex justify-start mb-0! py-2 text-lg font-semibold md:text-2xl'
14-
>
15-
Top Gainers
16-
</TabsTrigger>
17-
<TabsTrigger
18-
value='top-losers'
19-
className='data-[state=active]:border-none! data-[state=active]:bg-transparent! flex justify-start mb-0! py-2 text-lg font-semibold md:text-2xl'
20-
>
21-
Top Losers
22-
</TabsTrigger>
23-
</TabsList>
24-
<TabsContent value='top-gainers' className='top-list'>
25-
{topGainersLosers.top_gainers.map((coin: TopGainersLosersResponse) => (
26-
<CoinCard
27-
key={coin.id}
28-
id={coin.id}
29-
name={coin.name}
30-
symbol={coin.symbol}
31-
image={coin.image}
32-
price={coin.usd}
33-
priceChangePercentage24h={coin.usd_24h_change}
34-
volume24={coin.usd_24h_vol}
35-
rank={coin.market_cap_rank}
36-
/>
30+
{TAB_CONFIG.map((tab) => (
31+
<TabsTrigger
32+
key={tab.value}
33+
value={tab.value}
34+
className='data-[state=active]:border-none! data-[state=active]:bg-transparent! flex justify-start mb-0! py-2 text-lg font-semibold md:text-2xl'
35+
>
36+
{tab.label}
37+
</TabsTrigger>
3738
))}
38-
</TabsContent>
39-
<TabsContent value='top-losers' className='top-list'>
40-
{topGainersLosers.top_losers.map((coin: TopGainersLosersResponse) => (
41-
<CoinCard
42-
key={coin.id}
43-
id={coin.id}
44-
name={coin.name}
45-
symbol={coin.symbol}
46-
image={coin.image}
47-
price={coin.usd}
48-
priceChangePercentage24h={coin.usd_24h_change}
49-
volume24={coin.usd_24h_vol}
50-
rank={coin.market_cap_rank}
51-
/>
52-
))}
53-
</TabsContent>
39+
</TabsList>
40+
{TAB_CONFIG.map((tab) => (
41+
<TabsContent key={tab.value} value={tab.value} className='top-list'>
42+
{topGainersLosers[tab.key].map(renderCoinCard)}
43+
</TabsContent>
44+
))}
5445
</Tabs>
5546
);
5647
};

0 commit comments

Comments
 (0)