From 89cde512505b3efecb8559d78fc93d347ae74273 Mon Sep 17 00:00:00 2001
From: jhkang0516 <jhkang0516@ajou.ac.kr>
Date: Sun, 3 Dec 2023 22:30:49 +0900
Subject: [PATCH] [EDIT]

---
 react-whenMeet/src/App.js                     |   3 +-
 .../src/components/CalendarWeek.jsx           |  14 +-
 .../src/components/ResultEndForm.jsx          | 124 +++++++-----------
 .../src/components/ResultMakeForm.js          |  10 +-
 4 files changed, 66 insertions(+), 85 deletions(-)

diff --git a/react-whenMeet/src/App.js b/react-whenMeet/src/App.js
index 19633f1..c8a2f39 100644
--- a/react-whenMeet/src/App.js
+++ b/react-whenMeet/src/App.js
@@ -23,7 +23,8 @@ function App() {
         <Route path="/meetinginfo" element={<MeetingInfo />}></Route>
         <Route path="/result/:meeting_id" element={<ResultMake />}></Route>
         //결과확인페이지
-        <Route path="/resultend" element={<ResultEnd />}></Route>// 투표 종료
+        <Route path="/resultend/:meeting_id" element={<ResultEnd />}></Route>//
+        투표 종료
         <Route path="/" element={<HomeMake />}>
           {" "}
         </Route>
diff --git a/react-whenMeet/src/components/CalendarWeek.jsx b/react-whenMeet/src/components/CalendarWeek.jsx
index ceaf6b7..dc0d1a6 100644
--- a/react-whenMeet/src/components/CalendarWeek.jsx
+++ b/react-whenMeet/src/components/CalendarWeek.jsx
@@ -7,6 +7,7 @@ const CalendarWeek = ({
   participants,
   startDate,
   endDate,
+  currentParticipants,
   maxParticipants,
   hoveredInfo,
   setHoveredInfo,
@@ -18,6 +19,11 @@ const CalendarWeek = ({
   const [schedule, setSchedule] = useState({});
 
   const parseTime = (time) => {
+    // 자정("00:00:00")을 확인하여 48을 반환
+    if (time === "00:00:00") {
+      return 48;
+    }
+
     const [hours, minutes] = time.split(":").map(Number);
     return hours * 2 + (minutes >= 30 ? 1 : 0); // 30분 단위로 계산
   };
@@ -82,10 +88,14 @@ const CalendarWeek = ({
     setSchedule(newSchedule);
   }, [participants, startDate, endDate]);
 
-  const calculateOpacity = (dateString, timeString) => {
+  const calculateOpacity = (dateString, timeString, currentParticipants) => {
     const availableCount =
       schedule[dateString]?.filter((s) => s.time === timeString).length || 0;
-    return 100 - (availableCount / maxParticipants) * 100;
+
+    // currentParticipants가 0이거나 null일 경우를 대비해 기본값 1 설정
+    const participantsCount = currentParticipants || 1;
+
+    return 100 - (availableCount / participantsCount) * 100;
   };
 
   const handleMouseEnter = (dateString, timeString) => {
diff --git a/react-whenMeet/src/components/ResultEndForm.jsx b/react-whenMeet/src/components/ResultEndForm.jsx
index fb86702..dcf5b49 100644
--- a/react-whenMeet/src/components/ResultEndForm.jsx
+++ b/react-whenMeet/src/components/ResultEndForm.jsx
@@ -1,91 +1,51 @@
 import CalendarWeek from "./CalendarWeek";
-import React, { useState } from "react";
+import React, { useState, useEffect } from "react";
+import { useParams } from "react-router-dom";
 import "../styles/ResultEnd.css";
 import "../styles/CalendarWeek.css";
 export default function ResultEndForm() {
-  const meetingData = {
-    id: "1ag123jkF1",
-    title: "제목",
-    purpose: "STUDY",
-    startDate: "2023-12-20",
-    endDate: "2024-1-07",
-    currentParticipants: 2,
-    maxParticipants: 4,
-    voteExpiresAt: "2023-12-25T03:24:00",
-    isClosed: false,
-    participants: [
-      {
-        name: "test1",
-        availableSchedules: [
-          {
-            availableDate: "2023-12-20",
-            availableTimes: [6, 7, 8, 9, 14, 15, 16, 17],
-          },
-          {
-            availableDate: "2023-12-21",
-            availableTimes: [16, 17],
-          },
-          {
-            availableDate: "2023-12-22",
-            availableTimes: [24, 25, 26, 27, 28, 40, 41, 42],
-          },
-        ],
-      },
-      {
-        name: "test2",
-        availableSchedules: [
-          {
-            availableDate: "2023-12-22",
-            availableTimes: [38, 40],
-          },
-        ],
-      },
-      {
-        name: "test3",
-        availableSchedules: [
-          {
-            availableDate: "2023-12-22",
-            availableTimes: [38, 40, 41, 42],
-          },
-        ],
-      },
-      {
-        name: "test4",
-        availableSchedules: [
-          {
-            availableDate: "2023-12-22",
-            availableTimes: [38],
-          },
-        ],
-      },
-      {
-        name: "test5",
-        availableSchedules: [
-          {
-            availableDate: "2023-12-22",
-            availableTimes: [38],
-          },
-        ],
-      },
-      {
-        name: "test6",
-        availableSchedules: [
-          {
-            availableDate: "2023-12-22",
-            availableTimes: [38],
-          },
-        ],
-      },
-    ],
-  };
-
-  const [selectedDate, setSelectedDate] = useState("2023-12-22"); // 임의의 예시 값
+  const [meetingData, setMeetingData] = useState(null);
+  const [selectedDate, setSelectedDate] = useState("");
   const possibleDates = ["23.07.01 ~~~", "23.07.02 ~~~", "23.07.03 ~~~"];
   const [hoveredInfo, setHoveredInfo] = useState(null);
+  const { meeting_id } = useParams();
+  const purposeText = {
+    STUDY: "스터디",
+    MEETING: "회의",
+    PLAYING: "놀기",
+    FOOD: "식사",
+    ETC: "기타",
+  };
 
   const handleDateChange = (event) => {
     setSelectedDate(event.target.value);
   };
+  useEffect(() => {
+    const fetchMeetingData = async () => {
+      try {
+        const response = await fetch(`/meetings/${meeting_id}/details`);
+        if (!response.ok) {
+          throw new Error("API 호출 오류");
+        }
+        const data = await response.json();
+        setMeetingData(data);
+
+        setSelectedDate(
+          data.participants[0].availableSchedules[0].availableDate
+        );
+      } catch (error) {
+        console.error("API 호출 중 에러 발생:", error);
+      }
+    };
+
+    if (meeting_id) {
+      fetchMeetingData();
+    }
+  }, [meeting_id]);
+
+  if (!meetingData) {
+    return <div>로딩 중...</div>;
+  }
 
   return (
     <div
@@ -110,9 +70,10 @@ export default function ResultEndForm() {
       ) : (
         <span className="closedFalse">
           <p>
-            {meetingData.purpose}를 하는 다른 사람들은 주로 평일 낮 시간대에
-            많이 만나요
+            {meetingData.purpose && purposeText[meetingData.purpose]}를 하는
+            다른 사람들은 주로 평일 낮 시간대에 많이 만나요
           </p>
+
           <form className="form-container">
             {possibleDates.map((date, index) => (
               <label key={index}>
@@ -144,9 +105,12 @@ export default function ResultEndForm() {
           participants={meetingData.participants}
           startDate={meetingData.startDate}
           endDate={meetingData.endDate}
+          currentParticipants={meetingData.currentParticipants}
           maxParticipants={meetingData.maxParticipants}
           hoveredInfo={hoveredInfo}
           setHoveredInfo={setHoveredInfo}
+          availableVotingStartTime={meetingData.availableVotingStartTime}
+          availableVotingEndTime={meetingData.availableVotingEndTime}
         />
       </div>
       <div className="possible">
diff --git a/react-whenMeet/src/components/ResultMakeForm.js b/react-whenMeet/src/components/ResultMakeForm.js
index 1a5ad2f..d0d8cc7 100644
--- a/react-whenMeet/src/components/ResultMakeForm.js
+++ b/react-whenMeet/src/components/ResultMakeForm.js
@@ -96,12 +96,17 @@ function ResultMakeForm() {
       ) : (
         <div className="column-container">
           <h1 className="title-box">{meetingData?.title}</h1>
+
           <div>
-            현재 완료한 인원수 {currentParticipants} / {maxParticipants}
+            현재 완료한 인원수 {currentParticipants}
+            {maxParticipants != null && ` / ${maxParticipants}`}
           </div>
+
           <div>종료까지 남은 시간 {timeLeft}</div>
           <button onClick={handleEdit}>수정하기</button>
-          <button onClick={() => navigate("/resultend")}>투표 종료하기</button>
+          <button onClick={() => navigate(`/resultend/${meeting_id}`)}>
+            투표 종료하기
+          </button>
         </div>
       )}
       {meetingData && (
@@ -111,6 +116,7 @@ function ResultMakeForm() {
               participants={meetingData.participants}
               startDate={meetingData.startDate}
               endDate={meetingData.endDate}
+              currentParticipants={meetingData.currentParticipants}
               maxParticipants={meetingData.maxParticipants}
               hoveredInfo={hoveredInfo}
               setHoveredInfo={setHoveredInfo}
-- 
GitLab