Skip to content
Snippets Groups Projects
Select Git revision
  • main default protected
1 result

ResultMakeForm.js

Blame
  • ResultMakeForm.js 8.87 KiB
    import React, { useState, useEffect } from "react";
    import CalendarWeek from "./CalendarWeek";
    import PasswordModal from "./PasswordModal";
    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 navigate = useNavigate();
      const [timeLeft, setTimeLeft] = useState("");
      const [hoveredInfo, setHoveredInfo] = useState(null);
      const [isLoading, setIsLoading] = useState(true);
      const [isModalOpen, setIsModalOpen] = useState(false);
      const [mostAvailableDates, setMostAvailableDates] = useState([]);
      const [topAvailableDates, setTopAvailableDates] = useState([]);
    
      useEffect(() => {
        if (meetingData && meetingData.participants) {
          calculateTopAvailableDates();
        }
      }, [meetingData]);
    
      const calculateTopAvailableDates = () => {
        let dateAvailability = {};
    
        meetingData.participants.forEach((participant) => {
          participant.availableSchedules.forEach((schedule) => {
            if (!dateAvailability[schedule.availableDate]) {
              dateAvailability[schedule.availableDate] = {};
            }
            schedule.availableTimes.forEach((time) => {
              if (!dateAvailability[schedule.availableDate][time]) {
                dateAvailability[schedule.availableDate][time] = 0;
              }
              dateAvailability[schedule.availableDate][time]++;
            });
          });
        });
    
        let dateCounts = Object.entries(dateAvailability).map(([date, times]) => {
          let maxCount = Math.max(...Object.values(times));
          let count = Object.values(times).filter((val) => val === maxCount).length;
          return { date, count, maxCount };
        });
    
        dateCounts.sort((a, b) => b.maxCount - a.maxCount || b.count - a.count);
    
        setTopAvailableDates(dateCounts.slice(0, 5));
      };
    
      useEffect(() => {
        if (meetingData && meetingData.participants) {
          calculateMostAvailableDates();
        }
      }, [meetingData]);
    
      const calculateMostAvailableDates = () => {
        let dateAvailabilityCount = {};
    
        meetingData.participants.forEach((participant) => {
          participant.availableSchedules.forEach((schedule) => {
            if (!dateAvailabilityCount[schedule.availableDate]) {
              dateAvailabilityCount[schedule.availableDate] = new Set();
            }
            schedule.availableTimes.forEach((time) => {
              dateAvailabilityCount[schedule.availableDate].add(time);
            });
          });