diff --git a/components/HeaderMenu.tsx b/components/HeaderMenu.tsx index 5a08da6..26863d1 100644 --- a/components/HeaderMenu.tsx +++ b/components/HeaderMenu.tsx @@ -5,13 +5,19 @@ import Link from "next/link"; import SubmitButton from "./SubMitButton"; import { useRouter } from "next/router"; import useAuthStore from "@/store/useAuthStore"; -import { useState } from "react"; +import { useRef, useState } from "react"; import Dropdown from "./Dropdown"; +import useOutsideClick from "@/hooks/useOutsideClick"; const HeaderMenu = () => { const { user, logout } = useAuthStore(); const [isOpen, setIsOpen] = useState(false); const router = useRouter(); + const dropdownRef = useRef(null); + + useOutsideClick(dropdownRef, () => { + setIsOpen(false); + }); const dropdownItems = [ { @@ -57,6 +63,7 @@ const HeaderMenu = () => {
setIsOpen(!isOpen)} + ref={dropdownRef} > 프로필 {user?.name} diff --git a/components/Link/LinkCard.tsx b/components/Link/LinkCard.tsx index e4468c2..91c7dc2 100644 --- a/components/Link/LinkCard.tsx +++ b/components/Link/LinkCard.tsx @@ -1,12 +1,12 @@ -import { useEffect, useState } from "react"; +import { useEffect, useRef, useState } from "react"; import { useRouter } from "next/router"; -import { putLinkFavorite } from "@/lib/api/link"; import { useLinkCardStore } from "@/store/useLinkCardStore"; import { ensureAbsoluteUrl } from "@/lib/utils"; import timeAgo from "@/util/timeAgo"; import Image from "next/image"; import Dropdown from "../Dropdown"; import useModalStore from "@/store/useModalStore"; +import useOutsideClick from "@/hooks/useOutsideClick"; interface LinkCardProps { info: { @@ -24,6 +24,7 @@ const LinkCard = ({ info }: LinkCardProps) => { const [isSubscribed, setIsSubscribed] = useState(info.favorite || false); const [isDropdownOpen, setIsDropdownOpen] = useState(false); const { isOpen, openModal } = useModalStore(); + const { updateFavorite } = useLinkCardStore(); const formattedDate = info.createdAt?.slice(0, 10).replace(/-/g, "."); @@ -31,12 +32,17 @@ const LinkCard = ({ info }: LinkCardProps) => { const router = useRouter(); const isFavoritePage = router.pathname === "/favorite"; + const dropdownRef = useRef(null); // 모달이 열릴 때 드롭다운 닫기 useEffect(() => { if (isOpen) setIsDropdownOpen(false); }, [isOpen]); + useOutsideClick(dropdownRef, () => { + setIsDropdownOpen(false); + }); + // 즐겨찾기 버튼 클릭 시 호출되는 함수 const handleFavoriteToggle = async () => { setIsSubscribed((prev) => !prev); @@ -103,7 +109,7 @@ const LinkCard = ({ info }: LinkCardProps) => { {/* isFavoritePage일 때만 케밥 버튼 렌더링 */} {!isFavoritePage && ( -
+