Skip to content

Commit 13ca62f

Browse files
committed
♻️ refactor:useSSE 훅 적용
Issue Resolved: #
1 parent ba17e92 commit 13ca62f

File tree

3 files changed

+16
-31
lines changed

3 files changed

+16
-31
lines changed

front/src/hooks/useSSE.tsx

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,5 +30,6 @@ export default function useSSE<T>({ sseURL }: useSSEProps) {
3030
};
3131
}, [sseURL]);
3232

33-
return { data } as { data: T | null };
33+
const isLoading = data === null ? true : false;
34+
return { data, isLoading } as { data: T | null; isLoading: boolean };
3435
}

front/src/pages/ReservationPage/SeatMap.tsx

Lines changed: 12 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,11 @@
1-
import { useEffect, useRef, useState } from 'react';
21
import { useParams } from 'react-router-dom';
32

43
import { BASE_URL } from '@/api/axios.ts';
54
import type { PostSeatData } from '@/api/booking.ts';
65
import { postSeat } from '@/api/booking.ts';
76

7+
import useSSE from '@/hooks/useSSE.tsx';
8+
89
import { toast } from '@/components/Toast/index.ts';
910
import Icon from '@/components/common/Icon.tsx';
1011

@@ -30,10 +31,6 @@ export default function SeatMap({
3031
selectedSeats,
3132
}: SeatMapProps) {
3233
const { eventId } = useParams();
33-
//TODO 이름 헷갈림
34-
const [seatStatusList, setSeatStatusList] = useState<boolean[][]>([]);
35-
const seatStatus = seatStatusList[selectedSectionIndex];
36-
const eventSourceRef = useRef<null | EventSource>(null);
3734
const { mutate: pickSeat } = useMutation({
3835
mutationFn: postSeat,
3936
mutationKey: PICK_SEAT_MUTATION_KEY_LIST,
@@ -58,34 +55,21 @@ export default function SeatMap({
5855
},
5956
select: (mutation) => mutation.state.variables as PostSeatData,
6057
});
61-
useEffect(() => {
62-
if (eventSourceRef.current === null) {
63-
eventSourceRef.current = new EventSource(`${BASE_URL}${API.BOOKING.GET_SEATS_SSE(Number(eventId))}`, {
64-
withCredentials: true,
65-
});
66-
eventSourceRef.current.onmessage = (event) => {
67-
const { seatStatus } = JSON.parse(event.data);
68-
if (seatStatus) {
69-
setSeatStatusList(seatStatus);
70-
}
71-
};
72-
}
73-
return () => {
74-
if (eventSourceRef.current) {
75-
eventSourceRef.current.close();
76-
eventSourceRef.current = null;
77-
}
78-
};
79-
}, [eventId]);
80-
const canRender = seatStatusList.length !== 0;
58+
const { data, isLoading } = useSSE<{ seatStatus: boolean[][] }>({
59+
sseURL: `${BASE_URL}${API.BOOKING.GET_SEATS_SSE(Number(eventId))}`,
60+
});
61+
62+
const seatStatusList = data ? data.seatStatus : null;
63+
const selectedSeatStatus = seatStatusList ? seatStatusList[selectedSectionIndex] : null;
64+
const canRender = isLoading === false && seatStatusList && seatStatusList.length !== 0;
65+
8166
return (
8267
<>
83-
{/* <Loading /> */}
8468
{canRender ? (
8569
renderSeatMap(
8670
selectedSection,
8771
selectedSectionIndex,
88-
seatStatus,
72+
selectedSeatStatus!,
8973
setSelectedSeats,
9074
maxSelectCount,
9175
selectedSeats,
@@ -99,6 +83,7 @@ export default function SeatMap({
9983
</>
10084
);
10185
}
86+
10287
const Loading = () => {
10388
return (
10489
<div className="absolute flex w-full items-center justify-center">

front/src/pages/ReservationPage/SectionAndSeat.tsx

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -40,9 +40,7 @@ export default function SectionAndSeat({
4040
placeInformation,
4141
setReservationResult,
4242
goNextStep,
43-
changeSeatCount,
4443
}: ISectionAndSeatProps) {
45-
console.log(changeSeatCount);
4644
const [selectedSection, setSelectedSection] = useState<number | null>(null);
4745
const [selectedSeats, setSelectedSeats] = useState<SelectedSeat[]>([]);
4846
const { mutate: confirmReservation } = useMutation({ mutationFn: postReservation });
@@ -97,7 +95,7 @@ export default function SectionAndSeat({
9795
<div
9896
className={twMerge(
9997
cx(
100-
'mx-auto grid auto-cols-min gap-4',
98+
'relative mx-auto grid auto-cols-min gap-4',
10199
selectedSectionSeatMap ? `grid-cols-${selectedSectionSeatMap.colLen}` : '',
102100
),
103101
)}>
@@ -171,6 +169,7 @@ export default function SectionAndSeat({
171169
onSuccess: () => {
172170
setReservationResult(selectedSeats);
173171
queryClient.refetchQueries({ queryKey: ['reservation'] });
172+
queryClient.invalidateQueries({ queryKey: ['event'] });
174173
goNextStep();
175174
},
176175
},

0 commit comments

Comments
 (0)