67 lines
1.8 KiB
TypeScript
67 lines
1.8 KiB
TypeScript
![]() |
import { useState, useEffect } from "react";
|
||
|
import { useRouter } from "next/router";
|
||
|
import getSlots from "../../lib/slots";
|
||
|
|
||
|
const Slots = (props) => {
|
||
|
const router = useRouter();
|
||
|
const { user } = router.query;
|
||
|
const [slots, setSlots] = useState([]);
|
||
|
|
||
|
useEffect(() => {
|
||
|
setSlots([]);
|
||
|
fetch(
|
||
|
`/api/availability/${user}?dateFrom=${props.date.startOf("day").utc().format()}&dateTo=${props.date
|
||
|
.endOf("day")
|
||
|
.utc()
|
||
|
.format()}`
|
||
|
)
|
||
|
.then((res) => res.json())
|
||
|
.then(handleAvailableSlots);
|
||
|
}, [props.date]);
|
||
|
|
||
|
const handleAvailableSlots = (busyTimes: []) => {
|
||
|
const times = getSlots({
|
||
|
frequency: props.eventLength,
|
||
|
inviteeDate: props.date,
|
||
|
workingHours: props.workingHours,
|
||
|
minimumBookingNotice: 0,
|
||
|
});
|
||
|
|
||
|
// Check for conflicts
|
||
|
for (let i = times.length - 1; i >= 0; i -= 1) {
|
||
|
busyTimes.forEach((busyTime) => {
|
||
|
const startTime = dayjs(busyTime.start);
|
||
|
const endTime = dayjs(busyTime.end);
|
||
|
|
||
|
// Check if start times are the same
|
||
|
if (dayjs(times[i]).format("HH:mm") == startTime.format("HH:mm")) {
|
||
|
times.splice(i, 1);
|
||
|
}
|
||
|
|
||
|
// Check if time is between start and end times
|
||
|
if (dayjs(times[i]).isBetween(startTime, endTime)) {
|
||
|
times.splice(i, 1);
|
||
|
}
|
||
|
|
||
|
// Check if slot end time is between start and end time
|
||
|
if (dayjs(times[i]).add(props.eventType.length, "minutes").isBetween(startTime, endTime)) {
|
||
|
times.splice(i, 1);
|
||
|
}
|
||
|
|
||
|
// Check if startTime is between slot
|
||
|
if (startTime.isBetween(dayjs(times[i]), dayjs(times[i]).add(props.eventType.length, "minutes"))) {
|
||
|
times.splice(i, 1);
|
||
|
}
|
||
|
});
|
||
|
}
|
||
|
// Display available times
|
||
|
setSlots(times);
|
||
|
};
|
||
|
|
||
|
return {
|
||
|
slots,
|
||
|
};
|
||
|
};
|
||
|
|
||
|
export default Slots;
|