import { useEffect, useState } from "react"; import { getCompanies } from "@api/companiesApi"; import { getWeekSchedule } from "@api/scheduleApi"; import { getUsers } from "@api/usersApi"; import { PageHeader } from "@components/PageHeader"; import type { BackendPreference } from "@/types/backend"; import type { Company } from "@/types/companies"; import type { Schedule } from "@/types/schedule"; import type { Employee } from "@/types/users"; import styles from "./HomePage.module.scss"; type HomePageProps = { backendPreference: BackendPreference; onNavigate: (path: string) => void; }; export function HomePage({ backendPreference, onNavigate }: HomePageProps) { const [companies, setCompanies] = useState([]); const [schedules, setSchedules] = useState([]); const [users, setUsers] = useState([]); const [error, setError] = useState(""); const [isLoading, setIsLoading] = useState(true); useEffect(() => { let isMounted = true; async function loadDashboard() { setError(""); setIsLoading(true); try { const [companiesResponse, usersResponse, scheduleResponse] = await Promise.all([ getCompanies(backendPreference), getUsers(backendPreference), getWeekSchedule(backendPreference), ]); if (isMounted) { setCompanies(companiesResponse); setUsers(usersResponse); setSchedules(scheduleResponse.schedules); } } catch (loadError) { if (isMounted) { setError( loadError instanceof Error ? loadError.message : "Unable to load dashboard data", ); } } finally { if (isMounted) { setIsLoading(false); } } } void loadDashboard(); return () => { isMounted = false; }; }, [backendPreference]); const workingToday = new Set( schedules .filter( (schedule): schedule is Schedule & { user_id: number } => typeof schedule.user_id === "number" && Boolean(schedule.enter_time && !schedule.out_time), ) .map((schedule) => schedule.user_id), ).size; return ( <> {error ?

{error}

: null} {isLoading ?

Loading dashboard...

: null}
); }