import { isLoginRequiredError } from '@_api/apiClient'; import { createPendingReservation } from '@_api/reservation/reservationAPIV2'; import '@_css/reservation-v2-1.css'; import React, { useState } from 'react'; import { useLocation, useNavigate } from 'react-router-dom'; import { formatDate, formatTime } from 'src/util/DateTimeFormatter'; const ReservationFormPage: React.FC = () => { const navigate = useNavigate(); const location = useLocation(); const { scheduleId, theme, date, time } = location.state || {}; const [reserverName, setReserverName] = useState(''); const [reserverContact, setReserverContact] = useState(''); const [participantCount, setParticipantCount] = useState(2); const [requirement, setRequirement] = useState(''); 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); } }; const handleCountChange = (delta: number) => { setParticipantCount(prev => Math.max(theme.minParticipants, Math.min(theme.maxParticipants, prev + delta))); }; const handlePayment = () => { if (!reserverName || !reserverContact) { alert('예약자명과 연락처를 입력해주세요.'); return; } const reservationData = { scheduleId, reserverName, reserverContact, participantCount, requirement, }; createPendingReservation(reservationData) .then(res => { navigate('/v2-1/reservation/payment', { state: { reservationId: res.id, themeName: theme.name, date: date, startAt: time, price: theme.price * participantCount, } }); }) .catch(handleError); }; if (!scheduleId || !theme) { // Handle case where state is not passed correctly return (

잘못된 접근

예약 정보가 올바르지 않습니다. 예약 페이지로 다시 이동해주세요.

); } return (

예약 정보 입력

예약 내용 확인

테마: {theme.name}

날짜: {formatDate(date)}

시간: {formatTime(time)}

예약자 정보

setReserverName(e.target.value)} />
setReserverContact(e.target.value)} placeholder="'-' 없이 입력"/>
setParticipantCount(Math.max(theme.minParticipants, Math.min(theme.maxParticipants, Number(e.target.value))))} min={theme.minParticipants} max={theme.maxParticipants} />