import React, { useState, useEffect } from "react"; import DatePicker from 'react-datepicker'; import "react-datepicker/dist/react-datepicker.css"; export default function TimeDateSelector ({ onTimeSlotSelect, timeDateSelectorGet }) { const [allDatesAvailable, setAllDatesAvailable] = useState({}); const [selectedDate, setSelectedDate] = useState(null); const [timeSlotsAvialable, setTimeSlotsAvialable] = useState([]); const [selectedTime, setSelectedTime] = useState(''); useEffect(() => { getInterviewDates(); }, [timeDateSelectorGet]); /** * @param {null} null - Takes in nothing * @returns {null} null - Returns in nothing * @description Gets interview timeslots and dates from backend * @author Ahmad , Brock * @todo refactor to not call backend so much, see useEffect above */ const getInterviewDates = async () => { const res = await fetch( "https://bajabackend.bajacloud.duckdns.org/getAppointments", { method: "GET" } ); // const res = await fetch( // "http://127.0.0.1:8000/getAppointments", // { method: "GET" } // ); let json = await res.json(); // console.log(json); // can input dates right away, no other requirements to show it let dates = await json["body"]["interviewDates"]; setAllDatesAvailable(await dates); }; // helper section /** * @param {Date} date - Takes in a date object from the date picker * @returns {null} null - Returns in nothing * @description checks if date is available from the backend * @author Brock */ const isDateAvailable = (date) => { return Object.keys(allDatesAvailable).includes(date.toISOString().split('T')[0]); } const handleDateChange = (date) => { setSelectedDate(date); // Capture the selected date in date object const selectedDateStr = date.toISOString().split('T')[0]; // get and set time slots for a given day setTimeSlotsAvialable(Object.keys(allDatesAvailable[selectedDateStr])); setSelectedTime(''); // clear because of date change }; const handleTimeSlotChange = (e) => { let startTime = e.target.innerHTML; setSelectedTime(startTime); onTimeSlotSelect({"date": selectedDate.toLocaleDateString(), "startTime": selectedTime }); }; return (
{Object.keys(allDatesAvailable).length > 0 ? ( <> {!selectedDate ? ( <>

Available Time Slots:

Please select the a date to see time slots.

) : ( <> {selectedDate === undefined ? ( <>

Please select a date.

) : timeSlotsAvialable !== '' ? ( <> {Object.values(timeSlotsAvialable).map((time) => { return ( ); })} ) : ( <>

No available time slots for the selected date.

)} )} {/* {selectedDate && selectedTime && (

You have selected:
Date: {selectedDate.toLocaleDateString()}
Time: {selectedTime}

)} */} ):

Loading ...

}
); };