1+ import { useState } from 'react' ;
12import { Icon } from '@/shared/icons' ;
23import { Card } from '@/shared/components/container/Card' ;
34import { cn } from '@/shared/lib' ;
@@ -7,8 +8,10 @@ interface EventCardProps {
78 name : string ;
89 address : string ;
910 description : string ;
11+ startDate ?: string ;
12+ endDate ?: string ;
1013 variant ?: 'gray' | 'mint' ;
11- size ?: 'medium' | 'large' ;
14+ size ?: 'small' | ' medium' | 'large' ;
1215 imageSrc ?: string ;
1316}
1417
@@ -20,14 +23,47 @@ const EventCard = ({
2023 size = 'medium' ,
2124 imageSrc = '' ,
2225} : EventCardProps ) => {
26+ const [ liked , setLiked ] = useState ( false ) ;
27+
28+ const handleLikeClick = ( ) => {
29+ setLiked ( ( prev ) => ! prev ) ;
30+ } ;
2331 return (
2432 < Card
2533 variant = { variant }
26- size = { size }
27- customHeight = { size === 'large' ? '13rem' : undefined }
34+ size = { size === 'small' ? undefined : size }
35+ customHeight = {
36+ size === 'large' ? '13rem' : size === 'small' ? '8rem' : undefined
37+ }
2838 >
29- { /* Medium 카드 */ }
30- { size === 'medium' ? (
39+ { size === 'small' ? (
40+ < div className = 'flex w-[17rem] h-[8rem] p-[0.9rem_1rem] justify-center items-center flex-shrink-0 gap-[2rem]' >
41+ { /* 행사 사진 */ }
42+ < div className = 'relative w-[7rem] h-full rounded-[0.8rem] flex-shrink-0 overflow-hidden' >
43+ { imageSrc ? (
44+ < Image
45+ src = { imageSrc }
46+ alt = { name }
47+ fill
48+ className = 'object-cover'
49+ sizes = '7rem'
50+ loading = 'lazy'
51+ />
52+ ) : (
53+ < div className = 'absolute inset-0 bg-gray-200 rounded-[0.8rem]' />
54+ ) }
55+ </ div >
56+ { /* 행사 이름*/ }
57+ < span
58+ className = { cn (
59+ 'text-label-md truncate mb-[3rem]' ,
60+ variant === 'mint' ? 'text-mint-800' : 'text-gray-600' ,
61+ ) }
62+ >
63+ { name }
64+ </ span >
65+ </ div >
66+ ) : size === 'medium' ? (
3167 < div className = 'flex flex-col justify-between w-full' >
3268 { /* 행사 사진 */ }
3369 < div className = 'relative w-full h-[9rem] rounded-[2rem] mb-[1rem] overflow-hidden' >
@@ -59,7 +95,12 @@ const EventCard = ({
5995 < Icon
6096 name = 'HeartStraight'
6197 size = { 20 }
62- color = { variant === 'mint' ? 'mint-400' : 'gray-300' }
98+ color = {
99+ liked ? 'red-400' : variant === 'mint' ? 'mint-400' : 'gray-300'
100+ }
101+ fillColor = { liked ? 'red-300' : undefined }
102+ onClick = { handleLikeClick }
103+ className = 'cursor-pointer'
63104 />
64105 </ div >
65106 { /* 행사 주소 */ }
@@ -105,7 +146,16 @@ const EventCard = ({
105146 < Icon
106147 name = 'HeartStraight'
107148 size = { 20 }
108- color = { variant === 'mint' ? 'mint-400' : 'gray-300' }
149+ color = {
150+ liked
151+ ? 'red-400'
152+ : variant === 'mint'
153+ ? 'mint-400'
154+ : 'gray-300'
155+ }
156+ fillColor = { liked ? 'red-300' : undefined }
157+ onClick = { handleLikeClick }
158+ className = 'cursor-pointer'
109159 />
110160 </ div >
111161
@@ -125,4 +175,4 @@ const EventCard = ({
125175 ) ;
126176} ;
127177
128- export default EventCard ;
178+ export default EventCard ;
0 commit comments