upd
This commit is contained in:
@@ -1,15 +1,7 @@
|
||||
/* eslint-disable react-hooks/exhaustive-deps */
|
||||
/* eslint-disable @typescript-eslint/no-explicit-any */
|
||||
import {
|
||||
eachMinuteOfInterval,
|
||||
format,
|
||||
parse,
|
||||
addDays,
|
||||
subDays,
|
||||
isEqual,
|
||||
} from "date-fns";
|
||||
import { format, addDays, subDays } from "date-fns";
|
||||
import { useEffect, useRef, useState } from "react";
|
||||
import TabButton from "../components/TabButton";
|
||||
import api from "../utils/api";
|
||||
import { ru } from "date-fns/locale";
|
||||
import useStore from "../stores/useStore";
|
||||
@@ -24,6 +16,7 @@ import ChevronRightIcon from "../components/icons/ChevronRightIcon";
|
||||
import IUser from "../types/IUser";
|
||||
import IError from "../types/IError";
|
||||
import Schedule from "../components/Schedule";
|
||||
import IScheduledSession from "../types/IScheduledSession";
|
||||
|
||||
function DashboardPage() {
|
||||
const { user } = useAuthStore();
|
||||
@@ -31,20 +24,19 @@ function DashboardPage() {
|
||||
company,
|
||||
setCompany,
|
||||
selectedBuild,
|
||||
setSelectedBuild,
|
||||
builds,
|
||||
setBuilds,
|
||||
managers,
|
||||
setManagers,
|
||||
schedules,
|
||||
setSchedules,
|
||||
selectedDay,
|
||||
setSelectedDay,
|
||||
} = useStore();
|
||||
const [, setDuration] = useState<number>();
|
||||
const [scheduledSessions, setScheduledSessions] = useState<any[]>();
|
||||
const [, setGeneratedScheduledSessions] = useState<any[]>();
|
||||
const [dateTimes, setDateTimes] = useState<Date[]>();
|
||||
// const [, setDuration] = useState<number>();
|
||||
const [scheduledSessions, setScheduledSessions] = useState<
|
||||
IScheduledSession[]
|
||||
>([]);
|
||||
// const [, setGeneratedScheduledSessions] = useState<any[]>();
|
||||
// const [dateTimes, setDateTimes] = useState<Date[]>();
|
||||
const [, setCurrentTime] = useState<string>(format(new Date(), "HH:mm"));
|
||||
const [, setIsLoadingScheduledSessions] = useState(true);
|
||||
const scheduledSessionsRef = useRef<HTMLDivElement>(null);
|
||||
@@ -61,78 +53,6 @@ function DashboardPage() {
|
||||
setSelectedDay(new Date());
|
||||
}
|
||||
|
||||
function findSessionsByTime(time: Date) {
|
||||
if (!scheduledSessions || !scheduledSessions.length) return [];
|
||||
|
||||
const foundScheduledSessions = scheduledSessions?.filter(
|
||||
(scheduledSession) => isEqual(new Date(scheduledSession.startAt), time)
|
||||
);
|
||||
|
||||
return foundScheduledSessions;
|
||||
}
|
||||
|
||||
function generateScheduledSessions() {
|
||||
if (!selectedBuild) return;
|
||||
|
||||
const newGeneratedScheduledSession: any[] = [];
|
||||
|
||||
dateTimes?.forEach((time) => {
|
||||
const foundSessionsByTime = findSessionsByTime(time);
|
||||
const sessions: any[] = [];
|
||||
|
||||
if (foundSessionsByTime) {
|
||||
sessions.push(...foundSessionsByTime);
|
||||
}
|
||||
|
||||
for (
|
||||
let index = 0;
|
||||
index < selectedBuild.sessionLimit - foundSessionsByTime.length;
|
||||
index++
|
||||
) {
|
||||
sessions.push({});
|
||||
}
|
||||
|
||||
newGeneratedScheduledSession.push({
|
||||
time,
|
||||
sessions,
|
||||
});
|
||||
});
|
||||
|
||||
setGeneratedScheduledSessions(newGeneratedScheduledSession);
|
||||
}
|
||||
|
||||
useEffect(() => {
|
||||
if (!scheduledSessions || !selectedBuild || !selectedDay) return;
|
||||
generateScheduledSessions();
|
||||
}, [scheduledSessions, selectedBuild, selectedDay]);
|
||||
|
||||
useEffect(() => {
|
||||
if (!schedules || !selectedDay || !selectedBuild) return;
|
||||
|
||||
console.log("schedules", schedules);
|
||||
|
||||
const foundSchedule = schedules.find(
|
||||
(schedule) => schedule.buildId === selectedBuild.id
|
||||
);
|
||||
|
||||
if (!foundSchedule) {
|
||||
setDateTimes([]);
|
||||
return;
|
||||
}
|
||||
|
||||
const step = foundSchedule.sessionDuration + foundSchedule.sessionBreak; // 35
|
||||
const newTimes = eachMinuteOfInterval(
|
||||
{
|
||||
start: parse(foundSchedule.startTime, "HH:mm", new Date(selectedDay)), // 11:00
|
||||
end: parse(foundSchedule.endTime, "HH:mm", new Date(selectedDay)), // 20:00
|
||||
},
|
||||
{ step }
|
||||
);
|
||||
|
||||
setDateTimes(newTimes);
|
||||
setDuration(foundSchedule.sessionDuration);
|
||||
}, [schedules, selectedDay, selectedBuild]);
|
||||
|
||||
async function getCompany() {
|
||||
if (!user) {
|
||||
console.log("No User", user);
|
||||
@@ -141,6 +61,7 @@ function DashboardPage() {
|
||||
|
||||
try {
|
||||
const result: any = await api.get(`companies/${user.companyId}`).json();
|
||||
|
||||
setCompany(result);
|
||||
} catch (error) {
|
||||
if (error instanceof Error) {
|
||||
@@ -159,6 +80,7 @@ function DashboardPage() {
|
||||
const result: any = await api
|
||||
.get(`companies/${user.companyId}/builds`)
|
||||
.json();
|
||||
|
||||
setBuilds(result);
|
||||
} catch (error) {
|
||||
if (error instanceof Error) {
|
||||
@@ -196,22 +118,19 @@ function DashboardPage() {
|
||||
return;
|
||||
}
|
||||
|
||||
if (!selectedBuild || !selectedBuild.id) {
|
||||
console.log("No selectedBuild");
|
||||
return;
|
||||
}
|
||||
|
||||
if (useLoader) setIsLoadingScheduledSessions(true);
|
||||
|
||||
try {
|
||||
const result: any = await api
|
||||
.get(
|
||||
`companies/${company.id}/builds/${
|
||||
selectedBuild.id
|
||||
`companies/${
|
||||
company.id
|
||||
}/scheduled_sessions?date=${selectedDay.toISOString()}`
|
||||
)
|
||||
.json();
|
||||
|
||||
console.log(result);
|
||||
|
||||
setScheduledSessions(result);
|
||||
} catch (error) {
|
||||
if (error instanceof Error) {
|
||||
@@ -222,44 +141,6 @@ function DashboardPage() {
|
||||
if (useLoader) setIsLoadingScheduledSessions(false);
|
||||
}
|
||||
|
||||
// async function updateScheduledSessionManager(
|
||||
// scheduledSessionId: string,
|
||||
// managerId: string | null
|
||||
// ) {
|
||||
// if (!company || !scheduledSessions) return;
|
||||
|
||||
// try {
|
||||
// const result: any = await api
|
||||
// .put(
|
||||
// `companies/${company.id}/scheduled_sessions/${scheduledSessionId}`,
|
||||
// {
|
||||
// json: { userId: managerId },
|
||||
// }
|
||||
// )
|
||||
// .json();
|
||||
|
||||
// setScheduledSessions(
|
||||
// scheduledSessions.map((scheduledSession) =>
|
||||
// scheduledSession.id === result.id ? result : scheduledSession
|
||||
// )
|
||||
// );
|
||||
// } catch (error) {
|
||||
// if (error instanceof Error) {
|
||||
// console.log("Error: ", error.message);
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
|
||||
async function getSchedules() {
|
||||
if (!company || !selectedBuild) return;
|
||||
|
||||
const result: any[] = await api
|
||||
.get(`companies/${company.id}/builds/${selectedBuild.id}/schedules`)
|
||||
.json();
|
||||
|
||||
setSchedules(result);
|
||||
}
|
||||
|
||||
useEffect(() => {
|
||||
getCompany();
|
||||
|
||||
@@ -274,16 +155,19 @@ function DashboardPage() {
|
||||
|
||||
useEffect(() => {
|
||||
if (!company) return;
|
||||
|
||||
getBuilds();
|
||||
}, [company]);
|
||||
|
||||
useEffect(() => {
|
||||
if (!builds) return;
|
||||
setSelectedBuild(builds[0]);
|
||||
|
||||
getManagers();
|
||||
}, [builds]);
|
||||
|
||||
useEffect(() => {
|
||||
if (!managers || !selectedDay || !selectedBuild) return;
|
||||
if (!managers || !selectedDay || !company || !builds) return;
|
||||
|
||||
getScheduledSessions(true);
|
||||
|
||||
const interval = setInterval(() => {
|
||||
@@ -293,35 +177,17 @@ function DashboardPage() {
|
||||
return () => {
|
||||
clearInterval(interval);
|
||||
};
|
||||
}, [managers, selectedDay, selectedBuild]);
|
||||
|
||||
useEffect(() => {
|
||||
if (!company || !selectedBuild) return;
|
||||
|
||||
getSchedules();
|
||||
getManagers();
|
||||
}, [selectedBuild]);
|
||||
}, [managers, selectedDay, company, builds]);
|
||||
|
||||
useEffect(() => {
|
||||
scheduledSessionsRef.current?.scrollTo({ top: 0, behavior: "smooth" });
|
||||
}, [selectedDay, selectedBuild]);
|
||||
}, [selectedDay]);
|
||||
|
||||
return (
|
||||
<div className="flex h-screen main">
|
||||
<div className="flex flex-col w-full left">
|
||||
<div className="flex bg-[#F0F1F2]">
|
||||
<Menu />
|
||||
{builds?.map((build) => (
|
||||
<TabButton
|
||||
key={build.id}
|
||||
handleClick={() => setSelectedBuild(build)}
|
||||
active={
|
||||
(selectedBuild && build.id === selectedBuild?.id) || false
|
||||
}
|
||||
>
|
||||
{build.name}
|
||||
</TabButton>
|
||||
))}
|
||||
</div>
|
||||
|
||||
<div className="flex justify-between items-center px-4 py-2 h-12 border-r border-b border-[#DAE0E5]">
|
||||
@@ -436,10 +302,10 @@ function DashboardPage() {
|
||||
)}
|
||||
</div> */}
|
||||
|
||||
{selectedBuild?.sessionLimit && scheduledSessions && (
|
||||
{company && scheduledSessions && (
|
||||
<Schedule
|
||||
selectedDay={selectedDay}
|
||||
slots={selectedBuild.sessionLimit}
|
||||
slots={company.sessionLimit}
|
||||
events={scheduledSessions}
|
||||
/>
|
||||
)}
|
||||
|
||||
Reference in New Issue
Block a user