/* eslint-disable react-hooks/exhaustive-deps */ /* eslint-disable @typescript-eslint/no-explicit-any */ /* eslint-disable no-irregular-whitespace */ import { Trans } from "react-i18next"; import useSidebarTabStore from "../stores/useSidebarStore"; import TimeSelector from "./TimeSelector"; import CloseIcon from "./icons/CloseIcon"; import { eachMinuteOfInterval, format, parse, parseISO } from "date-fns"; import i18n from "../i18n"; import { enUS, ru } from "date-fns/locale"; import ky from "ky"; import { useEffect, useState } from "react"; function SidebarTab2() { const [ currentTab, setCurrentTab, setIsOpen, setSelectedTime, selectedDay, selectedTime, buildId, ] = useSidebarTabStore((state) => [ state.currentTab, state.setCurrentTab, state.setIsOpen, state.setSelectedTime, state.selectedDay, state.selectedTime, state.buildId, ]); const [scheduledSessions, setScheduledSessions] = useState(); const [schedule, setSchedule] = useState<{ [key: string]: any }>(); const [scheduleTimes, setScheduleTimes] = useState(); function handleSelectTime(time: string) { setSelectedTime(time); setCurrentTab(currentTab + 1); } async function getSchedule() { if (!selectedDay) return; try { const result: { [key: string]: any } = await ky .get( `${import.meta.env.VITE_CRM_API_URL}/schedules/builds/${buildId}?date=${selectedDay.toISOString()}` ) .json(); setSchedule(result); } catch (error) { if (error instanceof Error) { console.log("Error: ", error.message); } } } function generateScheduleTimes() { if (!schedule || !scheduledSessions) return; const step = schedule.sessionDuration + schedule.sessionBreak; const times = eachMinuteOfInterval( { start: parse(schedule.startTime, "HH:mm", new Date()), end: parse(schedule.endTime, "HH:mm", new Date()), }, { step } ); const formatTimes = times.map((time) => ({ value: format(time, "HH:mm"), active: scheduledSessions.filter( (scheduledSession) => scheduledSession.startAt === time.toISOString() ).length < 3, })); setScheduleTimes(formatTimes); } async function getScheduledSessions() { if (!selectedDay) return; const result: any[] = await ky .get( `${import.meta.env.VITE_CRM_API_URL}/scheduled_sessions/builds/${buildId}?date=${selectedDay?.toISOString()}` ) .json(); setScheduledSessions(result); } useEffect(() => { getScheduledSessions(); }, [selectedDay]); useEffect(() => { if (!scheduledSessions) return; getSchedule(); }, [scheduledSessions]); useEffect(() => { generateScheduleTimes(); }, [schedule]); return (

Дата и время

{selectedDay && format( selectedDay, "dd MMMM", i18n.language === "ru" ? { locale: ru } : { locale: enUS } )}

Время

{scheduleTimes && scheduleTimes.length > 0 ? ( handleSelectTime(time)} /> ) : ( "Загрузка данных..." )}

Запись на демонстрацию работает в ознакомительном режиме и не сохраняет введенные данные

); } export default SidebarTab2;