-
Notifications
You must be signed in to change notification settings - Fork 1
Fix/128 QA(1차, 2차) 피드백 및 이슈 해결 #137
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Changes from 15 commits
bf647ae
4025fd5
f2e5d7d
7b0223f
094a47c
214a21d
7807799
892b6e4
6ac0463
46594eb
3a20ffb
806f4b2
d55662c
9bfe31d
3193b65
48bfc8d
a0b5114
a0ccff2
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change | ||||||||||||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
|
@@ -21,6 +21,10 @@ export default function ActivityCard({ | |||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||
| const { id, title, price, bannerImageUrl, rating, reviewCount } = activity; | ||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||
| const handleCardClick = () => { | ||||||||||||||||||||||||||||||||||||||||||
| router.push(`/activities/${id}`); | ||||||||||||||||||||||||||||||||||||||||||
| }; | ||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||
| const handleEdit = () => { | ||||||||||||||||||||||||||||||||||||||||||
| router.push(`/myactivity/${id}`); | ||||||||||||||||||||||||||||||||||||||||||
| }; | ||||||||||||||||||||||||||||||||||||||||||
|
|
@@ -31,7 +35,10 @@ export default function ActivityCard({ | |||||||||||||||||||||||||||||||||||||||||
| }; | ||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||
| return ( | ||||||||||||||||||||||||||||||||||||||||||
| <div className='flex h-128 w-full max-w-792 flex-row rounded-3xl border border-gray-300 bg-white sm:h-156 lg:h-204'> | ||||||||||||||||||||||||||||||||||||||||||
| <div | ||||||||||||||||||||||||||||||||||||||||||
| className='flex h-128 w-full max-w-792 cursor-pointer flex-row rounded-3xl border border-gray-300 bg-white transition-shadow hover:shadow-md sm:h-156 lg:h-204' | ||||||||||||||||||||||||||||||||||||||||||
| onClick={handleCardClick} | ||||||||||||||||||||||||||||||||||||||||||
| > | ||||||||||||||||||||||||||||||||||||||||||
| {/* 이미지 영역 */} | ||||||||||||||||||||||||||||||||||||||||||
| <div className='relative h-full w-128 flex-shrink-0 overflow-hidden rounded-l-3xl sm:w-156 lg:w-204'> | ||||||||||||||||||||||||||||||||||||||||||
| <Image src={bannerImageUrl} alt={title} fill className='object-cover' /> | ||||||||||||||||||||||||||||||||||||||||||
|
|
@@ -68,7 +75,10 @@ export default function ActivityCard({ | |||||||||||||||||||||||||||||||||||||||||
| {/* 더보기 옵션 */} | ||||||||||||||||||||||||||||||||||||||||||
| <div className='relative'> | ||||||||||||||||||||||||||||||||||||||||||
| <button | ||||||||||||||||||||||||||||||||||||||||||
| onClick={() => setIsMenuOpen(!isMenuOpen)} | ||||||||||||||||||||||||||||||||||||||||||
| onClick={(e) => { | ||||||||||||||||||||||||||||||||||||||||||
| e.stopPropagation(); | ||||||||||||||||||||||||||||||||||||||||||
| setIsMenuOpen(!isMenuOpen); | ||||||||||||||||||||||||||||||||||||||||||
| }} | ||||||||||||||||||||||||||||||||||||||||||
| className='flex h-40 w-40 items-center justify-center rounded-full hover:bg-gray-100' | ||||||||||||||||||||||||||||||||||||||||||
| > | ||||||||||||||||||||||||||||||||||||||||||
| <MoreOptionsIcon size={40} /> | ||||||||||||||||||||||||||||||||||||||||||
|
|
@@ -78,18 +88,27 @@ export default function ActivityCard({ | |||||||||||||||||||||||||||||||||||||||||
| <> | ||||||||||||||||||||||||||||||||||||||||||
| <div | ||||||||||||||||||||||||||||||||||||||||||
| className='fixed inset-0 z-40' | ||||||||||||||||||||||||||||||||||||||||||
| onClick={() => setIsMenuOpen(false)} | ||||||||||||||||||||||||||||||||||||||||||
| onClick={(e) => { | ||||||||||||||||||||||||||||||||||||||||||
| e.stopPropagation(); | ||||||||||||||||||||||||||||||||||||||||||
| setIsMenuOpen(false); | ||||||||||||||||||||||||||||||||||||||||||
| }} | ||||||||||||||||||||||||||||||||||||||||||
| /> | ||||||||||||||||||||||||||||||||||||||||||
| {/* 드롭다운 메뉴 */} | ||||||||||||||||||||||||||||||||||||||||||
| <div className='absolute top-full right-0 z-50 w-120 rounded-md border border-gray-300 bg-white shadow-lg sm:w-160'> | ||||||||||||||||||||||||||||||||||||||||||
| <button | ||||||||||||||||||||||||||||||||||||||||||
| onClick={handleEdit} | ||||||||||||||||||||||||||||||||||||||||||
| onClick={(e) => { | ||||||||||||||||||||||||||||||||||||||||||
| e.stopPropagation(); | ||||||||||||||||||||||||||||||||||||||||||
| handleEdit(); | ||||||||||||||||||||||||||||||||||||||||||
| }} | ||||||||||||||||||||||||||||||||||||||||||
| className='flex h-50 w-full items-center justify-center border-b border-gray-300 px-4 py-3 text-center text-base font-medium text-gray-900 hover:bg-gray-50 sm:h-62 sm:px-46 sm:py-18 sm:text-lg' | ||||||||||||||||||||||||||||||||||||||||||
| > | ||||||||||||||||||||||||||||||||||||||||||
| 수정하기 | ||||||||||||||||||||||||||||||||||||||||||
| </button> | ||||||||||||||||||||||||||||||||||||||||||
|
Comment on lines
98
to
106
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 버튼 타입 명시가 필요합니다 정적 분석에서 지적한 대로 버튼 요소에 명시적인 <button
+ type="button"
onClick={(e) => {
e.stopPropagation();
handleEdit();
}}동일하게 삭제 버튼에도 적용하세요: <button
+ type="button"
onClick={(e) => {
e.stopPropagation();
handleDelete();
}}📝 Committable suggestion
Suggested change
🤖 Prompt for AI Agents |
||||||||||||||||||||||||||||||||||||||||||
| <button | ||||||||||||||||||||||||||||||||||||||||||
| onClick={handleDelete} | ||||||||||||||||||||||||||||||||||||||||||
| onClick={(e) => { | ||||||||||||||||||||||||||||||||||||||||||
| e.stopPropagation(); | ||||||||||||||||||||||||||||||||||||||||||
| handleDelete(); | ||||||||||||||||||||||||||||||||||||||||||
| }} | ||||||||||||||||||||||||||||||||||||||||||
| className='flex h-50 w-full items-center justify-center px-4 py-3 text-center text-base font-medium text-gray-900 hover:bg-gray-50 sm:h-62 sm:px-46 sm:py-18 sm:text-lg' | ||||||||||||||||||||||||||||||||||||||||||
| > | ||||||||||||||||||||||||||||||||||||||||||
| 삭제하기 | ||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
접근성 개선이 필요합니다
정적 분석 도구에서 지적한 대로 접근성 문제가 있습니다. 키보드 네비게이션과 적절한 역할(role) 속성이 필요합니다.
다음과 같이 수정하여 접근성을 개선하세요:
📝 Committable suggestion
🧰 Tools
🪛 Biome (2.1.2)
[error] 38-41: Static Elements should not be interactive.
To add interactivity such as a mouse or key event listener to a static element, give the element an appropriate role value.
(lint/a11y/noStaticElementInteractions)
[error] 38-41: Enforce to have the onClick mouse event with the onKeyUp, the onKeyDown, or the onKeyPress keyboard event.
Actions triggered using mouse events should have corresponding keyboard events to account for keyboard-only navigation.
(lint/a11y/useKeyWithClickEvents)
🤖 Prompt for AI Agents