import type { Dayjs } from "@calcom/dayjs"; import dayjs from "@calcom/dayjs"; import { useOverlayCalendarStore } from "../Booker/components/OverlayCalendar/store"; function getCurrentTime(date: Date) { const hours = date.getHours().toString().padStart(2, "0"); const minutes = date.getMinutes().toString().padStart(2, "0"); return `${hours}:${minutes}`; } export function useCheckOverlapWithOverlay({ start, selectedDuration, offset, }: { start: Dayjs; selectedDuration: number | null; offset: number; }) { const overlayBusyDates = useOverlayCalendarStore((state) => state.overlayBusyDates); let overlappingTimeStart: string | null = null; let overlappingTimeEnd: string | null = null; const isOverlapping = overlayBusyDates && overlayBusyDates.some((busyDate) => { const busyDateStart = dayjs(busyDate.start); const busyDateEnd = dayjs(busyDate.end); const selectedEndTime = dayjs(start.add(offset, "hours")).add(selectedDuration ?? 0, "minute"); const isOverlapping = (selectedEndTime.isSame(busyDateStart) || selectedEndTime.isAfter(busyDateStart)) && start.add(offset, "hours") < busyDateEnd && selectedEndTime > busyDateStart; overlappingTimeStart = isOverlapping ? getCurrentTime(busyDateStart.toDate()) : null; overlappingTimeEnd = isOverlapping ? getCurrentTime(busyDateEnd.toDate()) : null; return isOverlapping; }); return { isOverlapping, overlappingTimeStart, overlappingTimeEnd } as { isOverlapping: boolean; overlappingTimeStart: string | null; overlappingTimeEnd: string | null; }; }