diff --git a/src/app/(user-page)/my-meeting/_features/CardRightSection.tsx b/src/app/(user-page)/my-meeting/_features/CardRightSection.tsx index 8836b3a7..d8aa2d39 100644 --- a/src/app/(user-page)/my-meeting/_features/CardRightSection.tsx +++ b/src/app/(user-page)/my-meeting/_features/CardRightSection.tsx @@ -62,6 +62,9 @@ const CardRightSection = ({ ); router.push( `/my-meeting/my/user-list?meetingId=${meetingId}&type=${showPublicSelect ? 'created' : 'participated'}`, + { + scroll: false, + }, ); }; diff --git a/src/app/(user-page)/my-meeting/_features/Created.tsx b/src/app/(user-page)/my-meeting/_features/Created.tsx index fb75f603..73a5814b 100644 --- a/src/app/(user-page)/my-meeting/_features/Created.tsx +++ b/src/app/(user-page)/my-meeting/_features/Created.tsx @@ -61,6 +61,7 @@ const Created = () => { className="flex-row" meetingId={meeting.meetingId} category={''} + showLikeButton={false} > { className="" meetingId={meeting.meetingId} category={''} + showLikeButton={false} /> { className="" meetingId={meeting.meetingId} category={''} + showLikeButton={false} /> { ))} ))} + {/* 추가 데이터 로딩 중 표시 */} + {isFetchingNextPage && } + + {/* 데이터가 없는 경우 표시 */} + {meetingData.pages[0].content.length === 0 && ( +
+
+

내가 만든 모임이 없어요.

+

원하는 모임을 만들어보세요!

+
+
+ )} ); }; diff --git a/src/app/(user-page)/my-meeting/_features/Likes.tsx b/src/app/(user-page)/my-meeting/_features/Likes.tsx index 96f56144..81f92f68 100644 --- a/src/app/(user-page)/my-meeting/_features/Likes.tsx +++ b/src/app/(user-page)/my-meeting/_features/Likes.tsx @@ -124,7 +124,7 @@ const Likes = () => { {/* 데이터가 없는 경우 표시 */} {meetingData.pages[0].content.length === 0 && ( -
+

찜한 모임이 없어요.

원하는 모임을 찜해보세요!

diff --git a/src/app/(user-page)/my-meeting/_features/ModalUserList.tsx b/src/app/(user-page)/my-meeting/_features/ModalUserList.tsx index 30f8ddc8..00ba0783 100644 --- a/src/app/(user-page)/my-meeting/_features/ModalUserList.tsx +++ b/src/app/(user-page)/my-meeting/_features/ModalUserList.tsx @@ -26,6 +26,9 @@ const ModalUserList = ({ const handleProfileClick = (user: Member) => { router.push( `/my-meeting/my/profile?meetingId=${meetingId}&userId=${user.userId}&memberStatus=${user.memberStatus}`, + { + scroll: false, + }, ); }; diff --git a/src/app/(user-page)/my-meeting/_features/Participated.tsx b/src/app/(user-page)/my-meeting/_features/Participated.tsx index c332341f..684ed710 100644 --- a/src/app/(user-page)/my-meeting/_features/Participated.tsx +++ b/src/app/(user-page)/my-meeting/_features/Participated.tsx @@ -223,7 +223,7 @@ const Participated = () => { {/* 데이터가 없는 경우 표시 */} {meetingData.pages[0].content.length === 0 && ( -
+

내가 참여하고있는 모임이 없어요.

원하는 모임에 참가하세요!

diff --git a/src/app/(user-page)/my-meeting/_features/Writable.tsx b/src/app/(user-page)/my-meeting/_features/Writable.tsx index a1014494..8a5ae1b8 100644 --- a/src/app/(user-page)/my-meeting/_features/Writable.tsx +++ b/src/app/(user-page)/my-meeting/_features/Writable.tsx @@ -48,11 +48,14 @@ const Writable = () => { return (
{allMeetings.length === 0 && ( -
- 리뷰 작성 가능한 모임이 없습니다.
- 모임에 참여하고 리뷰를 작성해보세요! +
+
+

리뷰 작성 가능한 모임이 없습니다.

+

모임에 참여하고 리뷰를 작성해보세요!

+
)} +
{allMeetings.map((meeting) => (
diff --git a/src/app/(user-page)/my-meeting/_features/Written.tsx b/src/app/(user-page)/my-meeting/_features/Written.tsx index b248b06e..4bcf9aa3 100644 --- a/src/app/(user-page)/my-meeting/_features/Written.tsx +++ b/src/app/(user-page)/my-meeting/_features/Written.tsx @@ -50,11 +50,14 @@ const Written = () => {
{/* 데이터가 없는 경우 표시 */} {allComments.length === 0 && ( -
- 작성한 리뷰가 없습니다.
- 모임에 참여하고 리뷰를 작성해보세요! +
+
+

작성한 리뷰가 없습니다.

+

모임에 참여하고 리뷰를 작성해보세요!

+
)} +
{allComments.map((comment) => (
diff --git a/src/app/(user-page)/my-meeting/my/@modal/(.)profile/page.tsx b/src/app/(user-page)/my-meeting/my/@modal/(.)profile/page.tsx index 5c87c2ed..8e1fbed8 100644 --- a/src/app/(user-page)/my-meeting/my/@modal/(.)profile/page.tsx +++ b/src/app/(user-page)/my-meeting/my/@modal/(.)profile/page.tsx @@ -41,9 +41,10 @@ export default function UserListModal({ setMemberStatus: 'APPROVED', userId: selectedUser.userId, }); + router.replace(`/my-meeting/my?type=created`, { scroll: false }); + } else { + router.back(); } - - router.replace(`/my-meeting/my/user-list?meetingId=${meetingId}`); }; const handleSecondModalCancel = () => { @@ -54,14 +55,16 @@ export default function UserListModal({ setMemberStatus: 'REJECTED', userId: selectedUser.userId, }); + router.replace(`/my-meeting/my?type=created`, { scroll: false }); } else if (memberStatus === 'APPROVED') { expelMutate({ setMemberStatus: 'EXPEL', userId: selectedUser.userId, }); + router.replace(`/my-meeting/my?type=created`, { scroll: false }); + } else { + router.back(); } - - router.replace(`/my-meeting/my/user-list?meetingId=${meetingId}`); }; if (!selectedUser) return ; diff --git a/src/app/(user-page)/my-meeting/my/@modal/page.tsx b/src/app/(user-page)/my-meeting/my/@modal/page.tsx new file mode 100644 index 00000000..22b9b6f3 --- /dev/null +++ b/src/app/(user-page)/my-meeting/my/@modal/page.tsx @@ -0,0 +1,3 @@ +export default function DefaultModal() { + return null; // 기본적으로 모달 없음 +} diff --git a/src/app/layout.tsx b/src/app/layout.tsx index c7fa0edf..1c330d16 100644 --- a/src/app/layout.tsx +++ b/src/app/layout.tsx @@ -50,7 +50,7 @@ export default async function RootLayout({
-
{children}
+
{children}
diff --git a/src/app/meeting/[category]/@modal/[id]/(.)intro-input/page.tsx b/src/app/meeting/[category]/@modal/[id]/(.)intro-input/page.tsx index d02f1bde..75d0c4e4 100644 --- a/src/app/meeting/[category]/@modal/[id]/(.)intro-input/page.tsx +++ b/src/app/meeting/[category]/@modal/[id]/(.)intro-input/page.tsx @@ -1,6 +1,7 @@ 'use client'; import ModalRegisterInput from '@/app/meeting/_features/modal-content/ModalRegisterInput'; +import { useToast } from '@/components/common/ToastContext'; import ModalPortal from '@/components/ui/modal/ModalPortal'; import { useMeetingMutation } from '@/hooks/mutations/useMeetingMutation'; import { translateCategoryNameToEng } from '@/util/searchFilter'; @@ -14,6 +15,7 @@ export default function UserListModal({ }) { const router = useRouter(); const [value, setValue] = useState(''); + const { showToast } = useToast(); const meetingId = Number(params.id); const category = params.category; @@ -33,12 +35,16 @@ export default function UserListModal({ }); const handleConfirm = () => { - mutate({ message: value }); - setValue(''); - router.push( - `/meeting/${translateCategoryNameToEng(category)}/${meetingId}/intro-input`, - { scroll: false }, - ); + if (!value) { + showToast('인삿말을 입력해주세요!', 'error'); + } else { + mutate({ message: value }); + setValue(''); + router.push( + `/meeting/${translateCategoryNameToEng(category)}/${meetingId}/intro-input`, + { scroll: false }, + ); + } }; return ( diff --git a/src/app/meeting/_features/CardRightSection.tsx b/src/app/meeting/_features/CardRightSection.tsx index 4933076d..1a947283 100644 --- a/src/app/meeting/_features/CardRightSection.tsx +++ b/src/app/meeting/_features/CardRightSection.tsx @@ -1,15 +1,11 @@ 'use client'; import { Button } from '@/components/ui/Button'; -import { meetingKeys } from '@/hooks/queries/useMeetingQueries'; -import { QUERY_KEYS } from '@/hooks/queries/useMyPageQueries'; import { getAccessToken } from '@/lib/serverActions'; import { getDDay } from '@/util/date'; import { translateCategoryNameToEng } from '@/util/searchFilter'; -import { useQueryClient } from '@tanstack/react-query'; import { useRouter } from 'next/navigation'; -import { MeetingDetail, MeetingManager } from 'service/api/meeting'; -import { IBanner } from 'types/myMeeting'; +import { MeetingDetail } from 'service/api/meeting'; const CardRightSection = ({ meeting }: { meeting: MeetingDetail }) => { const router = useRouter(); @@ -35,14 +31,7 @@ const CardRightSection = ({ meeting }: { meeting: MeetingDetail }) => { router.push('/my-meeting/my?type=created'); }; - const queryClient = useQueryClient(); - const leader = queryClient.getQueryData( - meetingKeys.detailInfoUser(meeting.meetingId), - ); - const user = queryClient.getQueryData(QUERY_KEYS.banner()); - - const status = - leader?.email === user?.email ? 'LEADER' : meeting.memberStatus; + const status = meeting.isMeetingManager ? 'LEADER' : meeting.memberStatus; return (
diff --git a/src/app/meeting/_features/ReviewInput.tsx b/src/app/meeting/_features/ReviewInput.tsx index 371e6cac..5f0d419b 100644 --- a/src/app/meeting/_features/ReviewInput.tsx +++ b/src/app/meeting/_features/ReviewInput.tsx @@ -8,9 +8,10 @@ import { useState } from 'react'; const ReviewInput = ({ meetingId }: { meetingId: number }) => { const [selectedRating, setSelectedRating] = useState(0); const [review, setReview] = useState(''); - const { mutate } = useCommentMutation(meetingId); + const isReady = !!selectedRating && !!review; + const handleSubmit = () => { const req = { score: selectedRating, @@ -42,6 +43,7 @@ const ReviewInput = ({ meetingId }: { meetingId: number }) => { diff --git a/src/app/signup/page.tsx b/src/app/signup/page.tsx index 4a17371b..ddadbd6d 100644 --- a/src/app/signup/page.tsx +++ b/src/app/signup/page.tsx @@ -17,7 +17,7 @@ export const metadata = { export default function Signup() { return ( -
+
); diff --git a/src/components/common/Header.tsx b/src/components/common/Header.tsx index cb959370..b519b1a1 100644 --- a/src/components/common/Header.tsx +++ b/src/components/common/Header.tsx @@ -1,8 +1,8 @@ 'use client'; import Logo from '@/assets/icon/logo.svg'; +import { useLogoutMutation } from '@/hooks/mutations/useUserMutation'; import { QUERY_KEYS } from '@/hooks/queries/useMyPageQueries'; -import { removeAccessToken } from '@/lib/serverActions'; import { translateCategoryNameToKor } from '@/util/searchFilter'; import { useQueryClient } from '@tanstack/react-query'; import { MEETING_TYPES } from 'constants/category/category'; @@ -15,7 +15,6 @@ import { useEffect, useState } from 'react'; import { IBanner } from 'types/myMeeting'; import Dropdown from './Dropdown'; -import { useToast } from './ToastContext'; interface IUserInfo { userId: number; @@ -40,7 +39,8 @@ const BeforeLogin = () => { const AfterLogin = ({ userInfo }: { userInfo: IUserInfo }) => { const router = useRouter(); - const { showToast } = useToast(); + const { mutate } = useLogoutMutation(); + const menu = [ { value: 'mymeeting', @@ -55,11 +55,7 @@ const AfterLogin = ({ userInfo }: { userInfo: IUserInfo }) => { { value: 'logout', label: '로그아웃', - onSelect: async () => { - await removeAccessToken(); - // 로그아웃 관련 토스트바 노출 - showToast('로그아웃 되었습니다.', 'success'); - }, + onSelect: () => mutate(), }, ]; return ( @@ -73,7 +69,7 @@ const AfterLogin = ({ userInfo }: { userInfo: IUserInfo }) => { sideOffset={10} imageProps={{ component: ( -
+
{ }; const MobileAfterLogin = ({ userInfo }: { userInfo: IUserInfo }) => { - const { showToast } = useToast(); + const { mutate } = useLogoutMutation(); return (
@@ -140,11 +136,8 @@ const MobileAfterLogin = ({ userInfo }: { userInfo: IUserInfo }) => {