diff --git a/frontend/src/app/cow/[cowNo]/genome/_components/category-evaluation-card.tsx b/frontend/src/app/cow/[cowNo]/genome/_components/category-evaluation-card.tsx index 1c89c2d..6511322 100644 --- a/frontend/src/app/cow/[cowNo]/genome/_components/category-evaluation-card.tsx +++ b/frontend/src/app/cow/[cowNo]/genome/_components/category-evaluation-card.tsx @@ -26,46 +26,8 @@ import { ResponsiveContainer } from 'recharts' import { useMediaQuery } from "@/hooks/use-media-query" -import { DEFAULT_TRAITS, ALL_TRAITS, TRAIT_CATEGORIES } from "@/constants/traits" - -// 형질명 표시 (전체 이름) -const TRAIT_SHORT_NAMES: Record = { - '도체중': '도체중', - '등심단면적': '등심단면적', - '등지방두께': '등지방두께', - '근내지방도': '근내지방도', - '체장': '체장', - '체고': '체고', - '등심weight': '등심중량', - '12개월령체중': '12개월령체중', - '십자': '십자', - '흉심': '흉심', - '흉폭': '흉폭', - '고장': '고장', - '요각폭': '요각폭', - '좌골폭': '좌골폭', - '곤폭': '곤폭', - '흉위': '흉위', - '안심weight': '안심무게', - '채끝weight': '채끝무게', - '목심weight': '목심무게', - '앞다리weight': '앞다리무게', - '우둔weight': '우둔무게', - '설도weight': '설도무게', - '사태weight': '사태무게', - '양지weight': '양지무게', - '갈비weight': '갈비무게', - '안심rate': '안심비율', - '등심rate': '등심비율', - '채끝rate': '채끝비율', - '목심rate': '목심비율', - '앞다리rate': '앞다리비율', - '우둔rate': '우둔비율', - '설도rate': '설도비율', - '사태rate': '사태비율', - '양지rate': '양지비율', - '갈비rate': '갈비비율', -} +import { DEFAULT_TRAITS, ALL_TRAITS, TRAIT_CATEGORIES, getTraitDisplayName, TRAIT_DISPLAY_NAMES } from "@/constants/traits" +import { GenomeCowTraitDto } from "@/types/genome.types" interface CategoryStat { category: string @@ -74,22 +36,13 @@ interface CategoryStat { count: number } -interface TraitData { - id?: number - traitName?: string // 형질명 - traitCategory?: string // 카테고리 - breedVal?: number // 표준화육종가 (σ 단위) - percentile?: number - traitVal?: number // EPD (예상후대차이) 원래 값 -} - interface CategoryEvaluationCardProps { categoryStats: CategoryStat[] comparisonAverages: ComparisonAveragesDto | null traitComparisonAverages?: TraitComparisonAveragesDto | null // 형질별 평균 비교 데이터 (폴리곤 차트용) regionAvgZ: number farmAvgZ: number - allTraits?: TraitData[] + allTraits?: GenomeCowTraitDto[] cowNo?: string hideTraitCards?: boolean // 형질 카드 숨김 여부 } @@ -151,7 +104,7 @@ export function CategoryEvaluationCard({ // 폴리곤 차트용 데이터 생성 (선택된 형질 기반) - 보은군, 농가, 이 개체 비교 const traitChartData = chartTraits.map(traitName => { - const trait = allTraits.find((t: TraitData) => t.traitName === traitName) + const trait = allTraits.find((t: GenomeCowTraitDto) => t.traitName === traitName) // 형질별 평균 데이터에서 해당 형질 찾기 const traitAvgRegion = traitComparisonAverages?.region?.find(t => t.traitName === traitName) @@ -166,7 +119,7 @@ export function CategoryEvaluationCard({ return { name: traitName, - shortName: TRAIT_SHORT_NAMES[traitName] || traitName, + shortName: getTraitDisplayName(traitName), breedVal: trait?.breedVal ?? 0, // 이 개체 표준화육종가 (σ) epd: trait?.traitVal ?? 0, // 이 개체 EPD (육종가) regionVal: regionTraitAvg, // 보은군 평균 (표준화육종가) @@ -192,7 +145,7 @@ export function CategoryEvaluationCard({ // 형질 이름으로 원본 형질명 찾기 (shortName -> name) const findTraitNameByShortName = (shortName: string) => { - const entry = Object.entries(TRAIT_SHORT_NAMES).find(([, short]) => short === shortName) + const entry = Object.entries(TRAIT_DISPLAY_NAMES).find(([, short]) => short === shortName) return entry ? entry[0] : shortName } @@ -262,7 +215,7 @@ export function CategoryEvaluationCard({
{traits.map(trait => { const isSelected = chartTraits.includes(trait) - const traitData = allTraits.find((t: TraitData) => t.traitName === trait) + const traitData = allTraits.find((t: GenomeCowTraitDto) => t.traitName === trait) return (