11'use client' ;
22
3- import Link from 'next/link' ;
43import { useRouter , useSearchParams } from 'next/navigation' ;
54import { Suspense , useEffect , useState } from 'react' ;
6- import { formatDate } from '@/app/lib/utils/format ' ;
5+ import PostListItem from '@/app/entities/admin/analytics/PostListItem ' ;
76
87interface PostItem {
98 postId : string ;
@@ -28,67 +27,25 @@ function SkeletonList() {
2827 < div className = "bg-white dark:bg-gray-900 rounded-xl border border-gray-100 dark:border-gray-700 overflow-hidden animate-pulse" >
2928 < div className = "h-8 border-b border-gray-100 dark:border-gray-700 bg-gray-50 dark:bg-gray-800" />
3029 < ul >
31- { [ ...Array ( 20 ) ] . map ( ( _ , i ) => (
32- < li
33- key = { i }
34- className = "px-4 py-2.5 border-b border-gray-50 dark:border-gray-800 last:border-b-0 flex items-center gap-3"
35- >
36- < div className = "h-3.5 w-4 bg-gray-200 dark:bg-gray-700 rounded shrink-0" />
37- < div className = "h-3.5 flex-1 bg-gray-200 dark:bg-gray-700 rounded" />
38- < div className = "h-3 w-16 bg-gray-200 dark:bg-gray-700 rounded shrink-0" />
39- < div className = "h-3 w-20 bg-gray-200 dark:bg-gray-700 rounded shrink-0" />
40- < div className = "h-3 w-10 bg-gray-200 dark:bg-gray-700 rounded shrink-0" />
41- < div className = "h-3.5 w-14 bg-gray-200 dark:bg-gray-700 rounded shrink-0" />
42- </ li >
43- ) ) }
30+ { [ ...Array ( 20 ) ] . map ( ( _ , i ) => (
31+ < li
32+ key = { i }
33+ className = "px-4 py-2.5 border-b border-gray-50 dark:border-gray-800 last:border-b-0 flex items-center gap-3"
34+ >
35+ < div className = "h-3.5 w-4 bg-gray-200 dark:bg-gray-700 rounded shrink-0" />
36+ < div className = "h-3.5 flex-1 bg-gray-200 dark:bg-gray-700 rounded" />
37+ < div className = "h-3 w-16 bg-gray-200 dark:bg-gray-700 rounded shrink-0" />
38+ < div className = "h-3 w-20 bg-gray-200 dark:bg-gray-700 rounded shrink-0" />
39+ < div className = "h-3 w-10 bg-gray-200 dark:bg-gray-700 rounded shrink-0" />
40+ < div className = "h-3.5 w-14 bg-gray-200 dark:bg-gray-700 rounded shrink-0" />
41+ </ li >
42+ ) ) }
4443 </ ul >
4544 </ div >
4645 ) ;
4746}
4847
49- function PostListItem ( {
50- post,
51- rank,
52- viewsNode,
53- } : {
54- post : PostItem ;
55- rank : number ;
56- viewsNode : React . ReactNode ;
57- } ) {
58- return (
59- < li className = "px-4 py-2.5 border-b border-gray-50 dark:border-gray-800 last:border-b-0 hover:bg-gray-50 dark:hover:bg-gray-800 transition-colors duration-150 flex items-center gap-3 min-w-0" >
60- < span className = "text-xs text-gray-400 dark:text-gray-500 w-4 shrink-0 text-right" >
61- { rank }
62- </ span >
63- < Link
64- href = { `/posts/${ post . slug } ` }
65- className = "flex-1 text-sm font-medium truncate dark:text-gray-200 hover:text-brand-primary dark:hover:text-brand-secondary transition-colors min-w-0"
66- >
67- { post . title }
68- </ Link >
69- < div className = " shrink-0 flex justify-center" >
70- { post . seriesTitle ? (
71- < span className = "text-xs px-1.5 py-0.5 rounded bg-brand-primary/10 text-brand-primary dark:bg-brand-secondary/10 dark:text-brand-secondary whitespace-nowrap text-nowrap max-w-full" >
72- { post . seriesTitle }
73- </ span >
74- ) : (
75- < span className = "text-xs text-gray-300 dark:text-gray-600" > —</ span >
76- ) }
77- </ div >
78- < span className = "text-xs text-gray-400 dark:text-gray-500 w-24 shrink-0 text-center" >
79- { formatDate ( post . date ) }
80- </ span >
81- < span className = "text-xs text-gray-400 dark:text-gray-500 w-12 shrink-0 text-center" >
82- ♥ { post . likeCount . toLocaleString ( ) }
83- </ span >
84- < span className = "text-sm font-semibold shrink-0 w-20 text-right dark:text-gray-200" >
85- { viewsNode }
86- </ span >
87- </ li >
88- ) ;
89- }
90-
91- function AnalyticsContent ( ) {
48+ const AnalyticsContent = ( ) => {
9249 const router = useRouter ( ) ;
9350 const searchParams = useSearchParams ( ) ;
9451 const tab = ( searchParams . get ( 'tab' ) ?? 'all' ) as TabKey ;
@@ -168,6 +125,7 @@ function AnalyticsContent() {
168125 < span className = "w-24 shrink-0 text-center" > 작성일</ span >
169126 < span className = "w-12 shrink-0 text-center" > 좋아요</ span >
170127 < span className = "w-20 shrink-0 text-right" > 조회수</ span >
128+ < span className = "w-4 shrink-0" />
171129 </ div >
172130 < ul >
173131 { posts . map ( ( post , i ) => (
@@ -196,7 +154,7 @@ function AnalyticsContent() {
196154 ) }
197155 </ div >
198156 ) ;
199- }
157+ } ;
200158
201159export default function StatsPage ( ) {
202160 return (
0 commit comments