@@ -5,7 +5,7 @@ import { startHolyLoader } from 'holy-loader';
5
5
import { useMemo } from 'react' ;
6
6
import { leaderboardList } from '@/apis' ;
7
7
import { Rank } from '@/app/components' ;
8
- import { PATHS } from '@/constants' ;
8
+ import { PATHS , URLS } from '@/constants' ;
9
9
import { useSearchParam } from '@/hooks' ;
10
10
import { Dropdown , EmptyState } from '@/shared' ;
11
11
import { LeaderboardItemType } from '@/types' ;
@@ -17,17 +17,16 @@ export type searchParamsType = {
17
17
dateRange : string ;
18
18
} ;
19
19
20
+ const defaultParams = {
21
+ based : 'user' as const ,
22
+ sort : 'viewCount' as const ,
23
+ limit : '10' ,
24
+ dateRange : '30' ,
25
+ } ;
26
+
20
27
export const Content = ( ) => {
21
28
const [ searchParams , setSearchParams ] = useSearchParam < searchParamsType > ( ) ;
22
29
23
- // 기본값 설정
24
- const defaultParams = {
25
- based : 'user' as const ,
26
- sort : 'viewCount' as const ,
27
- limit : '10' ,
28
- dateRange : '30' ,
29
- } ;
30
-
31
30
const finalParams = {
32
31
...defaultParams ,
33
32
...searchParams ,
@@ -39,16 +38,18 @@ export const Content = () => {
39
38
} ) ;
40
39
41
40
const data = useMemo ( ( ) => {
42
- const value = (
43
- finalParams . based === 'user' ? boards ?. users : boards ?. posts
44
- ) as LeaderboardItemType [ ] ;
45
- return (
46
- value ?. map ( ( item ) => ( {
47
- name : finalParams . based === 'user' ? item . email . split ( '@' ) [ 0 ] : item . title ,
48
- value : finalParams . sort === 'viewCount' ? item . viewDiff : item . likeDiff ,
49
- } ) ) || [ ]
50
- ) ;
51
- } , [ boards , finalParams . based , finalParams . sort ] ) ;
41
+ const isUserBased = finalParams ?. based === 'user' ;
42
+ const isViewBased = finalParams ?. sort === 'viewCount' ;
43
+
44
+ const value = ( ( isUserBased ? boards ?. users : boards ?. posts ) || [ ] ) as LeaderboardItemType [ ] ;
45
+
46
+ return value . map ( ( { username, title, viewDiff, likeDiff, slug } ) => ( {
47
+ key : isUserBased ? username : title ,
48
+ username,
49
+ url : URLS . VELOG + `/@${ username } ` + ( isUserBased ? '/posts' : `/${ slug } ` ) ,
50
+ value : isViewBased ? viewDiff : likeDiff ,
51
+ } ) ) ;
52
+ } , [ boards , finalParams ?. based , finalParams ?. sort ] ) ;
52
53
53
54
const handleChange = ( param : Partial < searchParamsType > ) => {
54
55
startHolyLoader ( ) ;
@@ -109,8 +110,15 @@ export const Content = () => {
109
110
icon = "📊"
110
111
/>
111
112
) : (
112
- data ?. map ( ( { name, value } , index ) => (
113
- < Rank name = { name } key = { index } count = { value } rank = { index + 1 } />
113
+ data ?. map ( ( { key, username, url, value } , index ) => (
114
+ < Rank
115
+ name = { key }
116
+ key = { index }
117
+ url = { url }
118
+ count = { value }
119
+ rank = { index + 1 }
120
+ suffix = { finalParams . based === 'post' ? username : '' }
121
+ />
114
122
) )
115
123
) }
116
124
</ div >
0 commit comments