Skip to content

πŸ›Fix &✨Feat: μ»¨ν…Œμ΄λ„ˆ μ’‹μ•„μš” λ²„νŠΌ ν™œμ„±ν™” & small Event Card μΆ”κ°€#82

Merged
KongMezu merged 9 commits intodevelopfrom
fix/#70/likebutton
Nov 2, 2025
Merged

Conversation

@KongMezu
Copy link
Copy Markdown
Contributor

@KongMezu KongMezu commented Oct 31, 2025

πŸ”₯ μž‘μ—… λ‚΄μš©

  • μž₯μ†Œ& 이벀트 μ»¨ν…Œμ΄λ„ˆ μ’‹μ•„μš” ν™œμ„±ν™”
  • small Event Card μΆ”κ°€

πŸ€” μΆ”ν›„ μž‘μ—… 사항

  • 챗봇 νŽ˜μ΄μ§€
  • 상세 이벀트 νŽ˜μ΄μ§€

πŸ”—Β μ΄μŠˆ

PR Point (To Reviewer)

각 μ»¨ν…Œμ΄λ„ˆ μ’‹μ•„μš” λ²„νŠΌ ν™œμ„±ν™”

SVGO λ¬Έμ œκ°€ ν•΄κ²°λ˜λ©΄μ„œ ν΄λ¦­μ‹œ μ’‹μ•„μš” λ²„νŠΌμ΄ ν™œμ„±ν™” λ˜λ„λ‘ μ»΄ν¬λ„ŒνŠΈ μˆ˜μ •ν–ˆμŠ΅λ‹ˆλ‹€. κΈ°μ‘΄ μž₯μ†Œμ™€ 이벀트 λ°•μŠ€λ₯Ό import ν•˜λŠ” 방법이 λ°”λ€Œμ§„ μ•Šμ•˜μœΌλ‹ˆ κ·ΈλŒ€λ‘œ 쓰심 될 λ“― ν•©λ‹ˆλ‹€.

small 이벀트 μΉ΄λ“œ

μ œκ°€ μ“°λ €κ³  λ§Œλ“€μ—ˆμŠ΅λ‹ˆλ‹€. ν•œ νŽ˜μ΄μ§€μ—μ„œλ§Œ μ“°κΈΈλž˜ 곡톡 μ»΄ν¬λ„ŒνŠΈ μ œμž‘μ‹œμ—λŠ” λ§Œλ“€μ§€ μ•Šμ•˜μœΌλ‚˜ λ”°λ‘œ μ»΄ν¬λ„ŒνŠΈ 파일둜 λ§Œλ“€μžλ‹ˆ νš¨μœ¨μ„±μ΄ λ–¨μ–΄μ§€λŠ” κ±° κ°™μ•„ λ§Œλ“€μ—ˆμŠ΅λ‹ˆλ‹€.

EventCard Large 사진 제거

사진 뢀뢄이 μ—†λ‹€λŠ” μˆ˜μ •μ‚¬ν•­ λ°›κ³ , Large μΉ΄λ“œμ—μ„œ 사진 제거 ν–ˆμŠ΅λ‹ˆλ‹€.

πŸ“ΈΒ ν”Όκ·Έλ§ˆ μŠ€ν¬λ¦°μƒ· or κΈ°λŠ₯ GIF

image
2025-11-01.021430.mp4

Summary by CodeRabbit

릴리슀 λ…ΈνŠΈ

  • μƒˆλ‘œμš΄ κΈ°λŠ₯
    • 이벀트 μΉ΄λ“œμ™€ μœ„μΉ˜ μΉ΄λ“œμ— μ’‹μ•„μš” ν† κΈ€ μΆ”κ°€ β€” ν•˜νŠΈ μ•„μ΄μ½˜ 클릭으둜 μƒνƒœ λ³€κ²½ 및 μ‹œκ°μ  ν”Όλ“œλ°± 제곡.
    • 이벀트 μΉ΄λ“œμ— μ†Œν˜•(small) λ ˆμ΄μ•„μ›ƒ μΆ”κ°€λ‘œ μ»΄νŒ©νŠΈν•œ ν‘œμ‹œ 지원.
    • 이벀트 μΉ΄λ“œμ— μ‹œμž‘μΌ(startDate) 및 μ’…λ£ŒμΌ(endDate) 속성 μΆ”κ°€λ‘œ 일정 정보 ν‘œμ‹œ κ°€λŠ₯.

@vercel
Copy link
Copy Markdown

vercel bot commented Oct 31, 2025

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Preview Comments Updated (UTC)
af-fe Ready Ready Preview Comment Nov 1, 2025 1:59pm

@coderabbitai
Copy link
Copy Markdown
Contributor

coderabbitai bot commented Oct 31, 2025

Walkthrough

EventCard와 LocationCard에 둜컬 liked μƒνƒœμ™€ 클릭 ν† κΈ€ 둜직이 μΆ”κ°€λ˜μ—ˆκ³ , EventCardλŠ” size에 'small' μ˜΅μ…˜κ³Ό startDate, endDate propsκ°€ λ„μž…λ˜μ–΄ μž‘μ€ 크기 λ Œλ”λ§ κ²½λ‘œκ°€ μΆ”κ°€λ˜μ—ˆμŠ΅λ‹ˆλ‹€. ν•˜νŠΈ μ•„μ΄μ½˜μ˜ 색상 및 μ±„μš°κΈ°(fill) 속성이 μ’‹μ•„μš” μƒνƒœμ™€ variant에 따라 λ³€κ²½λ©λ‹ˆλ‹€.

Changes

Cohort / File(s) Change summary
EventCard λ³€κ²½
src/shared/components/container/EventCard.tsx
size νƒ€μž…μ— 'small' μΆ”κ°€; startDate?, endDate? props μΆ”κ°€; useState둜 liked μƒνƒœ 및 handleLikeClick μΆ”κ°€; small/medium/large 쑰건뢀 λ Œλ”λ§ 보강(μž‘μ€ 크기용 μΆ•μ•½ λ ˆμ΄μ•„μ›ƒ μΆ”κ°€); HeartStraight μ•„μ΄μ½˜μ— 클릭 ν•Έλ“€λŸ¬, cursor-pointer 클래슀, 색상 및 fillColor 처리 μΆ”κ°€; 높이 λ§€ν•‘ 및 ν…μŠ€νŠΈ 색상/μ •λ ¬ μ‘°μ •; 일뢀 κΈ°μ‘΄ 이미지 블둝 주석 처리/제거
LocationCard λ³€κ²½
src/shared/components/container/LocationCard.tsx
useState둜 liked μƒνƒœ 및 handleLikeClick μΆ”κ°€; Heart μ•„μ΄μ½˜μ— 클릭 ν•Έλ“€λŸ¬μ™€ cursor-pointer 클래슀 μΆ”κ°€; μ’‹μ•„μš” μ‹œ fillColor 및 색상(red-400) 적용, λΉ„μ’‹μ•„μš” μ‹œ mint/gray 색상 처리; UI ν”Όλ“œλ°± 둜직만 λ‚΄λΆ€ λ³€κ²½ (퍼블릭 μ‹œκ·Έλ‹ˆμ²˜ λ―Έλ³€κ²½)

Sequence Diagram(s)

sequenceDiagram
    autonumber
    participant User as μ‚¬μš©μž
    participant Card as EventCard/LocationCard
    participant LocalState as 둜컬 liked μƒνƒœ

    Note over User,Card: μ‚¬μš©μž μƒν˜Έμž‘μš© (클릭)
    User->>Card: ν•˜νŠΈ μ•„μ΄μ½˜ 클릭
    Card->>LocalState: handleLikeClick() 호좜 (ν† κΈ€)
    LocalState-->>Card: liked κ°’ λ³€κ²½
    Card->>Card: μ•„μ΄μ½˜ 색상/μ±„μš°κΈ° 및 ν…μŠ€νŠΈ μŠ€νƒ€μΌ μ—…λ°μ΄νŠΈ
    Card->>User: UI κ°±μ‹  (μƒˆ 색상/포인터 반영)
Loading

Estimated code review effort

🎯 2 (Simple) | ⏱️ ~10 λΆ„

  • μΆ”κ°€λœ 둜컬 μƒνƒœμ™€ 클릭 ν•Έλ“€λŸ¬κ°€ 반볡적이고 λ‹¨μˆœν•¨
  • κ²€ν†  포인트:
    • EventCard의 small 경둜 λ ˆμ΄μ•„μ›ƒ 및 높이(customHeight) λ§€ν•‘ μ •ν™•μ„±
    • Heart μ•„μ΄μ½˜μ˜ 색상/fillColor μ²˜λ¦¬μ™€ 클릭 포컀슀/μ ‘κ·Όμ„± λ™μž‘

μ‹œ

🐰 ν•˜νŠΈλŠ” 톑, ν† λ‹₯ ν† λ‹₯,
μž‘μ€ μΉ΄λ“œλ„ 크게 웃넀.
클릭 ν•œ λ²ˆμ— 빛이 듀어와,
초둝과 빨강이 좀을 μΆ”λ„€.
λ‹Ήκ·Ό λŒ€μ‹  λ°•μˆ˜, λƒ λƒ  λƒ . πŸ₯•πŸ’•

Pre-merge checks and finishing touches

❌ Failed checks (1 warning)
Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 0.00% which is insufficient. The required threshold is 80.00%. You can run @coderabbitai generate docstrings to improve docstring coverage.
βœ… Passed checks (2 passed)
Check name Status Explanation
Title Check βœ… Passed 제λͺ© "πŸ›Fix &✨Feat: μ»¨ν…Œμ΄λ„ˆ μ’‹μ•„μš” λ²„νŠΌ ν™œμ„±ν™” & small Event Card μΆ”κ°€"λŠ” pull request의 두 κ°€μ§€ μ£Όμš” 변경사항을 μ •ν™•ν•˜κ²Œ λ°˜μ˜ν•©λ‹ˆλ‹€. raw_summaryμ—μ„œ 확인할 수 μžˆλ“―μ΄ EventCard.tsx와 LocationCard.tsx에 μ’‹μ•„μš” κΈ°λŠ₯이 μΆ”κ°€λ˜μ—ˆκ³ , small μ‚¬μ΄μ¦ˆμ˜ Event Cardκ°€ μƒˆλ‘œ κ΅¬ν˜„λ˜μ—ˆμŠ΅λ‹ˆλ‹€. 제λͺ©μ΄ λͺ…ν™•ν•˜κ³  ꡬ체적이며, νŒ€ λ™λ£Œκ°€ 이λ ₯을 ν›‘μ–΄λ³Ό λ•Œ μ£Όμš” 변경사항을 μ‰½κ²Œ νŒŒμ•…ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
Description Check βœ… Passed PR μ„€λͺ…이 μš”μ²­λœ ν…œν”Œλ¦Ώμ˜ λͺ¨λ“  ν•„μˆ˜ μ„Ήμ…˜μ„ ν¬ν•¨ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€. πŸ”₯ μž‘μ—… λ‚΄μš©μ—μ„œ 두 κ°€μ§€ μ£Όμš” 변경사항을 λͺ…μ‹œν–ˆκ³ , πŸ€” μΆ”ν›„ μž‘μ—… 사항에 체크된 ν•­λͺ©λ“€μ„ κΈ°μž¬ν–ˆμœΌλ©°, πŸ”— μ΄μŠˆμ— 이슈 링크λ₯Ό μ œκ³΅ν–ˆκ³ , PR Point (To Reviewer)μ—μ„œ 변경사항에 λŒ€ν•œ μƒμ„Έν•œ μ„€λͺ…을 μž‘μ„±ν–ˆμŠ΅λ‹ˆλ‹€. λ§ˆμ§€λ§‰μœΌλ‘œ πŸ“Έ ν”Όκ·Έλ§ˆ μŠ€ν¬λ¦°μƒ· or κΈ°λŠ₯ GIF μ„Ήμ…˜μ— 이미지와 λ™μ˜μƒ 링크λ₯Ό μ²¨λΆ€ν•˜μ—¬ μ‹œκ°μ  μžλ£Œλ„ ν•¨κ»˜ μ œκ³΅ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€.
✨ Finishing touches
  • πŸ“ Generate docstrings
πŸ§ͺ Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch fix/#70/likebutton

πŸ“œ Recent review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

πŸ“₯ Commits

Reviewing files that changed from the base of the PR and between 82322fb and fa90738.

πŸ“’ Files selected for processing (1)
  • src/shared/components/container/EventCard.tsx (5 hunks)
🧰 Additional context used
🧬 Code graph analysis (1)
src/shared/components/container/EventCard.tsx (2)
src/shared/components/container/Card.tsx (1)
  • Card (32-48)
src/shared/lib/utils.ts (1)
  • cn (71-73)
πŸ”‡ Additional comments (2)
src/shared/components/container/EventCard.tsx (2)

34-37: LGTM: μ‚¬μ΄μ¦ˆλ³„ λ ˆμ΄μ•„μ›ƒ 둜직이 μ˜¬λ°”λ¦…λ‹ˆλ‹€.

size와 customHeight μ†μ„±μ˜ 쑰건뢀 할당이 각 μ‚¬μ΄μ¦ˆ variant에 맞게 μ •ν™•νžˆ κ΅¬ν˜„λ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€.


14-14: LGTM: νƒ€μž… ν™•μž₯ 및 μŠ€νƒ€μΌ 쑰정이 μ μ ˆν•©λ‹ˆλ‹€.

size νƒ€μž…μ— 'small' μ˜΅μ…˜ 좔가와 large μ‚¬μ΄μ¦ˆμ˜ μŠ€νƒ€μΌ 클래슀 쑰정이 μƒˆλ‘œμš΄ κΈ°λŠ₯ μš”κ΅¬μ‚¬ν•­μ— 맞게 μ˜¬λ°”λ₯΄κ²Œ κ΅¬ν˜„λ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€.

Also applies to: 149-149


Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❀️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

@github-actions github-actions bot added the comment ν•„μš”ν•œ 주석 μΆ”κ°€ 및 λ³€κ²½ label Oct 31, 2025
@github-actions
Copy link
Copy Markdown

🏷️ Labeler has automatically applied labels based on your PR title, branch name, or commit message.
Please verify that they are correct before merging.

Copy link
Copy Markdown
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 6

🧹 Nitpick comments (1)
src/shared/components/container/EventCard.tsx (1)

1-176: μ½”λ“œ 쀑볡 제거 μ œμ•ˆ

LocationCard와 EventCard λͺ¨λ‘ λ™μΌν•œ μ’‹μ•„μš” ν† κΈ€ λ‘œμ§μ„ κ°€μ§€κ³  μžˆμŠ΅λ‹ˆλ‹€. μ»€μŠ€ν…€ ν›…μœΌλ‘œ μΆ”μΆœν•˜λ©΄ μ½”λ“œ μž¬μ‚¬μš©μ„±μ΄ λ†’μ•„μ§€κ³ , ν–₯ν›„ API μ—°λ™μ΄λ‚˜ μƒνƒœ 관리 κ°œμ„  μ‹œ ν•œ 곳만 μˆ˜μ •ν•˜λ©΄ λ©λ‹ˆλ‹€.

μ˜ˆμ‹œ κ΅¬ν˜„:

μƒˆλ‘œμš΄ 파일 src/shared/hooks/useLikeState.ts 생성:

import { useState } from 'react';

export const useLikeState = (initialLiked = false) => {
  const [liked, setLiked] = useState(initialLiked);

  const handleLikeClick = () => {
    setLiked((prev) => !prev);
    // TODO: ν–₯ν›„ 여기에 API 호좜 μΆ”κ°€
  };

  return { liked, handleLikeClick };
};

EventCard와 LocationCardμ—μ„œ μ‚¬μš©:

-import { useState } from 'react';
+import { useLikeState } from '@/shared/hooks/useLikeState';

 const EventCard = ({ ... }: EventCardProps) => {
-  const [liked, setLiked] = useState(false);
-
-  const handleLikeClick = () => {
-    setLiked((prev) => !prev);
-  };
+  const { liked, handleLikeClick } = useLikeState();
πŸ“œ Review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

πŸ“₯ Commits

Reviewing files that changed from the base of the PR and between 1803a39 and 6f5ecbb.

πŸ“’ Files selected for processing (2)
  • src/shared/components/container/EventCard.tsx (5 hunks)
  • src/shared/components/container/LocationCard.tsx (3 hunks)
🧰 Additional context used
🧬 Code graph analysis (1)
src/shared/components/container/EventCard.tsx (2)
src/shared/components/container/Card.tsx (1)
  • Card (32-48)
src/shared/lib/utils.ts (1)
  • cn (71-73)
πŸ”‡ Additional comments (2)
src/shared/components/container/EventCard.tsx (2)

12-12: μƒˆλ‘œμš΄ 'small' μ‚¬μ΄μ¦ˆ μΆ”κ°€ 확인

size prop에 'small' μ˜΅μ…˜μ΄ μΆ”κ°€λ˜μ–΄ μ»΄ν¬λ„ŒνŠΈμ˜ ν™œμš©λ„κ°€ λ†’μ•„μ‘ŒμŠ΅λ‹ˆλ‹€.


32-35: 원본 리뷰 μ½”λ©˜νŠΈλŠ” CVA λ™μž‘μ— λŒ€ν•œ 잘λͺ»λœ 가정을 ν¬ν•¨ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€

원본 μ½”λ©˜νŠΈμ—μ„œλŠ” size={undefined}일 λ•Œ Cardκ°€ "κΈ°λ³Έ variant μŠ€νƒ€μΌλ§Œ 적용"λœλ‹€κ³  μ£Όμž₯ν–ˆμ§€λ§Œ, μ‹€μ œλ‘œλŠ” λ‹€μŒκ³Ό 같이 μž‘λ™ν•©λ‹ˆλ‹€:

  • size={undefined} β†’ CVA의 defaultVariants: { size: 'medium' } 적용
  • medium μ‚¬μ΄μ¦ˆ 클래슀 적용: p-[1.2rem] (νŒ¨λ”© 포함!)
  • customHeight='8rem' 인라인 μŠ€νƒ€μΌλ‘œ 높이 μ˜€λ²„λΌμ΄λ“œ
  • μ΅œμ’… κ²°κ³Ό: medium νŒ¨λ”© + 8rem 높이

ν˜„μž¬ μ½”λ“œλŠ” μ˜λ„λœ λŒ€λ‘œ μž‘λ™ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€. small μΉ΄λ“œλŠ” medium νŒ¨λ”©κ³Ό μ»€μŠ€ν…€ 높이λ₯Ό μ‘°ν•©ν•˜λŠ” λ°©μ‹μœΌλ‘œ μ„€κ³„λ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€.

Likely an incorrect or invalid review comment.

@@ -1,3 +1,4 @@
import { useState } from 'react';
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟠 Major

μ’‹μ•„μš” μƒνƒœ μœ μ§€ 문제 (LocationCard와 동일)

LocationCard와 λ™μΌν•œ μƒνƒœ 관리 λ¬Έμ œκ°€ μžˆμŠ΅λ‹ˆλ‹€. 둜컬 μƒνƒœλ‘œ 인해 μ»΄ν¬λ„ŒνŠΈ μ–Έλ§ˆμš΄νŠΈ μ‹œ μ’‹μ•„μš” 정보가 μ‚¬λΌμ§‘λ‹ˆλ‹€.

LocationCard의 리뷰 μ½”λ©˜νŠΈλ₯Ό μ°Έκ³ ν•˜μ—¬ liked propκ³Ό onLikeChange μ½œλ°±μ„ μΆ”κ°€ν•˜λŠ” λ°©μ‹μœΌλ‘œ κ°œμ„ ν•΄ μ£Όμ„Έμš”.

Also applies to: 24-28

Comment on lines +37 to +63
{size === 'small' ? (
<div className='flex w-[17rem] h-[8rem] p-[0.9rem_1rem] justify-center items-center flex-shrink-0 gap-[2rem]'>
{/* 행사 사진 */}
<div className='relative w-[7rem] h-full rounded-[0.8rem] flex-shrink-0 overflow-hidden'>
{imageSrc ? (
<Image
src={imageSrc}
alt={name}
fill
className='object-cover'
sizes='7rem'
loading='lazy'
/>
) : (
<div className='absolute inset-0 bg-gray-200 rounded-[0.8rem]' />
)}
</div>
{/* 행사 이름*/}
<span
className={cn(
'text-label-md truncate mb-[3rem]',
variant === 'mint' ? 'text-mint-800' : 'text-gray-600',
)}
>
{name}
</span>
</div>
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | πŸ”΄ Critical

🧩 Analysis chain

small μ‚¬μ΄μ¦ˆ κ΅¬ν˜„ 검토사항

small μ‚¬μ΄μ¦ˆ μΉ΄λ“œ κ΅¬ν˜„μ—μ„œ λͺ‡ κ°€μ§€ 확인이 ν•„μš”ν•©λ‹ˆλ‹€:

  1. μ’‹μ•„μš” λ²„νŠΌ λˆ„λ½: mediumκ³Ό large μ‚¬μ΄μ¦ˆμ—λŠ” ν•˜νŠΈ μ•„μ΄μ½˜μ΄ μžˆμ§€λ§Œ smallμ—λŠ” μ—†μŠ΅λ‹ˆλ‹€. 일관성을 μœ„ν•΄ small에도 μΆ”κ°€λ₯Ό κ³ λ €ν•΄ μ£Όμ„Έμš”.

  2. ν•˜λ‹¨ μ—¬λ°± 확인 (Line 57): mb-[3rem]이 μ˜λ„ν•œ 값인지 확인이 ν•„μš”ν•©λ‹ˆλ‹€. 3rem(48px)은 μƒλ‹Ήνžˆ 큰 μ—¬λ°±μœΌλ‘œ, ν…μŠ€νŠΈλ₯Ό 상단에 κ³ μ •ν•˜λ €λŠ” μ˜λ„λ‘œ λ³΄μ΄μ§€λ§Œ 이것이 λ””μžμΈ μ˜λ„μ™€ λ§žλŠ”μ§€ κ²€ν† ν•΄ μ£Όμ„Έμš”.

  3. λ°˜μ‘ν˜• λŒ€μ‘: w-[17rem] κ³ μ • λ„ˆλΉ„κ°€ λͺ¨λ°”일 ν™˜κ²½μ—μ„œλ„ μ μ ˆν•œμ§€ 확인해 μ£Όμ„Έμš”.


🏁 Script executed:

#!/bin/bash
# Examine full EventCard.tsx file to understand complete implementation
cat src/shared/components/container/EventCard.tsx

Length of output: 5461


🏁 Script executed:

#!/bin/bash
# Search for like/heart button patterns in the file
rg -n 'like|heart|favorite|icon.*heart' src/shared/components/container/EventCard.tsx -C 3

Length of output: 1065


🏁 Script executed:

#!/bin/bash
# Check if medium and large sizes have like buttons
rg -n "size === '(medium|large)'" src/shared/components/container/EventCard.tsx -A 30

Length of output: 2299


small μ‚¬μ΄μ¦ˆ μΉ΄λ“œμ—μ„œ ν™•μΈλœ 섀계 문제점

검증 κ²°κ³Ό, λ‹€μŒ μ„Έ κ°€μ§€ μ΄μŠˆκ°€ ν™•μΈλ˜μ—ˆμŠ΅λ‹ˆλ‹€:

  1. μ’‹μ•„μš” λ²„νŠΌ λˆ„λ½: medium(라인 93-102)κ³Ό large(라인 145-157) μ‚¬μ΄μ¦ˆμ—λŠ” HeartStraight μ•„μ΄μ½˜μ΄ μžˆμœΌλ‚˜, small μ‚¬μ΄μ¦ˆμ—λŠ” μ—†μŠ΅λ‹ˆλ‹€. 일관성을 μœ„ν•΄ μΆ”κ°€ ν•„μš” μ—¬λΆ€λ₯Ό κ²€ν† ν•˜μ„Έμš”.

  2. λ§ˆμ§„ μ„€μ • λͺ¨μˆœ (라인 57): μ»¨ν…Œμ΄λ„ˆκ°€ justify-center items-center둜 수직/μˆ˜ν‰ 쀑앙 μ •λ ¬λ˜μ–΄ μžˆλŠ”λ°, ν…μŠ€νŠΈμ— mb-[3rem](48px) λ§ˆμ§„μ΄ μ μš©λ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€. ν…μŠ€νŠΈλ₯Ό 상단에 μœ„μΉ˜μ‹œν‚€λ €λ©΄ items-startλ₯Ό μ‚¬μš©ν•˜κ³  λ§ˆμ§„μ„ μ œκ±°ν•˜κ±°λ‚˜, 쀑앙 μ •λ ¬ μ˜λ„λΌλ©΄ λ§ˆμ§„μ„ μ œκ±°ν•˜μ„Έμš”.

  3. κ³ μ • λ„ˆλΉ„ λΉ„λ°˜μ‘ν˜• (라인 38): w-[17rem]으둜 λ„ˆλΉ„κ°€ κ³ μ •(272px)λ˜μ–΄ μžˆμ–΄ λͺ¨λ°”일 λ“± μž‘μ€ ν™”λ©΄μ—μ„œ λ°˜μ‘ν˜• λŒ€μ‘μ΄ μ•ˆ λ©λ‹ˆλ‹€.

πŸ€– Prompt for AI Agents
In src/shared/components/container/EventCard.tsx around lines 37 to 63, the
small-size card has three issues to fix: add the missing HeartStraight like
medium/large so interaction parity is preserved (place it in the same relative
position and styles used in other sizes), fix the vertical alignment/margin
conflict by changing the container alignment from justify-center items-center to
justify-center items-start (or remove the text's mb-[3rem] so centering remains)
so the name sits correctly, and replace the fixed w-[17rem] with a responsive
width (e.g. use w-full with a max-w-[17rem] or responsive tailwind classes like
sm:w-[17rem] to allow shrinking on small screens) so the card is responsive.
Ensure classes and accessibility (alt text and aria if needed) match
medium/large variants.

Comment on lines +96 to 102
color={
liked ? 'red-400' : variant === 'mint' ? 'mint-400' : 'gray-300'
}
fillColor={liked ? 'red-300' : undefined}
onClick={handleLikeClick}
className='cursor-pointer'
/>
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟠 Major

μ ‘κ·Όμ„± κ°œμ„  ν•„μš” (LocationCard와 동일)

LocationCard의 ν•˜νŠΈ μ•„μ΄μ½˜κ³Ό λ™μΌν•œ μ ‘κ·Όμ„± λ¬Έμ œκ°€ μžˆμŠ΅λ‹ˆλ‹€. ν‚€λ³΄λ“œ μ ‘κ·Όμ„±κ³Ό 슀크린 리더 지원이 μ—†μŠ΅λ‹ˆλ‹€.

LocationCard의 리뷰 μ½”λ©˜νŠΈλ₯Ό μ°Έκ³ ν•˜μ—¬ <button> μš”μ†Œλ‘œ 감싸고 ARIA 속성을 μΆ”κ°€ν•΄ μ£Όμ„Έμš”.

πŸ€– Prompt for AI Agents
In src/shared/components/container/EventCard.tsx around lines 96 to 102, the
heart icon is not keyboard- or screen-reader-accessible; wrap the icon in a
semantic <button type="button">, move the onClick and className to that button
(remove cursor-pointer from the raw icon), and add ARIA attributes:
aria-pressed={liked} and a dynamic aria-label such as liked ? "Unlike event" :
"Like event"; ensure the button includes visible focus styles (or a
focus-visible class) and preserve existing color/fill props on the icon only.

Comment on lines +147 to 157
color={
liked
? 'red-400'
: variant === 'mint'
? 'mint-400'
: 'gray-300'
}
fillColor={liked ? 'red-300' : undefined}
onClick={handleLikeClick}
className='cursor-pointer'
/>
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟠 Major

μ ‘κ·Όμ„± κ°œμ„  ν•„μš” (medium μ‚¬μ΄μ¦ˆμ™€ 동일)

Line 96-102의 medium μ‚¬μ΄μ¦ˆμ™€ λ™μΌν•œ μ ‘κ·Όμ„± λ¬Έμ œμž…λ‹ˆλ‹€. λ™μΌν•˜κ²Œ κ°œμ„ ν•΄ μ£Όμ„Έμš”.

πŸ€– Prompt for AI Agents
In src/shared/components/container/EventCard.tsx around lines 147 to 157, the
like icon block needs the same accessibility improvements applied earlier at
lines 96–102: make the interactive icon operable by keyboard and screen-readers
by adding role="button", tabIndex={0}, aria-pressed={liked}, and a descriptive
aria-label (e.g., liked ? "Unlike event" : "Like event"); attach an onKeyDown
handler that triggers handleLikeClick on Enter and Space; preserve visual
affordances (cursor-pointer and focus-visible/focus styles) so focus is visible.
Ensure these attributes and handler replace the current plain clickable element
so the like control matches the medium-size accessibility fixes.

@@ -1,3 +1,4 @@
import { useState } from 'react';
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟠 Major

μ’‹μ•„μš” μƒνƒœκ°€ μœ μ§€λ˜μ§€ μ•ŠλŠ” 문제

둜컬 μƒνƒœλ‘œ μ’‹μ•„μš”λ₯Ό κ΄€λ¦¬ν•˜λ©΄ μ»΄ν¬λ„ŒνŠΈκ°€ μ–Έλ§ˆμš΄νŠΈλ  λ•Œ μƒνƒœκ°€ μ΄ˆκΈ°ν™”λ©λ‹ˆλ‹€. μ‚¬μš©μžκ°€ νŽ˜μ΄μ§€λ₯Ό μ΄λ™ν–ˆλ‹€κ°€ λŒμ•„μ˜€λ©΄ μ’‹μ•„μš” 정보가 μ‚¬λΌμ§‘λ‹ˆλ‹€.

λ‹€μŒ 쀑 ν•˜λ‚˜μ˜ λ°©μ‹μœΌλ‘œ κ°œμ„ μ΄ ν•„μš”ν•©λ‹ˆλ‹€:

  • μƒμœ„ μ»΄ν¬λ„ŒνŠΈλ‘œ μƒνƒœ λ¦¬ν”„νŒ… (liked propκ³Ό onLikeChange 콜백 μΆ”κ°€)
  • μ „μ—­ μƒνƒœ 관리 (Context API λ˜λŠ” μƒνƒœ 관리 라이브러리)
  • λ°±μ—”λ“œ API 연동 및 초기 λ‘œλ“œ μ‹œ μ’‹μ•„μš” μƒνƒœ 쑰회

λ‹€μŒκ³Ό 같이 μˆ˜μ •ν•˜λŠ” 것을 ꢌμž₯ν•©λ‹ˆλ‹€:

 interface LocationCardProps {
   name: string;
   address: string;
   description: string;
   variant?: 'gray' | 'mint';
   size?: 'medium' | 'large';
   imageSrc?: string;
+  liked?: boolean;
+  onLikeChange?: (liked: boolean) => void;
 }

 const LocationCard = ({
   name,
   address,
   description,
   variant = 'gray',
   size = 'medium',
   imageSrc = '',
+  liked = false,
+  onLikeChange,
 }: LocationCardProps) => {
-  const [liked, setLiked] = useState(false);
-
   const handleLikeClick = () => {
-    setLiked((prev) => !prev);
+    onLikeChange?.(!liked);
   };

Also applies to: 24-28

πŸ€– Prompt for AI Agents
In src/shared/components/container/LocationCard.tsx around lines 1 and 24-28,
the component currently uses local useState for the "liked" flag which resets
when the component unmounts; lift the state to the parent by removing the
internal useState and instead accept a liked:boolean prop and an
onLikeChange:(newLiked:boolean)=>void callback, use the prop value for rendering
and call onLikeChange when the user toggles like; also keep a safe fallback to
false if liked is undefined to avoid breaking existing callers, and update all
internal references to state to use the prop/callback so the parent (or global
store/API) persists the like across navigations.

Comment on lines +93 to 103
color={
liked
? 'red-400'
: variant === 'mint'
? 'mint-400'
: 'gray-300'
}
fillColor={liked ? 'red-300' : undefined}
onClick={handleLikeClick}
className='cursor-pointer'
/>
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟠 Major

μ ‘κ·Όμ„± κ°œμ„  ν•„μš”

클릭 κ°€λŠ₯ν•œ μ•„μ΄μ½˜μ— ν‚€λ³΄λ“œ μ ‘κ·Όμ„±κ³Ό 슀크린 리더 지원이 μ—†μŠ΅λ‹ˆλ‹€.

λ‹€μŒ κ°œμ„ μ‚¬ν•­μ΄ ν•„μš”ν•©λ‹ˆλ‹€:

  • ν‚€λ³΄λ“œ λ‚΄λΉ„κ²Œμ΄μ…˜ 지원 (Enter/Space)
  • 슀크린 리더λ₯Ό μœ„ν•œ ARIA λ ˆμ΄λΈ”
  • ν† κΈ€ μƒνƒœ ν‘œμ‹œ

λ‹€μŒκ³Ό 같이 κ°œμ„ ν•˜λŠ” 것을 ꢌμž₯ν•©λ‹ˆλ‹€:

-            <div className='flex-shrink-0 ml-auto'>
+            <button
+              onClick={handleLikeClick}
+              aria-label={liked ? 'μ’‹μ•„μš” μ·¨μ†Œ' : 'μ’‹μ•„μš”'}
+              aria-pressed={liked}
+              className='flex-shrink-0 ml-auto bg-transparent border-none p-0'
+            >
               <Icon
                 name='HeartStraight'
                 size={20}
                 color={
                   liked
                     ? 'red-400'
                     : variant === 'mint'
                     ? 'mint-400'
                     : 'gray-300'
                 }
                 fillColor={liked ? 'red-300' : undefined}
-                onClick={handleLikeClick}
-                className='cursor-pointer'
               />
+            </button>
-            </div>

Committable suggestion skipped: line range outside the PR's diff.

πŸ€– Prompt for AI Agents
In src/shared/components/container/LocationCard.tsx around lines 93 to 103, the
clickable icon lacks keyboard and screen-reader accessibility; make it an
accessible toggle by adding role="button" and tabIndex={0}, implement an
onKeyDown handler that triggers handleLikeClick when Enter or Space is pressed,
and add ARIA attributes like aria-pressed={liked} and a dynamic aria-label
(e.g., liked ? "Unlike location" : "Like location") so screen readers and
keyboard users can perceive and operate the control; keep the existing onClick
and className but ensure the key handler prevents default for Space to avoid
page scroll.

@KongMezu KongMezu changed the title πŸ›Fix & ✨Feat : μ»¨ν…Œμ΄λ„ˆ μ’‹μ•„μš” λ²„νŠΌ ν™œμ„±ν™” & small Event Card μΆ”κ°€ πŸ›Fix &✨Feat: μ»¨ν…Œμ΄λ„ˆ μ’‹μ•„μš” λ²„νŠΌ ν™œμ„±ν™” & small Event Card μΆ”κ°€ Oct 31, 2025
Copy link
Copy Markdown
Contributor

@jjangminii jjangminii left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

μ’‹μ•„μš” ν™œμ„±ν™” λ“œλ””μ–΄ λ˜λŠ”κ΅°μš”-!! 근데.. μ’‹μ•„μš”κ°€ μ—†λŠ” μ»΄ν¬λ„ŒνŠΈκ°€ μžˆλŠ”λ° ν˜Ήμ‹œ μ’‹μ•„μš”κ°€ μ—†λŠ” μ»΄ν¬λ„ŒνŠΈλŠ” μ–΄λ–»κ²Œ μ‚¬μš©ν•˜λ‚˜μš”?

Copy link
Copy Markdown
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

♻️ Duplicate comments (4)
src/shared/components/container/EventCard.tsx (4)

1-1: μ’‹μ•„μš” μƒνƒœ 관리 문제 (이전 리뷰와 동일)

이전 λ¦¬λ·°μ—μ„œ 이미 μ§€μ λœ κ²ƒμ²˜λŸΌ, 둜컬 μƒνƒœλ‘œ 인해 μ»΄ν¬λ„ŒνŠΈ μ–Έλ§ˆμš΄νŠΈ μ‹œ μ’‹μ•„μš” 정보가 μ‚¬λΌμ§‘λ‹ˆλ‹€. liked propκ³Ό onLikeChange μ½œλ°±μ„ μΆ”κ°€ν•˜λŠ” λ°©μ‹μœΌλ‘œ κ°œμ„ μ΄ ν•„μš”ν•©λ‹ˆλ‹€.

Also applies to: 26-30


39-65: Small μ‚¬μ΄μ¦ˆ 섀계 문제 (이전 리뷰와 동일)

이전 λ¦¬λ·°μ—μ„œ 이미 μ§€μ λœ μ„Έ κ°€μ§€ λ¬Έμ œκ°€ κ·ΈλŒ€λ‘œ λ‚¨μ•„μžˆμŠ΅λ‹ˆλ‹€:

  1. μ’‹μ•„μš” λ²„νŠΌ λˆ„λ½ (medium, largeμ—λŠ” 있음)
  2. λ ˆμ΄μ•„μ›ƒ 좩돌 (justify-center items-center와 mb-[3rem] λͺ¨μˆœ)
  3. κ³ μ • λ„ˆλΉ„ w-[17rem]둜 μΈν•œ λΉ„λ°˜μ‘ν˜• 문제

이전 리뷰 μ½”λ©˜νŠΈλ₯Ό μ°Έκ³ ν•˜μ—¬ μˆ˜μ •ν•΄ μ£Όμ„Έμš”.


95-104: μ ‘κ·Όμ„± κ°œμ„  ν•„μš” (이전 리뷰와 동일)

이전 λ¦¬λ·°μ—μ„œ μ§€μ λœ μ ‘κ·Όμ„± λ¬Έμ œκ°€ κ·ΈλŒ€λ‘œ λ‚¨μ•„μžˆμŠ΅λ‹ˆλ‹€. ν‚€λ³΄λ“œ μ ‘κ·Όμ„±κ³Ό 슀크린 리더 지원을 μœ„ν•΄ <button> μš”μ†Œλ‘œ 감싸고 ARIA 속성을 μΆ”κ°€ν•΄μ•Ό ν•©λ‹ˆλ‹€.

이전 리뷰 μ½”λ©˜νŠΈμ˜ 상세 κ°€μ΄λ“œλ₯Ό μ°Έκ³ ν•˜μ—¬ μˆ˜μ •ν•΄ μ£Όμ„Έμš”.


146-159: μ ‘κ·Όμ„± κ°œμ„  ν•„μš” (이전 리뷰와 동일)

Medium μ‚¬μ΄μ¦ˆμ™€ λ™μΌν•œ μ ‘κ·Όμ„± λ¬Έμ œμž…λ‹ˆλ‹€. 이전 리뷰 μ½”λ©˜νŠΈλ₯Ό μ°Έκ³ ν•˜μ—¬ λ™μΌν•˜κ²Œ κ°œμ„ ν•΄ μ£Όμ„Έμš”.

πŸ“œ Review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

πŸ“₯ Commits

Reviewing files that changed from the base of the PR and between 6f5ecbb and 82322fb.

πŸ“’ Files selected for processing (1)
  • src/shared/components/container/EventCard.tsx (6 hunks)
🧰 Additional context used
🧬 Code graph analysis (1)
src/shared/components/container/EventCard.tsx (2)
src/shared/components/container/Card.tsx (1)
  • Card (32-48)
src/shared/lib/utils.ts (1)
  • cn (71-73)
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (1)
  • GitHub Check: build-and-deploy

Comment on lines +11 to +12
startDate?: string;
endDate?: string;
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟑 Minor

μ‚¬μš©λ˜μ§€ μ•ŠλŠ” props

startDate와 endDate propsκ°€ μΈν„°νŽ˜μ΄μŠ€μ— μΆ”κ°€λ˜μ—ˆμ§€λ§Œ μ»΄ν¬λ„ŒνŠΈ μ–΄λ””μ—μ„œλ„ λ Œλ”λ§λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. μ΄λŠ” ν–₯ν›„ κ΅¬ν˜„μ„ μœ„ν•œ 것인지, μ•„λ‹ˆλ©΄ κ΅¬ν˜„μ΄ λˆ„λ½λœ 것인지 확인이 ν•„μš”ν•©λ‹ˆλ‹€.

κ΅¬ν˜„μ„ μ™„λ£Œν•˜κ±°λ‚˜ μ‚¬μš©ν•˜μ§€ μ•Šμ„ μ˜ˆμ •μ΄λΌλ©΄ propsλ₯Ό μ œκ±°ν•΄ μ£Όμ„Έμš”:

  name: string;
  address: string;
  description: string;
-  startDate?: string;
-  endDate?: string;
  variant?: 'gray' | 'mint';
πŸ“ Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
startDate?: string;
endDate?: string;
name: string;
address: string;
description: string;
variant?: 'gray' | 'mint';
liked?: boolean;
onLikeChange?: (liked: boolean) => void;
πŸ€– Prompt for AI Agents
In src/shared/components/container/EventCard.tsx around lines 11-12, the
interface declares optional startDate and endDate props but they are not used in
the component; either remove these unused props from the interface (and any
upstream prop passing) or implement rendering for them: add conditional
rendering inside the card to display formatted start and/or end dates (handle
undefined safely), use a consistent date formatter/locale utility, and update
PropTypes/TypeScript types and any tests or usages accordingly so the interface
and component stay in sync.

@KongMezu
Copy link
Copy Markdown
Contributor Author

KongMezu commented Nov 1, 2025

μ’‹μ•„μš” ν™œμ„±ν™” λ“œλ””μ–΄ λ˜λŠ”κ΅°μš”-!! 근데.. μ’‹μ•„μš”κ°€ μ—†λŠ” μ»΄ν¬λ„ŒνŠΈκ°€ μžˆλŠ”λ° ν˜Ήμ‹œ μ’‹μ•„μš”κ°€ μ—†λŠ” μ»΄ν¬λ„ŒνŠΈλŠ” μ–΄λ–»κ²Œ μ‚¬μš©ν•˜λ‚˜μš”?

μ’‹μ•„μš”κ°€ μ—†λŠ” μ»΄ν¬λ„ŒνŠΈλŠ” μ»¨ν…Œμ΄λ„ˆ 내뢀에 μ•„μ΄μ½˜(HeartStraight) λ₯Ό λ„£μ§€ μ•Šμ•„μ„œ 이 뢀뢄은 κ±±μ • μ•ˆν•˜μ…”λ„ 될거 κ°™μŠ΅λ‹ˆλ‹€..!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

comment ν•„μš”ν•œ 주석 μΆ”κ°€ 및 λ³€κ²½

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[fix] μ»¨ν…Œμ΄λ„ˆ μ’‹μ•„μš” ν™œμ„±ν™”

2 participants