diff --git a/src/pages/myPage/CheckedIdolCard.jsx b/src/pages/myPage/CheckedIdolCard.jsx index a951cbf..01b8c3d 100644 --- a/src/pages/myPage/CheckedIdolCard.jsx +++ b/src/pages/myPage/CheckedIdolCard.jsx @@ -6,6 +6,7 @@ const CheckedIdolCard = ({ idol, isSelectable = true, isSelected = false, + isDisabled = false, sizeClass = 'w-[98px] h-[98px] tablet:w-[128px] tablet:h-[128px]', onClick, }) => { @@ -15,12 +16,12 @@ const CheckedIdolCard = ({
onClick(idol.id) : undefined} + ${isDisabled ? 'opacity-50 cursor-not-allowed' : isSelectable ? 'cursor-pointer' : 'cursor-default'} transition-all`} // 비활성화된 경우 투명도 50% + onClick={!isDisabled && isSelectable ? () => onClick(idol.id) : undefined} // 비활성화된 경우 클릭 방지 > {children}
- +
+ {/* 비활성화된 경우 클릭 차단 & 마우스 금지 커서 적용 */} + {isDisabled && ( +
+ )} + {isSelected && isSelectable && ( <>
@@ -40,7 +49,7 @@ const CheckedIdolCard = ({ )}
- +

{idol.name}

{idol.group || '그룹 없음'}

diff --git a/src/pages/myPage/MyPage.jsx b/src/pages/myPage/MyPage.jsx index 3ffd260..501fb2b 100644 --- a/src/pages/myPage/MyPage.jsx +++ b/src/pages/myPage/MyPage.jsx @@ -21,6 +21,7 @@ const MyPage = () => { const width = window.innerWidth; if (width >= 1200) setItemsPerPage(16); else if (width >= 768) setItemsPerPage(8); + else if (width >= 375) setItemsPerPage(6); else setItemsPerPage(6); }; @@ -45,6 +46,7 @@ const MyPage = () => { }, []); const handleToggle = (idolId) => { + if (favoriteIdols.includes(idolId)) return; setSelectedIdols((prev) => prev.includes(idolId) ? prev.filter((id) => id !== idolId) @@ -54,13 +56,11 @@ const MyPage = () => { const handleAddToFavorites = () => { if (selectedIdols.length === 0) return; - setFavoriteIdols((prev) => { const updatedFavorites = [...new Set([...prev, ...selectedIdols])]; localStorage.setItem(storageKey, updatedFavorites.join(',')); return updatedFavorites; }); - setSelectedIdols([]); }; @@ -87,9 +87,9 @@ const MyPage = () => {
{/* 관심 있는 아이돌 섹션 */} -
-

- 내가 관심있는 아이돌 +
+

+ 내가 관심 있는 아이돌

@@ -99,21 +99,19 @@ const MyPage = () => { if (!idol) return null; return ( -
+
@@ -121,61 +119,76 @@ const MyPage = () => { })}
+ +
-

+

관심 있는 아이돌을 추가해보세요.

- - {/* 이전 버튼 */} -
- - - {/* 아이돌 리스트 */} -
- {idols - .slice( - currentPage * itemsPerPage, - (currentPage + 1) * itemsPerPage - ) - .map((idol) => ( +
+ +
+ + + + {/* 아이돌 리스트 */} +
+ {idols.slice(currentPage * itemsPerPage, (currentPage + 1) * itemsPerPage).map((idol) => { + const isDisabled = favoriteIdols.includes(idol.id); + + return ( +
handleToggle(idol.id)} + isDisabled={isDisabled} + onClick={(e) => { + if (isDisabled) { + e.preventDefault(); + return; + } + handleToggle(idol.id); + }} /> - ))} -
- - {/* 다음 버튼 (반응형 위치 조정) */} - +
+ ); + })}
+ + +
- + 추가하기