11import React from 'react' ;
22import { LEVEL_DATA } from '@/constants/level' ;
33import type { Level } from '@/constants/level' ;
4+ import { LEVELS_DATA } from '@/constants/levelcondition' ;
45
56interface LevelCardProps {
67 userLevel : number ;
78 userProgress : number ;
9+ currentReviewCount : number ; // 사용자의 현재 후기 개수
10+ currentLikeCount : number ; // 사용자의 현재 좋아요 개수
811}
9- const LevelCard : React . FC < LevelCardProps > = ( { userLevel, userProgress } ) => {
10- // userLevel에 해당하는 레벨 데이터를 찾습니다.
11- const foundLevelData = LEVEL_DATA . find ( ( level : Level ) => level . id === userLevel ) ;
1212
13- // 만약 해당하는 데이터가 없으면, LEVEL_DATA의 첫 번째 항목(Lv. 1)을 기본값으로 사용합니다.
13+ const LevelCard : React . FC < LevelCardProps > = ( {
14+ userLevel,
15+ userProgress,
16+ currentReviewCount,
17+ currentLikeCount
18+ } ) => {
19+ const foundLevelData = LEVEL_DATA . find ( ( level : Level ) => level . id === userLevel ) ;
1420 const levelDataToDisplay = foundLevelData || LEVEL_DATA [ 0 ] ;
1521
16- // level.ts 파일이 비어있을 경우에 대한 방어 코드
1722 if ( ! levelDataToDisplay ) {
1823 return < div > 레벨 정보를 불러올 수 없습니다.</ div > ;
1924 }
2025
21- // 화면에 표시할 데이터를 구조분해 할당합니다.
2226 const { id : displayLevel , title : levelTitle , CharacterComponent } = levelDataToDisplay ;
2327
28+ const nextLevelGoalData = LEVELS_DATA . find ( level => level . level === userLevel + 1 ) ;
29+
30+ let nextLevelTask : React . ReactNode = "최고 레벨입니다!" ;
31+
32+ if ( nextLevelGoalData ) {
33+ const reviewGoalMatch = nextLevelGoalData . condition . match ( / 후 기 ( \d + ) 개 / ) ;
34+ const likeGoalMatch = nextLevelGoalData . condition . match ( / 좋 아 요 ( \d + ) 개 / ) ;
35+
36+ const reviewGoal = reviewGoalMatch ? parseInt ( reviewGoalMatch [ 1 ] , 10 ) : 0 ;
37+ const likeGoal = likeGoalMatch ? parseInt ( likeGoalMatch [ 1 ] , 10 ) : 0 ;
38+
39+ const remainingReviews = Math . max ( 0 , reviewGoal - currentReviewCount ) ;
40+ const remainingLikes = Math . max ( 0 , likeGoal - currentLikeCount ) ;
41+
42+ nextLevelTask = (
43+ < >
44+ 후기 < span className = "text-red-400" > { remainingReviews } </ span > 개, 좋아요 < span className = "text-red-400" > { remainingLikes } </ span > 개 누르기
45+ </ >
46+ ) ;
47+ }
48+
2449 return (
2550 < section className = "h-[140px] rounded-lg bg-gray-800/30 p-4" >
2651 < div className = "flex items-center gap-4" >
@@ -34,8 +59,7 @@ const LevelCard: React.FC<LevelCardProps> = ({ userLevel, userProgress }) => {
3459 </ div >
3560 < p className = "mt-3 text-caption-3 text-gray-300" >
3661 다음 레벨까지 할 일은... < br />
37- 후기 < span className = "text-red-400" > OO</ span > 개, 좋아요 < span className = "text-red-400" > OO</ span > 개
38- 누르기
62+ { nextLevelTask }
3963 </ p >
4064 </ div >
4165 < div className = "flex h-24 w-24 shrink-0 items-center justify-center" >
0 commit comments