/* eslint-disable @typescript-eslint/no-explicit-any */ "use client"; import { Priority, Project, Task, useGetAuthUserQuery, useGetProjectsQuery, useGetTasksByUserQuery, } from "@/state/api"; import React from "react"; import { useAppSelector } from "../redux"; import { DataGrid, GridColDef } from "@mui/x-data-grid"; import Header from "@/app/components/Header"; import { Bar, BarChart, CartesianGrid, Cell, Legend, Pie, PieChart, ResponsiveContainer, Tooltip, XAxis, YAxis, } from "recharts"; import { dataGridSxStyles } from "@/lib/utils"; const taskColumns: GridColDef[] = [ { field: "title", headerName: "Title", width: 200 }, { field: "status", headerName: "Status", width: 150, renderCell: (params) => ( {params.value} ), }, { field: "priority", headerName: "Priority", width: 150, renderCell: (params) => ( {params.value} ), }, { field: "dueDate", headerName: "Due Date", width: 150 }, ]; const statusColors = ["#0088FE", "#00C49F", "#FFBB28", "#FF8042"]; const HomePage = () => { const { data: currentUser } = useGetAuthUserQuery({}); const userId = currentUser?.userDetails?.userId ?? null; const { data: tasks, isLoading: tasksLoading, isError: tasksError, } = useGetTasksByUserQuery(userId || "", { skip: userId === null, }); const { data: projects, isLoading: isProjectsLoading } = useGetProjectsQuery(); const isDarkMode = useAppSelector((state) => state.global.isDarkMode); if (tasksLoading || isProjectsLoading) return
Loading..
; if (tasksError || !tasks || !projects) return
Error fetching data
; const priorityCount = tasks.reduce( (acc: Record, task: Task) => { const { priority } = task; acc[priority as Priority] = (acc[priority as Priority] || 0) + 1; return acc; }, {}, ); const taskDistribution = Object.keys(priorityCount).map((key) => ({ name: key, count: priorityCount[key], })); const statusCount = projects.reduce( (acc: Record, project: Project) => { const status = project.endDate ? "Completed" : "Active"; acc[status] = (acc[status] || 0) + 1; return acc; }, {}, ); const projectStatus = Object.keys(statusCount).map((key) => ({ name: key, count: statusCount[key], })); const chartColors = isDarkMode ? { bar: "#8884d8", barGrid: "#303030", pieFill: "#4A90E2", text: "#FFFFFF", } : { bar: "#8884d8", barGrid: "#E0E0E0", pieFill: "#82ca9d", text: "#000000", }; return (

Task Priority Distribution

Project Status

{projectStatus.map((entry, index) => ( ))}

Your Tasks

row.taskId} getRowClassName={() => "data-grid-row"} getCellClassName={() => "data-grid-cell"} className="border border-gray-200 bg-white shadow dark:border-stroke-dark dark:bg-dark-secondary dark:text-gray-200" sx={dataGridSxStyles(isDarkMode)} />
); }; export default HomePage;