From cf11e995ded9bed1bd8b307a1df19baef757be60 Mon Sep 17 00:00:00 2001 From: "kartik.sharma" Date: Fri, 23 May 2025 13:56:50 +0530 Subject: [PATCH] Move all the project-related code from the Dashboard component into a new component named 'Progress Overview by Project'. --- src/components/Dashboard/Dashboard.jsx | 136 +----------------- .../Dashboard/ProjectProgressChart.jsx | 126 ++++++++++++++++ 2 files changed, 129 insertions(+), 133 deletions(-) create mode 100644 src/components/Dashboard/ProjectProgressChart.jsx diff --git a/src/components/Dashboard/Dashboard.jsx b/src/components/Dashboard/Dashboard.jsx index a352f5a5..ce915566 100644 --- a/src/components/Dashboard/Dashboard.jsx +++ b/src/components/Dashboard/Dashboard.jsx @@ -8,53 +8,18 @@ import { useDashboardTeamsCardData, useDashboardTasksCardData, } from "../../hooks/useDashboard_Data"; +import ProjectProgressChart from "./ProjectProgressChart"; 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]; - const FromDate = today.toLocaleDateString('en-CA'); // Always today const { projectsCardData } = useDashboardProjectsCardData(); const { teamsCardData } = useDashboardTeamsCardData(); const { tasksCardData } = useDashboardTasksCardData(); - const { dashboard_data, loading: isLineChartLoading } = useDashboard_Data({ - days, - FromDate, - projectId: selectedProjectId === "all" ? null : 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 = @@ -65,31 +30,7 @@ const Dashboard = () => { 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 (
@@ -190,78 +131,7 @@ const Dashboard = () => { {/* Line Chart */}
-
-
- {/* Row 1: Title + Project Selector */} -
-
-
Project Progress
-

Progress Overview by Project

-
- -
- - -
    -
  • - -
  • - {projects?.map((project) => ( -
  • - -
  • - ))} -
-
-
- - {/* Row 2: Time Range Buttons */} -
- {["1D", "1W", "15D", "1M", "3M", "1Y", "5Y"].map((key) => ( - - ))} -
-
-
- -
-
+
diff --git a/src/components/Dashboard/ProjectProgressChart.jsx b/src/components/Dashboard/ProjectProgressChart.jsx new file mode 100644 index 00000000..e96b8a48 --- /dev/null +++ b/src/components/Dashboard/ProjectProgressChart.jsx @@ -0,0 +1,126 @@ +import React, { useState } from "react"; +import LineChart from "../Charts/LineChart"; +import { useProjects } from "../../hooks/useProjects"; +import { useDashboard_Data } from "../../hooks/useDashboard_Data"; + +const ProjectProgressChart = () => { + const { projects } = 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.toLocaleDateString('en-CA'); + + const { dashboard_data, loading: isLineChartLoading } = useDashboard_Data({ + days, + FromDate, + projectId: selectedProjectId === "all" ? null : selectedProjectId, + }); + + const sortedDashboardData = [...dashboard_data].sort( + (a, b) => new Date(a.date) - new Date(b.date) + ); + + 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 ( +
+
+ {/* Row 1: Title + Project Selector */} +
+
+
Project Progress
+

Progress Overview by Project

+
+ +
+ + +
    +
  • + +
  • + {projects?.map((project) => ( +
  • + +
  • + ))} +
+
+
+ + {/* Row 2: Time Range Buttons */} +
+ {["1D", "1W", "15D", "1M", "3M", "1Y", "5Y"].map((key) => ( + + ))} +
+
+
+ +
+
+ ); +}; + +export default ProjectProgressChart;