1- import { useEffect , useState } from "react" ;
1+ import { useEffect , useRef , useState } from "react" ;
22import { useRouter } from "next/router" ;
3- import { putLinkFavorite } from "@/lib/api/link" ;
43import { useLinkCardStore } from "@/store/useLinkCardStore" ;
54import { ensureAbsoluteUrl } from "@/lib/utils" ;
6- import timeAgo from "@/util/timAgo " ;
5+ import timeAgo from "@/util/timeAgo " ;
76import Image from "next/image" ;
87import Dropdown from "../Dropdown" ;
98import useModalStore from "@/store/useModalStore" ;
9+ import useOutsideClick from "@/hooks/useOutsideClick" ;
1010
1111interface LinkCardProps {
1212 info : {
@@ -24,24 +24,29 @@ const LinkCard = ({ info }: LinkCardProps) => {
2424 const [ isSubscribed , setIsSubscribed ] = useState ( info . favorite || false ) ;
2525 const [ isDropdownOpen , setIsDropdownOpen ] = useState ( false ) ;
2626 const { isOpen, openModal } = useModalStore ( ) ;
27+
2728 const { updateFavorite } = useLinkCardStore ( ) ;
2829
2930 const formattedDate = info . createdAt ?. slice ( 0 , 10 ) . replace ( / - / g, "." ) ;
3031 const createdTime = timeAgo ( info . createdAt ) ;
3132
3233 const router = useRouter ( ) ;
3334 const isFavoritePage = router . pathname === "/favorite" ;
35+ const dropdownRef = useRef < HTMLDivElement | null > ( null ) ;
3436
3537 // 모달이 열릴 때 드롭다운 닫기
3638 useEffect ( ( ) => {
3739 if ( isOpen ) setIsDropdownOpen ( false ) ;
3840 } , [ isOpen ] ) ;
3941
42+ useOutsideClick ( dropdownRef , ( ) => {
43+ setIsDropdownOpen ( false ) ;
44+ } ) ;
45+
4046 // 즐겨찾기 버튼 클릭 시 호출되는 함수
4147 const handleFavoriteToggle = async ( ) => {
4248 setIsSubscribed ( ( prev ) => ! prev ) ;
4349 try {
44- await putLinkFavorite ( info . id , { favorite : ! isSubscribed } ) ;
4550 updateFavorite ( info . id , ! isSubscribed ) ;
4651 } catch ( error ) {
4752 console . error ( "즐겨찾기 설정 중 오류 발생:" , error ) ;
@@ -104,7 +109,7 @@ const LinkCard = ({ info }: LinkCardProps) => {
104109 </ span >
105110 { /* isFavoritePage일 때만 케밥 버튼 렌더링 */ }
106111 { ! isFavoritePage && (
107- < div className = "relative" >
112+ < div className = "relative" ref = { dropdownRef } >
108113 < button
109114 className = "relative w-[21px] h-[17px]"
110115 onClick = { toggleDropdown }
0 commit comments