11import { UserResult } from "@/types/user-result" ;
2- import { Card , CardContent , CardDescription , CardHeader , CardTitle } from "./ui/card" ;
2+ import {
3+ Card ,
4+ CardContent ,
5+ CardDescription ,
6+ CardHeader ,
7+ CardTitle ,
8+ } from "./ui/card" ;
39import { Progress } from "./ui/progress" ;
4-
10+ import { useTranslation } from "./language-provider" ;
511
612type Props = {
713 user1 : UserResult ;
@@ -15,45 +21,64 @@ const items = [
1521] ;
1622
1723export function BreakdownBars ( { user1, user2 } : Props ) {
18- const getMaxScore = ( score1 : number , score2 : number ) => Math . max ( score1 , score2 , 1 )
19-
24+ const getMaxScore = ( score1 : number , score2 : number ) =>
25+ Math . max ( score1 , score2 , 1 ) ;
26+ const { t, dir } = useTranslation ( ) ;
2027
2128 return (
22- < Card >
23- < CardHeader >
24- < CardTitle > Detailed Breakdown</ CardTitle >
25- < CardDescription > Progress bars showing relative performance</ CardDescription >
26- </ CardHeader >
27- < CardContent className = "space-y-6" >
28- { [ "repoScore" , "prScore" , "contributionScore" ] . map ( ( metric ) => {
29- const user1Value = user1 [ metric as keyof UserResult ] as number
30- const user2Value = user2 [ metric as keyof UserResult ] as number
31- const maxVal = getMaxScore ( user1Value , user2Value )
32- const metricLabel = metric === "repoScore" ? "Repository Score" : metric === "prScore" ? "Pull Request Score" : "Contribution Score"
33- return (
34- < div key = { metric } className = "space-y-2 pe-2" >
35- < div className = "flex justify-between text-sm" >
36- < span > { metricLabel } </ span >
37- < span className = "text-muted-foreground" >
38- { user1 . username } : { user1Value } | { user2 . username } : { user2Value }
39- </ span >
40- </ div >
41- < div className = "space-y-1 " >
42- < div className = "flex items-center gap-2" >
43- < span className = "text-xs w-24 truncate" > { user1 . username } </ span >
44- < Progress value = { ( user1Value / maxVal ) * 100 } className = "flex-1 h-2" />
45- < span className = "text-xs w-8" > { user1Value } </ span >
46- </ div >
47- < div className = "flex items-center gap-2" >
48- < span className = "text-xs w-24 truncate" > { user2 . username } </ span >
49- < Progress value = { ( user2Value / maxVal ) * 100 } className = "flex-1 h-2" />
50- < span className = "text-xs w-8" > { user2Value } </ span >
51- </ div >
52- </ div >
53- </ div >
54- )
55- } ) }
56- </ CardContent >
57- </ Card >
29+ < Card >
30+ < CardHeader >
31+ < CardTitle > { t ( 'breakdown.title' ) } </ CardTitle >
32+ < CardDescription >
33+ { t ( 'breakdown.description' ) }
34+ </ CardDescription >
35+ </ CardHeader >
36+ < CardContent className = "space-y-6" >
37+ { [ "repoScore" , "prScore" , "contributionScore" ] . map ( ( metric ) => {
38+ const user1Value = user1 [ metric as keyof UserResult ] as number ;
39+ const user2Value = user2 [ metric as keyof UserResult ] as number ;
40+ const maxVal = getMaxScore ( user1Value , user2Value ) ;
41+ const metricLabel =
42+ metric === "repoScore"
43+ ? "breakdown.repo"
44+ : metric === "prScore"
45+ ? "breakdown.pr"
46+ : "breakdown.contribution" ;
47+ return (
48+ < div key = { metric } className = "space-y-2 pe-2" >
49+ < div className = "flex justify-between text-sm" >
50+ < span > { t ( metricLabel ) } </ span >
51+ < span className = "text-muted-foreground" >
52+ { user1 . username } : { user1Value } | { user2 . username } :{ " " }
53+ { user2Value }
54+ </ span >
55+ </ div >
56+ < div className = "space-y-1 " >
57+ < div className = "flex items-center gap-2" >
58+ < span className = "text-xs w-24 truncate" >
59+ { user1 . username }
60+ </ span >
61+ < Progress
62+ value = { ( user1Value / maxVal ) * 100 }
63+ className = "flex-1 h-2"
64+ />
65+ < span className = "text-xs w-8" > { user1Value } </ span >
66+ </ div >
67+ < div className = "flex items-center gap-2" >
68+ < span className = "text-xs w-24 truncate" >
69+ { user2 . username }
70+ </ span >
71+ < Progress
72+ value = { ( user2Value / maxVal ) * 100 }
73+ className = "flex-1 h-2"
74+ />
75+ < span className = "text-xs w-8" > { user2Value } </ span >
76+ </ div >
77+ </ div >
78+ </ div >
79+ ) ;
80+ } ) }
81+ </ CardContent >
82+ </ Card >
5883 ) ;
5984}
0 commit comments