// //결과 확인 페이지 // import React, { useState, useEffect } from "react"; // import CalendarWeek from "./CalendarWeek"; // import { useNavigate } from "react-router-dom"; // import "../styles/ResultMake.css"; // function ResultMakeForm() { // 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], // }, // ], // }, // ], // }; // const [title, setTitle] = useState(meetingData.title); // const [currentParticipants, setcurrentParticipands] = useState( // meetingData.currentParticipants // ); // const [maxParticipants, setmaxParticipants] = useState( // meetingData.maxParticipants // ); // const [timeLeft, setTimeLeft] = useState(""); // const navigate = useNavigate(); // const [hoveredInfo, setHoveredInfo] = useState(null); // // 타이머를 시작하고 관리하는 로직 // useEffect(() => { // const calculateTimeLeft = () => { // const now = new Date(); // const voteExpires = new Date(meetingData.voteExpiresAt); // const difference = voteExpires - now; // let timeLeft = {}; // if (difference > 0) { // timeLeft = { // days: Math.floor(difference / (1000 * 60 * 60 * 24)), // hours: Math.floor((difference / (1000 * 60 * 60)) % 24), // minutes: Math.floor((difference / 1000 / 60) % 60), // seconds: Math.floor((difference / 1000) % 60), // }; // } // return timeLeft; // }; // const updateTimer = () => { // const newTimeLeft = calculateTimeLeft(); // const formattedTime = `${ // newTimeLeft.days ? newTimeLeft.days + "일 " : "" // }${newTimeLeft.hours ? newTimeLeft.hours + "시간 " : ""}${ // newTimeLeft.minutes ? newTimeLeft.minutes + "분 " : "" // }${newTimeLeft.seconds ? newTimeLeft.seconds + "초" : ""}`; // setTimeLeft(formattedTime); // }; // updateTimer(); // const timerId = setInterval(updateTimer, 1000); // return () => clearInterval(timerId); // }, [meetingData.voteExpiresAt]); // const handleEdit = () => { // navigate("/meetinginfo/linkpage"); // }; // return ( // <> // <div className="column-container"> // <h1 className="title-box">{title}</h1> // <div> // 현재 완료한 인원수 {currentParticipants} / {maxParticipants} // </div> // <div>종료까지 남은 시간 {timeLeft}</div> // <button onClick={handleEdit}>수정하기</button> // <button // onClick={() => { // navigate("/resultend"); // }} // > // 투표 종료하기 // </button> // </div> // <span className="flex-row"> // <div className="calander-container"> // <CalendarWeek // participants={meetingData.participants} // startDate={meetingData.startDate} // endDate={meetingData.endDate} // maxParticipants={meetingData.maxParticipants} // hoveredInfo={hoveredInfo} // setHoveredInfo={setHoveredInfo} // /> // </div> // <span className="mostTime"> // <div style={{ textAlign: "center" }}> // 가장 많은 사람들이 가능한 일정 // </div> // <ol>//일정 5개 나열</ol> // </span> // <span className="possible"> // {!hoveredInfo && ( // <div> // <strong>가능한 사람들이 표시됩니다.</strong> // <p>마우스를 달력 위에 올려보세요!</p> // </div> // )} // {hoveredInfo && ( // <div style={{ textAlign: "center" }}> // <strong> // {hoveredInfo.date} {hoveredInfo.time}에 가능한 사람: // </strong> // <ul> // {hoveredInfo.participants.map((name) => ( // <li key={name}>{name}</li> // ))} // </ul> // </div> // )} // </span> // </span> // </> // ); // } // export default ResultMakeForm; //결과 확인 페이지 import React, { useState, useEffect } from "react"; import CalendarWeek from "./CalendarWeek"; import { useNavigate, useParams } from "react-router-dom"; import axios from "axios"; import "../styles/ResultMake.css"; function ResultMakeForm() { const [meetingData, setMeetingData] = useState(null); const { meeting_id } = useParams(); const { currentParticipants, maxParticipants } = meetingData || {}; const navigate = useNavigate(); const [timeLeft, setTimeLeft] = useState(""); const [hoveredInfo, setHoveredInfo] = useState(null); useEffect(() => { // 서버에서 미팅 데이터를 가져오는 함수 const fetchMeetingData = async () => { try { const response = await axios.get( `http://43.200.79.42:3000/meetings/${meeting_id}/details` ); setMeetingData(response.data); } catch (error) { console.error("데이터 로딩 에러:", error); } }; fetchMeetingData(); }, [meeting_id]); // 타이머를 시작하고 관리하는 로직 useEffect(() => { const calculateTimeLeft = () => { const now = new Date(); const voteExpires = new Date(meetingData.voteExpiresAt); const difference = voteExpires - now; let timeLeft = {}; if (difference > 0) { timeLeft = { days: Math.floor(difference / (1000 * 60 * 60 * 24)), hours: Math.floor((difference / (1000 * 60 * 60)) % 24), minutes: Math.floor((difference / 1000 / 60) % 60), seconds: Math.floor((difference / 1000) % 60), }; } return timeLeft; }; const updateTimer = () => { const newTimeLeft = calculateTimeLeft(); const formattedTime = `${ newTimeLeft.days ? newTimeLeft.days + "일 " : "" }${newTimeLeft.hours ? newTimeLeft.hours + "시간 " : ""}${ newTimeLeft.minutes ? newTimeLeft.minutes + "분 " : "" }${newTimeLeft.seconds ? newTimeLeft.seconds + "초" : ""}`; setTimeLeft(formattedTime); }; updateTimer(); const timerId = setInterval(updateTimer, 1000); return () => clearInterval(timerId); }, [meetingData.voteExpiresAt]); const handleEdit = () => { navigate("/meetinginfo/linkpage"); }; return ( <> <div className="column-container"> <h1 className="title-box">{meetingData.title}</h1> <div> 현재 완료한 인원수 {currentParticipants} / {maxParticipants} </div> <div>종료까지 남은 시간 {timeLeft}</div> <button onClick={handleEdit}>수정하기</button> <button onClick={() => { navigate("/resultend"); }} > 투표 종료하기 </button> </div> <span className="flex-row"> <div className="calander-container"> <CalendarWeek participants={meetingData.participants} startDate={meetingData.startDate} endDate={meetingData.endDate} maxParticipants={meetingData.maxParticipants} hoveredInfo={hoveredInfo} setHoveredInfo={setHoveredInfo} /> </div> <span className="mostTime"> <div style={{ textAlign: "center" }}> 가장 많은 사람들이 가능한 일정 </div> <ol>//일정 5개 나열</ol> </span> <span className="possible"> {!hoveredInfo && ( <div> <strong>가능한 사람들이 표시됩니다.</strong> <p>마우스를 달력 위에 올려보세요!</p> </div> )} {hoveredInfo && ( <div style={{ textAlign: "center" }}> <strong> {hoveredInfo.date} {hoveredInfo.time}에 가능한 사람: </strong> <ul> {hoveredInfo.participants.map((name) => ( <li key={name}>{name}</li> ))} </ul> </div> )} </span> </span> </> ); } export default ResultMakeForm;