import React, { useEffect, useState } from 'react'; import { useNavigate } from 'react-router-dom'; import { cancelWaiting, fetchMyReservations } from '@_api/reservation/reservationAPI'; import type { MyReservationRetrieveResponse } from '@_api/reservation/reservationTypes'; import { ReservationStatus } from '@_api/reservation/reservationTypes'; import { isLoginRequiredError } from '@_api/apiClient'; const MyReservationPage: React.FC = () => { const [reservations, setReservations] = useState([]); const navigate = useNavigate(); const handleError = (err: any) => { if (isLoginRequiredError(err)) { alert('로그인이 필요해요.'); navigate('/login', { state: { from: location } }); } else { const message = err.response?.data?.message || '알 수 없는 오류가 발생했습니다.'; alert(message); console.error(err); } }; useEffect(() => { fetchMyReservations() .then(res => setReservations(res.reservations)) .catch(handleError); }, []); const _cancelWaiting = (id: string) => { cancelWaiting(id) .then(() => { alert('예약 대기가 취소되었습니다.'); setReservations(reservations.filter(r => r.id.toString() !== id)); }) .catch(handleError); }; const getStatusText = (status: ReservationStatus, rank: number) => { if (status === ReservationStatus.CONFIRMED) { return '예약'; } if (status === ReservationStatus.CONFIRMED_PAYMENT_REQUIRED) { return '예약 - 결제 필요'; } if (status === ReservationStatus.WAITING) { return `${rank}번째 예약 대기`; } return ''; }; return (

내 예약

{reservations.map(r => ( ))}
테마 날짜 시간 상태 대기 취소 paymentKey 결제금액
{r.themeName} {r.date} {r.time} {getStatusText(r.status, r.rank)} {r.status === ReservationStatus.WAITING && } {r.paymentKey} {r.amount}
); }; export default MyReservationPage;