import React, { useState } from "react"; import HorizontalBarChart from "../Charts/HorizontalBarChart"; import LineChart from "../Charts/LineChart"; import { useProjects } from "../../hooks/useProjects"; import { useDashboard_Data, useDashboardProjectsCardData, useDashboardTeamsCardData, useDashboardTasksCardData, } from "../../hooks/useDashboard_Data"; const Dashboard = () => { const { projects, loading } = useProjects(); const [selectedProjectId, setSelectedProjectId] = useState("all"); const [range, setRange] = useState("1W"); const getDaysFromRange = (range) => { switch (range) { case "1D": return 1; case "1W": return 7; case "15D": return 15; case "1M": return 30; case "3M": return 90; case "1Y": return 365; case "5Y": return 1825; default: return 7; } }; const days = getDaysFromRange(range); const today = new Date(); const FromDate = today.toISOString().split("T")[0]; // Always today const { projectsCardData } = useDashboardProjectsCardData(); const { teamsCardData } = useDashboardTeamsCardData(); const { tasksCardData } = useDashboardTasksCardData(); const { dashboard_data, loading: isLineChartLoading } = useDashboard_Data({ days, FromDate, projectId: selectedProjectId === "all" ? 0 : selectedProjectId, }); // Sort dashboard_data by date ascending const sortedDashboardData = [...dashboard_data].sort( (a, b) => new Date(a.date) - new Date(b.date) ); // Bar chart logic const projectNames = projects?.map((p) => p.name) || []; const projectProgress = projects?.map((p) => { const completed = p.completedWork || 0; const planned = p.plannedWork || 1; const percent = (completed / planned) * 100; return Math.min(Math.round(percent), 100); }) || []; // Line chart data const lineChartSeries = [ { name: "Planned Work", data: sortedDashboardData.map((d) => d.plannedTask || 0), }, { name: "Completed Work", data: sortedDashboardData.map((d) => d.completedTask || 0), }, ]; const lineChartCategories = sortedDashboardData.map((d) => new Date(d.date).toLocaleDateString("en-US", { month: "short", day: "numeric", }) ); const lineChartCategoriesDates = sortedDashboardData.map((d) => new Date(d.date).toLocaleDateString("en-US", { month: "short", day: "numeric", year: "numeric", }) ); return (
Total Projects Overview
Progress Overview by Project