@@ -2,55 +2,46 @@ import { Tabs, TabsContent, TabsList, TabsTrigger } from '@/components/ui/tabs';
22import CoinCard from '../CoinCard' ;
33import { 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+
524export 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