Skip to content

Commit c176a85

Browse files
committed
feat: 사이트맵 하드코딩 -> api 요청으로 받아오도록 변경
1 parent 49de33c commit c176a85

6 files changed

Lines changed: 62 additions & 12 deletions

File tree

apps/ticket/src/app/(pages)/event/[eventId]/time-table/site-map/_clientBoundary/SiteMapClient/index.tsx

Lines changed: 3 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import { Navigation, Pagination } from "swiper/modules";
77
import { Swiper, SwiperSlide } from "swiper/react";
88

99
import { Button, Flex, Typography } from "@permit/design-system";
10-
import { useTimetablesSuspenseQuery } from "@/data/events/getTimetables/queries";
10+
import { useSiteMapSuspenseQuery } from "@/data/events/getSiteMap/queries";
1111

1212
import "swiper/css";
1313
import "swiper/css/navigation";
@@ -21,17 +21,10 @@ type Props = {
2121
eventId: string;
2222
};
2323

24-
// TODO: 임시 하드코딩
25-
const siteMapImages = [
26-
"https://d3c0v2xj3fc363.cloudfront.net/events/testEventId/images/sitemap1.jpg",
27-
"https://d3c0v2xj3fc363.cloudfront.net/events/testEventId/images/sitemap2.jpg",
28-
"https://d3c0v2xj3fc363.cloudfront.net/events/testEventId/images/sitemap0.jpg",
29-
];
30-
3124
export const SiteMapClient = ({ eventId }: Props) => {
3225
const router = useRouter();
3326

34-
const { data: timetablesData } = useTimetablesSuspenseQuery({
27+
const { data: timetablesData } = useSiteMapSuspenseQuery({
3528
eventId,
3629
options: {
3730
refetchOnWindowFocus: true,
@@ -74,7 +67,7 @@ export const SiteMapClient = ({ eventId }: Props) => {
7467
loop={true}
7568
className={cx("swiper")}
7669
>
77-
{siteMapImages.map((imageUrl, index) => (
70+
{timetablesData.siteMapImages.map(({ imageUrl }, index) => (
7871
<SwiperSlide key={index} className={cx("swiper_slide")}>
7972
<div className={cx("image_container")}>
8073
<Image

apps/ticket/src/app/(pages)/event/[eventId]/time-table/site-map/page.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import { Suspense } from "react";
22
import { dehydrate, HydrationBoundary } from "@tanstack/react-query";
33

4-
import { timetablesOptions } from "@/data/events/getTimetables/queries";
4+
import { siteMapOptions } from "@/data/events/getSiteMap/queries";
55
import { getQueryClient } from "@/lib/queryClient/helpers/getQueryClient";
66
import { LoadingWithLayout } from "@/shared/components/LoadingWithLayout";
77

@@ -17,7 +17,7 @@ export default async function SiteMapPage({ params }: Props) {
1717

1818
const qc = getQueryClient();
1919

20-
qc.prefetchQuery(timetablesOptions({ eventId }));
20+
qc.prefetchQuery(siteMapOptions({ eventId }));
2121

2222
return (
2323
<SiteMapErrorBoundary>

apps/ticket/src/data/constants.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,8 @@ export const API_URL = {
3232
TIMETABLE_LIKE: "/api/events/timetables/likes/:blockId",
3333
/** 행사 타임테이블 좋아요 삭제 API */
3434
TIMETABLE_UNLIKE: "/api/events/timetables/likes/:blockId",
35+
/** 행사 사이트맵 조회 API */
36+
SITE_MAP: "/api/events/:eventId/sitemap",
3537
},
3638

3739
// 예매 관련 API
Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
import { useQuery, useSuspenseQuery } from "@tanstack/react-query";
2+
3+
import { API_URL } from "@/data/constants";
4+
import { instance } from "@/lib/axios";
5+
import { getPathUrl } from "@/shared/helpers/getPathUrl";
6+
import {
7+
OptionsObject,
8+
PermitQueryOptions,
9+
UsePermitQueryOptions,
10+
UsePermitSuspenseQueryOptions,
11+
} from "@/shared/types/queryOptions";
12+
13+
import { EVENT_QUERY_KEYS } from "../queryKeys";
14+
import { SiteMapParams, SiteMapResponse } from "./types";
15+
16+
/** 행사 사이트맵 조회 API */
17+
export const siteMapOptions = (params: SiteMapParams): PermitQueryOptions<SiteMapResponse> => {
18+
const url = getPathUrl(API_URL.EVENT.SITE_MAP, { eventId: params.eventId });
19+
20+
return {
21+
queryKey: [EVENT_QUERY_KEYS.SITE_MAP, params.eventId],
22+
queryFn: () => {
23+
return instance.get<SiteMapResponse>(url).then((res) => res.data);
24+
},
25+
};
26+
};
27+
28+
export const useSiteMapQuery = ({
29+
eventId,
30+
options,
31+
}: SiteMapParams & OptionsObject<UsePermitQueryOptions<SiteMapResponse>>) => {
32+
return useQuery({
33+
...siteMapOptions({ eventId }),
34+
...options,
35+
});
36+
};
37+
38+
export const useSiteMapSuspenseQuery = ({
39+
eventId,
40+
options,
41+
}: SiteMapParams & OptionsObject<UsePermitSuspenseQueryOptions<SiteMapResponse>>) => {
42+
return useSuspenseQuery({
43+
...siteMapOptions({ eventId }),
44+
...options,
45+
});
46+
};
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
export type SiteMapParams = {
2+
eventId: string;
3+
};
4+
5+
export type SiteMapResponse = {
6+
eventName: string;
7+
siteMapImages: { imageUrl: string }[];
8+
};

apps/ticket/src/data/events/queryKeys.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,4 +4,5 @@ export const EVENT_QUERY_KEYS = {
44
TICKETS: "eventTickets",
55
TIMETABLES: "timetables",
66
TIMETABLE_DETAIL: "timetableDetail",
7+
SITE_MAP: "siteMap",
78
} as const;

0 commit comments

Comments
 (0)