11"use client"
22
3+ import { useEffect } from "react"
34import { useHistory } from "@/hooks/history/useHistory"
5+ import { HistoryStats } from "@/components/history/HistoryStatsProps"
46import { Card } from "@/components/ui/card"
57import { Badge } from "@/components/ui/badge"
68import { Button } from "@/components/ui/Button"
9+ import { ScoreBadge } from "@/components/history/ScoreBadge"
10+ import { formatRelativeTimeKST } from "@/lib/utils/formatDate"
711import { Github , ExternalLink , Trash2 , Calendar } from "lucide-react"
812import { useRouter } from "next/navigation"
913
@@ -13,25 +17,62 @@ interface HistoryContentProps {
1317}
1418
1519export default function HistoryContent ( { memberId, name } : HistoryContentProps ) {
16- const { repositories, loading, error } = useHistory ( memberId )
20+ const { repositories, loading, error, handleDelete , sortType , setSortType } = useHistory ( memberId )
1721 const router = useRouter ( )
1822
1923 if ( loading ) return < p className = "p-8 text-center" > 히스토리 불러오는 중...</ p >
2024 if ( error ) return < p className = "p-8 text-center text-red-500" > { error } </ p >
2125
2226 return (
23- < div className = "container mx-auto px-4 sm:px-6 lg:px-8 py-8 " >
27+ < div className = "max-w-3xl mx-auto p-6 " >
2428 < div className = "mb-8" >
2529 < h1 className = "mb-2 text-3xl font-bold" > 분석 히스토리</ h1 >
2630 < p className = "text-muted-foreground" > 시간에 따른 리포지토리 개선 사항을 추적하세요</ p >
2731 </ div >
2832
33+ { /* 통계 카드 컴포넌트 */ }
34+ < HistoryStats repositories = { repositories } />
35+
36+ { /* ✅ 정렬 버튼 */ }
37+ < div className = "flex justify-end gap-2 mb-4" >
38+ < Button
39+ variant = { sortType === "latest" ? "default" : "outline" }
40+ size = "sm"
41+ onClick = { ( ) => setSortType ( "latest" ) }
42+ >
43+ 최신순
44+ </ Button >
45+ < Button
46+ variant = { sortType === "score" ? "default" : "outline" }
47+ size = "sm"
48+ onClick = { ( ) => setSortType ( "score" ) }
49+ >
50+ 점수순
51+ </ Button >
52+ </ div >
53+
2954 < div className = "w-full max-w-3xl space-y-4" >
30- { repositories . map ( ( repo ) => (
55+ { repositories . length === 0 ? (
56+ // ✅ 분석 결과 없음 안내 카드
57+ < Card className = "p-10 text-center bg-muted/30 border-dashed border-2 border-muted-foreground/20 rounded-2xl shadow-sm hover:shadow-md transition-all" >
58+ < p className = "text-lg mb-6 text-muted-foreground" >
59+ 아직 분석 결과가 없습니다. 지금 바로{ " " }
60+ < span className = "font-semibold text-primary" > 새 분석</ span > 을 시작해 보세요!
61+ </ p >
62+ < Button
63+ size = "lg"
64+ onClick = { ( ) => router . push ( "/analysis" ) }
65+ className = "px-8"
66+ >
67+ 🚀 새 분석 시작하기
68+ </ Button >
69+ </ Card >
70+ ) : (
71+ repositories . map ( ( repo ) => (
3172 < Card
3273 key = { repo . id }
3374 className = "p-6 transition-all hover:border-primary/50 cursor-pointer"
34- onClick = { ( ) => router . push ( `/history /${ repo . id } ` ) }
75+ onClick = { ( ) => router . push ( `/analysis /${ repo . id } ` ) }
3576 >
3677 < div className = "flex flex-col gap-4 sm:flex-row sm:items-center sm:justify-between" >
3778 { /* 왼쪽 정보 */ }
@@ -76,25 +117,36 @@ export default function HistoryContent({ memberId, name }: HistoryContentProps)
76117
77118 < div className = "flex items-center gap-2 text-sm text-muted-foreground" >
78119 < Calendar className = "h-4 w-4" />
79- < span > 브랜치: { repo . mainBranch } </ span >
120+ < span > { formatRelativeTimeKST ( repo . createDate ) } </ span >
80121 </ div >
81122 </ div >
82123
83124 < div className = "flex items-center gap-6" >
125+ { repo . latestScore !== undefined && repo . latestScore !== null ? (
126+ < div className = "text-center" >
127+ < div className = "mb-1 text-sm text-muted-foreground" > 점수</ div >
128+ < ScoreBadge score = { repo . latestScore } size = "sm" />
129+ </ div >
130+ ) : (
131+ < div className = "text-sm text-muted-foreground" > 점수 없음</ div >
132+ ) }
84133 < Button
85134 variant = "ghost"
86135 size = "sm"
87136 onClick = { ( e ) => {
88137 e . stopPropagation ( )
89- console . log ( "삭제 요청:" , repo . id )
138+ if ( confirm ( "정말 이 리포지토리를 삭제하시겠습니까?" ) ) {
139+ handleDelete ( repo . id )
140+ }
90141 } }
91- >
142+ >
92143 < Trash2 className = "h-4 w-4 text-destructive" />
93144 </ Button >
94145 </ div >
95146 </ div >
96147 </ Card >
97- ) ) }
148+ ) )
149+ ) }
98150 </ div >
99151 </ div >
100152 )
0 commit comments