diff --git a/src/api/service/group-service/index.ts b/src/api/service/group-service/index.ts index c6691d77..0f364afb 100644 --- a/src/api/service/group-service/index.ts +++ b/src/api/service/group-service/index.ts @@ -70,6 +70,6 @@ export const groupServiceRemote = () => ({ }, getGroupDetails: (payload: GetGroupDetailsPayload) => { - return api.post(`/groups/${payload}`); + return api.get(`/groups/${payload.groupId}`); }, }); diff --git a/src/app/meetup/[groupId]/layout.tsx b/src/app/meetup/[groupId]/layout.tsx new file mode 100644 index 00000000..1ff53271 --- /dev/null +++ b/src/app/meetup/[groupId]/layout.tsx @@ -0,0 +1,27 @@ +import { dehydrate, HydrationBoundary } from '@tanstack/react-query'; +import { QueryClient } from '@tanstack/react-query'; + +import { API } from '@/api'; +import { groupKeys } from '@/lib/query-key/query-key-group'; + +interface Props { + children: React.ReactNode; + params: Promise<{ groupId: string }>; +} + +const MeetupDetailLayout = async ({ children, params }: Props) => { + const { groupId } = await params; + + const queryClient = new QueryClient(); + + await queryClient.prefetchQuery({ + queryKey: groupKeys.detail(groupId), + queryFn: async () => API.groupService.getGroupDetails({ groupId }), + }); + + const dehydratedState = dehydrate(queryClient); + + return {children}; +}; + +export default MeetupDetailLayout; diff --git a/src/app/meetup/[id]/page.tsx b/src/app/meetup/[groupId]/page.tsx similarity index 91% rename from src/app/meetup/[id]/page.tsx rename to src/app/meetup/[groupId]/page.tsx index 121d8a08..e030095c 100644 --- a/src/app/meetup/[id]/page.tsx +++ b/src/app/meetup/[groupId]/page.tsx @@ -1,14 +1,30 @@ +'use client'; + +import { use } from 'react'; + import { MeetupBannerImages, MeetupButtons, MeetupDescriptions, MeetupMembers, } from '@/components/pages/meetup'; +import { useGetGroupDetails } from '@/hooks/use-group/use-group-get-details'; + +interface Props { + params: Promise<{ groupId: string }>; +} + +const MeetupDetailPage = ({ params }: Props) => { + const { groupId } = use(params); + const { data } = useGetGroupDetails({ groupId }); + + if (!data) return null; + + console.log(data); -const MeetupDetailPage = () => { return (
- + { + const hasImages = images.length; + + const defaultImageUrl = + 'https://images.unsplash.com/photo-1705599359461-f99dc9e80efa?q=80&w=1170&auto=format&fit=crop&ixlib=rb-4.1.0&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D'; + return ( -
- - {images.map((src) => ( - - image - - ))} - +
+ {hasImages ? ( + + {images.map(({ imageId440x240, imageUrl440x240 }) => ( + + image + + ))} + + ) : ( +
+ image +
+ )}
); }; diff --git a/src/components/pages/meetup/meetup-descriptions/index.tsx b/src/components/pages/meetup/meetup-descriptions/index.tsx index b24fda2d..7842dcfe 100644 --- a/src/components/pages/meetup/meetup-descriptions/index.tsx +++ b/src/components/pages/meetup/meetup-descriptions/index.tsx @@ -1,4 +1,4 @@ -import type { DUMMY_MEETUP_DATA } from '@/app/meetup/[id]/page'; +import type { DUMMY_MEETUP_DATA } from '@/app/meetup/[groupId]/page'; import { DescriptionContent, DescriptionProfile, diff --git a/src/components/pages/meetup/meetup-members/index.tsx b/src/components/pages/meetup/meetup-members/index.tsx index 2c5ee61d..54e21539 100644 --- a/src/components/pages/meetup/meetup-members/index.tsx +++ b/src/components/pages/meetup/meetup-members/index.tsx @@ -7,7 +7,7 @@ import { useState } from 'react'; import clsx from 'clsx'; -import type { DUMMY_MEETUP_DATA } from '@/app/meetup/[id]/page'; +import type { DUMMY_MEETUP_DATA } from '@/app/meetup/[groupId]/page'; import { Icon } from '@/components/icon'; import { Button } from '@/components/ui'; diff --git a/src/hooks/use-group/use-group-create/index.ts b/src/hooks/use-group/use-group-create/index.ts index edfb259c..9f9eaf14 100644 --- a/src/hooks/use-group/use-group-create/index.ts +++ b/src/hooks/use-group/use-group-create/index.ts @@ -8,6 +8,7 @@ export const useCreateGroup = () => { mutationFn: (payload: CreateGroupPayload) => API.groupService.createGroup(payload), onSuccess: () => { // 상세 페이지 이동할거라 목록 캐시를 갱신할 이유가 없음 (GPT 피셜) + console.log('모임 생성 성공.'); }, onError: () => { console.log('모임 생성 실패.'); diff --git a/src/hooks/use-group/use-group-get-details/index.ts b/src/hooks/use-group/use-group-get-details/index.ts index 6b5c332c..6bacbf02 100644 --- a/src/hooks/use-group/use-group-get-details/index.ts +++ b/src/hooks/use-group/use-group-get-details/index.ts @@ -1,11 +1,12 @@ import { useQuery } from '@tanstack/react-query'; import { API } from '@/api'; +import { groupKeys } from '@/lib/query-key/query-key-group'; import { GetGroupDetailsPayload } from '@/types/service/group'; export const useGetGroupDetails = (payload: GetGroupDetailsPayload) => { const query = useQuery({ - queryKey: ['somekey'], + queryKey: groupKeys.detail(payload.groupId), queryFn: () => API.groupService.getGroupDetails(payload), }); return query; diff --git a/src/lib/query-key/query-key-group/index.ts b/src/lib/query-key/query-key-group/index.ts index 903dec55..d89ca44d 100644 --- a/src/lib/query-key/query-key-group/index.ts +++ b/src/lib/query-key/query-key-group/index.ts @@ -6,4 +6,5 @@ export const groupKeys = { myLists: () => [...groupKeys.all, 'me'] as const, myList: (filters: { type: 'current' | 'myPost' | 'past'; cursor?: number; size: number }) => [...groupKeys.myLists(), filters] as const, + detail: (groupId: string) => [...groupKeys.all, groupId] as const, }; diff --git a/src/types/service/group.ts b/src/types/service/group.ts index e7de1460..a9150bea 100644 --- a/src/types/service/group.ts +++ b/src/types/service/group.ts @@ -125,7 +125,7 @@ export interface CreateGroupResponse { } export interface GetGroupDetailsPayload { - groupId: number; + groupId: string; } export interface GetGroupDetailsResponse {