feat(InterviewBookig): Added more CSS alignment)

This commit is contained in:
ahmad.ahmad1 2025-04-05 14:07:16 -06:00
parent 02e70c025e
commit 34e752feca
3 changed files with 104 additions and 57 deletions

View File

@ -21,12 +21,28 @@
flex-direction: column; flex-direction: column;
padding-left: var(--interviewspacing); padding-left: var(--interviewspacing);
padding-right: var(--interviewspacing); padding-right: var(--interviewspacing);
font-weight: 700; text-align: start;
}
#TimeDate {
display: flex;
flex-direction: row;
justify-content: center;
}
#TimeDate h4 {
padding-left: var(--interviewspacing);
padding-right: var(--interviewspacing);
text-align: start; text-align: start;
} }
#InterviewForm div label {
font-weight: 700;
}
#InterviewForm div p {
font-size: x-small;
margin: 0px;
}
#InterviewForm div input { #InterviewForm div input {
width: 20.3svw; width: 200px;
margin-top: 1svh; margin-top: 1svh;
height: 30px; height: 30px;
} }
@ -42,3 +58,12 @@
flex-direction: column; flex-direction: column;
text-align: center; text-align: center;
} }
#TimeSlotSelector {
display: flex;
flex-direction: row;
justify-content: center;
}
.TimeSlot {
padding-left: var(--interviewspacing);
padding-right: var(--interviewspacing);
}

View File

@ -76,7 +76,7 @@ const InterviewForm = () => {
<form onSubmit={formsubmit}> <form onSubmit={formsubmit}>
<div id="InterviewForm"> <div id="InterviewForm">
<div> <div>
<label for="name">Name (What to call you):</label> <label for="name">Name:</label>
<input <input
type="text" type="text"
id="fname" id="fname"
@ -84,6 +84,7 @@ const InterviewForm = () => {
placeholder="Jaeinceins" placeholder="Jaeinceins"
required required
/> />
<p>(what to call you)</p>
</div> </div>
<div> <div>
<label for="email">UCalgary Email:</label> <label for="email">UCalgary Email:</label>
@ -94,9 +95,13 @@ const InterviewForm = () => {
placeholder="jaeinceins.bhaja@ucalgary.ca" placeholder="jaeinceins.bhaja@ucalgary.ca"
required required
/> />
<p>(for interview confirmation email)</p>
</div> </div>
</div> </div>
<div id="TimeDate">
<h4>Interview Date</h4>
<h4>Interview Time</h4>
</div>
{/* Time Slot Selector */} {/* Time Slot Selector */}
<TimeDateSelector <TimeDateSelector
onTimeSlotSelect={(timeSlot) => setSelectedTimeSlot(timeSlot)} onTimeSlotSelect={(timeSlot) => setSelectedTimeSlot(timeSlot)}

View File

@ -1,12 +1,15 @@
import React, { useState, useEffect } from "react"; import React, { useState, useEffect } from "react";
import DatePicker from 'react-datepicker'; import DatePicker from "react-datepicker";
import "react-datepicker/dist/react-datepicker.css"; import "react-datepicker/dist/react-datepicker.css";
export default function TimeDateSelector ({ onTimeSlotSelect, timeDateSelectorGet }) { export default function TimeDateSelector({
onTimeSlotSelect,
timeDateSelectorGet,
}) {
const [allDatesAvailable, setAllDatesAvailable] = useState({}); const [allDatesAvailable, setAllDatesAvailable] = useState({});
const [selectedDate, setSelectedDate] = useState(null); const [selectedDate, setSelectedDate] = useState(null);
const [timeSlotsAvialable, setTimeSlotsAvialable] = useState([]); const [timeSlotsAvialable, setTimeSlotsAvialable] = useState([]);
const [selectedTime, setSelectedTime] = useState(''); const [selectedTime, setSelectedTime] = useState("");
useEffect(() => { useEffect(() => {
getInterviewDates(); getInterviewDates();
@ -44,30 +47,38 @@ export default function TimeDateSelector ({ onTimeSlotSelect, timeDateSelectorGe
* @author Brock <darkicewolf50@gmail.com> * @author Brock <darkicewolf50@gmail.com>
*/ */
const isDateAvailable = (date) => { const isDateAvailable = (date) => {
return Object.keys(allDatesAvailable).includes(date.toISOString().split('T')[0]); return Object.keys(allDatesAvailable).includes(
} date.toISOString().split("T")[0]
);
};
const handleDateChange = (date) => { const handleDateChange = (date) => {
setSelectedDate(date); // Capture the selected date in date object setSelectedDate(date); // Capture the selected date in date object
const selectedDateStr = date.toISOString().split('T')[0]; const selectedDateStr = date.toISOString().split("T")[0];
// get and set time slots for a given day // get and set time slots for a given day
setTimeSlotsAvialable(Object.keys(allDatesAvailable[selectedDateStr])); setTimeSlotsAvialable(Object.keys(allDatesAvailable[selectedDateStr]));
setSelectedTime(''); // clear because of date change setSelectedTime(""); // clear because of date change
}; };
const handleTimeSlotChange = (e) => { const handleTimeSlotChange = (e) => {
let startTime = e.target.innerHTML; let startTime = e.target.innerHTML;
setSelectedTime(startTime); setSelectedTime(startTime);
onTimeSlotSelect({"date": selectedDate.toLocaleDateString(), "startTime": selectedTime }); onTimeSlotSelect({
date: selectedDate.toLocaleDateString(),
startTime: selectedTime,
});
}; };
return ( return (
<div> <div id="TimeSlotSelector">
{Object.keys(allDatesAvailable).length > 0 ? ( {Object.keys(allDatesAvailable).length > 0 ? (
<> <>
<label htmlFor="date-picker"><h3>Select a Date:</h3></label> <div className="TimeSlot">
<label htmlFor="date-picker">
<h4>Select a Date:</h4>
</label>
<DatePicker <DatePicker
selected={selectedDate} selected={selectedDate}
onChange={handleDateChange} onChange={handleDateChange}
@ -76,6 +87,8 @@ export default function TimeDateSelector ({ onTimeSlotSelect, timeDateSelectorGe
dateFormat="yyyy-MM-dd" dateFormat="yyyy-MM-dd"
required // Make date selection required required // Make date selection required
/> />
</div>
<div className="TimeSlot">
{!selectedDate ? ( {!selectedDate ? (
<> <>
<h4>Available Time Slots:</h4> <h4>Available Time Slots:</h4>
@ -83,12 +96,17 @@ export default function TimeDateSelector ({ onTimeSlotSelect, timeDateSelectorGe
</> </>
) : ( ) : (
<> <>
<label htmlFor="time-picker"><h4>Available Time Slots for {selectedDate.toISOString().split('T')[0]}:</h4></label> <label htmlFor="time-picker">
<h4>
Available Time Slots for{" "}
{selectedDate.toISOString().split("T")[0]}:
</h4>
</label>
{selectedDate === undefined ? ( {selectedDate === undefined ? (
<> <>
<p>Please select a date.</p> <p>Please select a date.</p>
</> </>
) : timeSlotsAvialable !== '' ? ( ) : timeSlotsAvialable !== "" ? (
<> <>
{Object.values(timeSlotsAvialable).map((time) => { {Object.values(timeSlotsAvialable).map((time) => {
return ( return (
@ -109,10 +127,9 @@ export default function TimeDateSelector ({ onTimeSlotSelect, timeDateSelectorGe
<p>No available time slots for the selected date.</p> <p>No available time slots for the selected date.</p>
</> </>
)} )}
</> </>
)} )}
</div>
{/* {selectedDate && selectedTime && ( {/* {selectedDate && selectedTime && (
<div> <div>
<p> <p>
@ -124,9 +141,9 @@ export default function TimeDateSelector ({ onTimeSlotSelect, timeDateSelectorGe
</p> </p>
</div>)} */} </div>)} */}
</> </>
): ) : (
<p>Loading ...</p>} <p>Loading ...</p>
)}
</div> </div>
); );
}; }