diff --git a/GapLog-Client b/GapLog-Client new file mode 160000 index 0000000..c003b4a --- /dev/null +++ b/GapLog-Client @@ -0,0 +1 @@ +Subproject commit c003b4ad2b8c7de9addab4aeb160783ba7aedd8e diff --git a/src/components/bars/MyPageBar.jsx b/src/components/bars/MyPageBar.jsx index 977e61d..81d1c6a 100644 --- a/src/components/bars/MyPageBar.jsx +++ b/src/components/bars/MyPageBar.jsx @@ -39,11 +39,11 @@ function MyPageBar() { diff --git a/src/components/bars/TitleBar.jsx b/src/components/bars/TitleBar.jsx index 57d178c..022e6cd 100644 --- a/src/components/bars/TitleBar.jsx +++ b/src/components/bars/TitleBar.jsx @@ -80,7 +80,7 @@ const MenuItem = styled.div` `; function TitleBar(props) { - const { user, isLoggedIn, setUser } = useUser(); + const { user, isLoggedIn, setUser, setIsLoggedIn } = useUser(); const [isProfileMenuOpen, setIsProfileMenuOpen] = useState(false); const [isDMModalOpen, setIsDMModalOpen] = useState(false); const [isLoginModalOpen, setIsLoginModalOpen] = useState(false); // 로그인 모달 상태 @@ -114,7 +114,7 @@ function TitleBar(props) { // 사용자 상태를 null로 설정 setUser(null); - + setIsLoggedIn(false); // 홈 페이지로 리디렉션 nav('/'); } catch (error) { @@ -140,6 +140,9 @@ function TitleBar(props) { {isProfileMenuOpen && ( + nav('/mypage/main')}> + 마이페이지 + 로그아웃 nav('/settings')}>설정 diff --git a/src/components/comment/CommentItem.jsx b/src/components/comment/CommentItem.jsx index 3ff1289..0c8cf0d 100644 --- a/src/components/comment/CommentItem.jsx +++ b/src/components/comment/CommentItem.jsx @@ -75,6 +75,35 @@ const HideButton = styled.button` `; function CommentItem({ comment, hasReplies, onToggleHide }) { + const [isLiked, setIsLiked] = useState(comment.isLiked); + + const toggleLike = async () => { + try { + const accessToken = localStorage.getItem('accessToken'); + const response = await fetch( + `http://3.37.43.129/api/comments/${comment.id}/like`, + { + method: 'PUT', + headers: { + 'Content-Type': 'application/json', + 'Authorization': `Bearer ${accessToken}`, + }, + } + ); + + if (!response.ok) { + throw new Error('Failed to toggle like'); + } + + const data = await response.json(); // API로부터 반환된 데이터 + + // 상태 업데이트 + setIsLiked(data.isLiked); // boolean 값 업데이트 + } catch (error) { + console.error(error); + } + }; + return ( @@ -87,7 +116,12 @@ function CommentItem({ comment, hasReplies, onToggleHide }) { {comment.content} - +
+ +
{hasReplies && ( {comment.isHidden ? '댓글 보기' : '댓글 숨기기'} diff --git a/src/components/user/FollowItem.jsx b/src/components/user/FollowItem.jsx index 6aac7db..fae7c2a 100644 --- a/src/components/user/FollowItem.jsx +++ b/src/components/user/FollowItem.jsx @@ -52,17 +52,39 @@ const UserBio = styled.div` margin-right: 830px; `; -function FollowItem() { +function FollowItem({ props }) { + const { followeeId } = props; + const [user, setUser] = useState(null); + const [loading, setLoading] = useState(true); + + useEffect(() => { + const fetchUser = async () => { + const response = await fetch( + `http://3.37.43.129/api/users/${followeeId}` + ); + if (response.ok) { + const data = await response.json(); + setUser(data); + } + setLoading(false); + }; + + fetchUser(); + }, [followeeId]); + + if (loading) return
Loading...
; + if (!user) return null; + return ( - profile + profile - 나는다연 - @hongdari + {user.nickName} + {user.userId} - 안녕하시소 + {user.introduce}