diff --git a/ticketping/package.json b/ticketping/package.json index 4ece80a..4bab163 100644 --- a/ticketping/package.json +++ b/ticketping/package.json @@ -7,6 +7,7 @@ "axios": "^1.7.9", "axios-hooks": "^5.0.2", "cra-template": "1.2.0", + "dayjs": "^1.11.13", "react": "^17.0.2", "react-dom": "^17.0.2", "react-router-dom": "^6.28.0", diff --git a/ticketping/src/component/EnterQueue.js b/ticketping/src/component/EnterQueue.js index 8504bac..4e421de 100644 --- a/ticketping/src/component/EnterQueue.js +++ b/ticketping/src/component/EnterQueue.js @@ -11,11 +11,14 @@ export const useEnterQueue = (setIsModalVisible) => { const enterQueue = async (performanceId) => { try { - await axiosInstance.get(`/api/v1/waiting-queue?performanceId=${performanceId}`, { headers }); - - // 이미 대기열에 있는 인원 - setIsModalVisible(true); + const response = await axiosInstance.get(`/api/v1/waiting-queue?performanceId=${performanceId}`, { headers }); + const tokenStatus = response.data.data.tokenStatus; + if (tokenStatus === "WAITING") { + setIsModalVisible(true); + } else if (tokenStatus === "WORKING") { + navigate(`/performance/${performanceId}/schedule`); + } } catch (error) { // 대기열에 없는 인원 diff --git a/ticketping/src/component/QueueInfoModal.js b/ticketping/src/component/QueueInfoModal.js index e89a1d8..950b283 100644 --- a/ticketping/src/component/QueueInfoModal.js +++ b/ticketping/src/component/QueueInfoModal.js @@ -17,14 +17,11 @@ const QueueInfoModal = ({ visible, onClose, performanceId }) => { const fetchQueueInfo = async () => { try { const response = await axiosInstance.get(`/api/v1/waiting-queue?performanceId=${performanceId}`, { headers }); - - console.log(response); - setTokenStatus(response.data.data.tokenStatus); setPosition(response.data.data.position); setTotalUsers(response.data.data.totalUsers); - if (response.data.data.tokenStatus === "WORKING") { + if (tokenStatus === "WORKING") { navigate(`/performance/${performanceId}/schedule`); } } catch (error) { diff --git a/ticketping/src/pages/SelectSchedule.js b/ticketping/src/pages/SelectSchedule.js index 1a7569f..835bc66 100644 --- a/ticketping/src/pages/SelectSchedule.js +++ b/ticketping/src/pages/SelectSchedule.js @@ -1,5 +1,114 @@ -import React from "react"; +import React, { useEffect, useState } from "react"; +import { useParams, useNavigate } from "react-router-dom"; +import { axiosInstance } from "../api"; +import { useAppContext } from "../store"; +import { Calendar, Button } from 'antd'; +import dayjs from 'dayjs'; +import "../style/SelectSchedule.css"; export default function SelectSchedule() { - return
일정 선택 페이지
; + const { id } = useParams(); + const navigate = useNavigate(); + const { store: { jwtToken } } = useAppContext(); + const headers = { Authorization: jwtToken }; + + const [schedules, setSchedules] = useState([]); + const [selectedDateId, setSelectedDateId] = useState(null); + + useEffect(() => { + const fetchSchedules = async () => { + try { + const response = await axiosInstance.get(`/api/v1/performances/${id}/schedules`, { headers }); + setSchedules(response.data.data.content); + } catch (err) { + + } + }; + + fetchSchedules(); + }, [id, headers]); + + const disabledDate = (current) => { + const hasSchedule = schedules.some(schedule => schedule.startTime.startsWith(current.format('YYYY-MM-DD'))); + return !hasSchedule; + }; + + const monthCellRender = (value) => { + const month = value.month(); + const year = value.year(); + + const daysWithSchedules = schedules + .filter(schedule => { + const scheduleDate = dayjs(schedule.startTime); + return ( + scheduleDate.year() === year && + scheduleDate.month() === month + ); + }) + .map(schedule => schedule.date()); + + return ( +