/* eslint-disable @typescript-eslint/no-explicit-any */ /* eslint-disable react-hooks/exhaustive-deps */ /* eslint-disable no-irregular-whitespace */ import Button from "../Button"; import CloseIcon from "../icons/CloseIcon"; import Label from "../Label"; import { useEffect, useState } from "react"; import Select from "../Select"; import useModalStore from "../../stores/useModalStore"; import Input from "../Input"; import { addDays, eachMinuteOfInterval, parse, parseISO, startOfDay, } from "date-fns"; import api from "../../utils/api"; import ChoiceChips from "../ChoiceChips"; // import ISchedule from "../../types/ISchedule"; import DatePicker from "../DatePicker"; import IScheduledSession from "../../types/IScheduledSession"; import useStore from "../../stores/useStore"; import ISchedule from "../../types/ISchedule"; function CreateScheduleModal() { const { company, selectedBuild, schedules, setSchedules } = useStore(); const setModal = useModalStore((state) => state.setModal); const [date, setDate] = useState(startOfDay(new Date())); const [startDate, setStartDate] = useState(startOfDay(new Date())); const [sessionDuration, setSessionDuration] = useState(30); const [sessionBreak, setSessionBreak] = useState(5); const [startTime, setStartTime] = useState("10:00"); const [endTime, setEndTime] = useState("20:00"); const [weekends, setWeekends] = useState(["Сб", "Вс"]); const [sessionsPerDay, setSessionsPerDay] = useState(); async function getLastScheduledSessionDate() { try { const result: IScheduledSession | null = await api .get( `companies/${company?.id}/builds/${selectedBuild?.id}/last_scheduled_session` ) .json(); if (!result || !result.startAt) return; setStartDate(startOfDay(parseISO(result.startAt))); } catch (error) { alert((error as Error).message); } } useEffect(() => { getLastScheduledSessionDate(); }, []); function calculateSessionsPerDay() { // if (!startDate) return; const sessionsPerDay = eachMinuteOfInterval( { start: parse(startTime, "HH:mm", new Date()), end: parse(endTime, "HH:mm", new Date()), }, { step: sessionDuration + sessionBreak } ).length; setSessionsPerDay(sessionsPerDay); } function changeEndTime(value: string) { if (value.split(":")[0] > startTime.split(":")[0]) { setEndTime(value); } } async function addSchedule() { try { const result: ISchedule = await api .post( `companies/${company?.id}/builds/${selectedBuild?.id}/schedules`, { json: { startDate: date, startTime, endTime, weekends, sessionDuration, sessionBreak, sessionsPerDay, }, } ) .json(); setSchedules([...schedules, result]); } catch (error) { alert((error as Error).message); } } async function handleClickCreateSchedule() { await addSchedule(); setModal(null); } useEffect(() => { calculateSessionsPerDay(); }, [startDate, endTime, sessionDuration, sessionBreak, weekends]); return (

Создание расписания

Начало действия расписания

Максимальный доступный клиенту промежуток для записи — две календарные недели

Рабочее время

-

Выходные дни

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

setWeekends(options)} />

Продолжительность сеанса

Влияет на количество ежедневно проводимых сессий

setSessionBreak(value)} />
{/*

Статистика

*/}

Предварительный просмотр

Cеансов в день

{sessionsPerDay}

Длительность сеанса

{sessionDuration} мин.

Между сеансами

{sessionBreak} мин.

Время работы

{startTime} - {endTime}

{/*

Выходные дни

{weekends.map((value) => ( {value} ))}

*/}
); } export default CreateScheduleModal;