import { confirmWaiting, fetchWaitingReservations, rejectWaiting } from '@_api/reservation/reservationAPI'; import type { ReservationRetrieveResponse } from '@_api/reservation/reservationTypes'; import React, { useEffect, useState } from 'react'; import { useLocation, useNavigate } from 'react-router-dom'; import { isLoginRequiredError } from '@_api/apiClient'; const AdminWaitingPage: React.FC = () => { const [waitings, setWaitings] = useState([]); const navigate = useNavigate(); const location = useLocation(); 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(() => { const fetchData = async () => { await fetchWaitingReservations() .then(res => setWaitings(res.reservations)) .catch(handleError); } fetchData(); }, []); const approveWaiting = async (id: number) => { await confirmWaiting(id) .then(() => { alert('대기 중인 예약을 승인했어요. 결제는 별도로 진행해주세요.'); setWaitings(waitings.filter(w => w.id !== id)); }) .catch(handleError); }; const denyWaiting = async (id: number) => { await rejectWaiting(id) .then(() => { alert('대기 중인 예약을 거절했어요.'); setWaitings(waitings.filter(w => w.id !== id)); }) .catch(handleError); }; return (

예약 대기 관리 페이지

{waitings.map(w => ( ))}
예약대기 번호 예약자 테마 날짜 시간
{w.id} {w.member.name} {w.theme.name} {w.date} {w.time.startAt}
); }; export default AdminWaitingPage;