diff --git a/src/app/(user-page)/my-meeting/_features/CardRightSection.tsx b/src/app/(user-page)/my-meeting/_features/CardRightSection.tsx index 4fbb1cf..3e1ca1d 100644 --- a/src/app/(user-page)/my-meeting/_features/CardRightSection.tsx +++ b/src/app/(user-page)/my-meeting/_features/CardRightSection.tsx @@ -2,21 +2,14 @@ import { Button } from '@/components/ui/Button'; import { Tag } from '@/components/ui/Tag'; -import Modal from '@/components/ui/modal/Modal'; -import { - useExpelMutation, - useMemberStatusMutation, -} from '@/hooks/mutations/useMyMeetingMutation'; import { myMeetingKeys } from '@/hooks/queries/useMyMeetingQueries'; import { useBannerQueries } from '@/hooks/queries/useMyPageQueries'; import { useQueryClient } from '@tanstack/react-query'; import Image from 'next/image'; -import { useState } from 'react'; +import { useRouter } from 'next/navigation'; import { getMyMeetingMemberProfile } from 'service/api/mymeeting'; import type { Member } from 'types/myMeeting'; -import ModalProfile from './ModalProfile'; -import ModalUserList from './ModalUserList'; import PublicSelect from './PublicDropdown'; const CardRightSection = ({ @@ -32,50 +25,8 @@ const CardRightSection = ({ meetingId: number; showPublicSelect?: boolean; }) => { - const [isUserListModalOpen, setIsUserListModalOpen] = useState(false); - const handleConfirm = () => { - setIsUserListModalOpen(false); - }; - - const [isUserProfileModalOpen, setIsUserProfileModalOpen] = useState(false); - - // 가입 승인 / 거절 - const { mutate: statusMutate } = useMemberStatusMutation(meetingId); - - // 내보내기 - const { mutate: expelMutate } = useExpelMutation(meetingId); - - const handleSecondModalConfirm = () => { - // 가입 확인 api 연동 - // 만약, status가 approved라면 -> 내보내기 활성화 - // 만약, status가 pending이 아니라면 -> 닫기만 활성화 - - if (selectedUser && selectedUser.memberStatus === 'PENDING') { - statusMutate({ - setMemberStatus: 'APPROVED', - userId: selectedUser?.userId, - }); - } - - setIsUserProfileModalOpen(false); - }; - - const handleSecondModalCancel = () => { - // 가입 거절 api 연동 - if (selectedUser && selectedUser.memberStatus === 'PENDING') { - statusMutate({ - setMemberStatus: 'REJECTED', - userId: selectedUser?.userId, - }); - } else if (selectedUser && selectedUser.memberStatus === 'APPROVED') { - expelMutate({ - setMemberStatus: 'EXPEL', - userId: selectedUser?.userId, - }); - } - - setIsUserProfileModalOpen(false); - }; + const router = useRouter(); + const queryClient = useQueryClient(); // 데스크탑 뷰에서 유저 프로필 보기 const handleOpenProfileModal = ( @@ -83,12 +34,11 @@ const CardRightSection = ({ member: Member, ) => { e.stopPropagation(); - setSelectedUser(member); - setIsUserProfileModalOpen(true); + router.push( + `/my-meeting/my/profile?meetingId=${meetingId}&userId=${member.userId}&memberStatus=${member.memberStatus}`, + ); }; - const queryClient = useQueryClient(); - const handlePrefetchProfile = async (member: Member) => { const queryKey = myMeetingKeys.memberProfile(meetingId, member.userId); @@ -104,10 +54,7 @@ const CardRightSection = ({ } }; - // 프로필 보기 할 유저 - const [selectedUser, setSelectedUser] = useState(null); - - const { data: currentUser, isLoading, error } = useBannerQueries(); + const { data: currentUser, isLoading } = useBannerQueries(); if (isLoading || !currentUser) { return; } @@ -142,7 +89,10 @@ const CardRightSection = ({ {member.userId !== currentUser?.userId && (
{showPublicSelect && ( - + )}
-
- - {showPublicSelect && ( - - )} -
- - + router.push(`/my-meeting/my/user-list?meetingId=${meetingId}`) } - cancelText={ - selectedUser?.memberStatus === 'PENDING' - ? '가입거절' - : selectedUser?.memberStatus === 'APPROVED' - ? '내보내기' - : '닫기' - } - closeOnly={ - !( - selectedUser?.memberStatus === 'PENDING' || - selectedUser?.memberStatus === 'APPROVED' - ) - } - modalClassName="w-[450px] overflow-hidden bg-BG_2" - buttonClassName="w-full" - > - - - setIsUserListModalOpen(false)} - onConfirm={handleConfirm} - showOnly - modalClassName="h-[590px] w-[520px] overflow-y-auto" > - - + 맴버 명단 보기 + + {showPublicSelect && ( + + )} ); }; diff --git a/src/app/(user-page)/my-meeting/_features/Created.tsx b/src/app/(user-page)/my-meeting/_features/Created.tsx index 7a66a88..05dcb81 100644 --- a/src/app/(user-page)/my-meeting/_features/Created.tsx +++ b/src/app/(user-page)/my-meeting/_features/Created.tsx @@ -53,7 +53,6 @@ const Created = () => { > { > { > { - const { - data: user, - isLoading, - error, - } = useMyMeetingMemberProfileQuries({ - meetingId, - userId: userId!, - }); - - if (isLoading || !user) { - return ; - } - +const ModalProfile = ({ user }: { user: IMemberProfile }) => { return (
@@ -50,21 +31,22 @@ const ModalProfile = ({
-
-
- 자바스크립트 -
-
- 자바스크립트 -
-
- 자바스크립트 -
-
- 자바스크립트 -
-
- 자바스크립트 +
+
+ {user.skillArray && + user.skillArray?.length > 0 && + user.skillArray.map((skill) => ( + {}} + /> + ))}
diff --git a/src/app/(user-page)/my-meeting/_features/ModalUserList.tsx b/src/app/(user-page)/my-meeting/_features/ModalUserList.tsx index 64a6bf2..b44b09e 100644 --- a/src/app/(user-page)/my-meeting/_features/ModalUserList.tsx +++ b/src/app/(user-page)/my-meeting/_features/ModalUserList.tsx @@ -1,38 +1,46 @@ import { Tag } from '@/components/ui/Tag'; import Image from 'next/image'; +import { useRouter } from 'next/navigation'; import React from 'react'; -import { Dispatch, SetStateAction } from 'react'; import type { IBanner, Member } from 'types/myMeeting'; import { Button } from '../../../../components/ui/Button'; const ModalUserList = ({ memberList, - setIsUserProfileModalOpen, - setIsUserListModalOpen, - setSelectedUser, - currentUser, className, + meetingId, + currentUser, handlePrefetchProfile, showPublicSelect = false, }: { memberList: Member[]; - setSelectedUser: Dispatch>; - setIsUserProfileModalOpen: Dispatch>; - setIsUserListModalOpen: Dispatch>; currentUser: IBanner; className?: string; handlePrefetchProfile: (member: Member) => Promise; showPublicSelect?: boolean; + meetingId: number; }) => { + const router = useRouter(); + const handleProfileClick = (user: Member) => { - setSelectedUser(user); - setIsUserProfileModalOpen(true); - setIsUserListModalOpen(false); + router.push( + `/my-meeting/my/profile?meetingId=${meetingId}&userId=${user.userId}&memberStatus=${user.memberStatus}`, + ); }; return ( -
+
e.stopPropagation()} + role="button" + tabIndex={0} + onKeyDown={(e) => { + if (e.key === 'Enter' || e.key === ' ') { + e.stopPropagation(); + } + }} + >

맴버 리스트

{memberList.map((user) => ( @@ -53,7 +61,10 @@ const ModalUserList = ({ {user.userId !== currentUser?.userId && (
{showPublicSelect && ( - + )}
+ ) : ( + <> + + + + )} +
+ )} + +
, + document.getElementById('modal-root') as HTMLElement, + ); +}; + +export default ModalPortal;