import React, { useState, useEffect } from "react"; import Chart from "react-apexcharts"; import { useExpenseType } from "../../hooks/masterHook/useMaster"; import { useSelector } from "react-redux"; import { useExpenseDataByProject } from "../../hooks/useDashboard_Data"; import { formatCurrency } from "../../utils/appUtils"; import { formatDate_DayMonth } from "../../utils/dateUtils"; import { useProjectName } from "../../hooks/useProjects"; import { useSelectedProject } from "../../slices/apiDataManager"; import { SpinnerLoader } from "../common/Loader"; const ExpenseByProject = () => { const projectId = useSelector((store) => store.localVariables.projectId); const [projectName, setProjectName] = useState("All Project"); const [range, setRange] = useState("12M"); const { projectNames, loading } = useProjectName(); const [selectedType, setSelectedType] = useState(""); const [viewMode, setViewMode] = useState("Category"); const [chartData, setChartData] = useState({ categories: [], data: [] }); const selectedProject = useSelectedProject(); const { ExpenseTypes, loading: typeLoading } = useExpenseType(); const { data: expenseApiData, isLoading } = useExpenseDataByProject( projectId, selectedType, range === "All" ? null : parseInt(range) ); useEffect(() => { if (selectedProject && projectNames?.length) { const project = projectNames.find((p) => p.id === selectedProject); setProjectName(project?.name || "All Project"); } else { setProjectName("All Project"); } }, [projectNames, selectedProject]); useEffect(() => { if (expenseApiData) { const categories = expenseApiData.map((item) => formatDate_DayMonth(item.monthName, item.year) ); const data = expenseApiData.map((item) => item.total); setChartData({ categories, data }); } else { setChartData({ categories: [], data: [] }); } }, [expenseApiData]); const getSelectedTypeName = () => { if (!selectedType) return "All Types"; const found = ExpenseTypes.find((t) => t.id === selectedType); return found ? found.name : "All Types"; }; const options = { chart: { type: "bar", toolbar: { show: false } }, plotOptions: { bar: { horizontal: false, columnWidth: "55%", borderRadius: 4 }, }, dataLabels: { enabled: true, formatter: (val) => formatCurrency(val) }, xaxis: { categories: chartData.categories, labels: { style: { fontSize: "12px" }, rotate: -45 }, }, yaxis: { labels: { formatter: (val) => formatCurrency(val), style: { fontSize: "12px", colors: "#555" }, }, }, tooltip: { y: { formatter: (val) => `${formatCurrency(val)} (${getSelectedTypeName()})`, }, }, annotations: { xaxis: [{ x: 0, strokeDashArray: 0 }] }, fill: { opacity: 1 }, colors: ["#2196f3"], }; const series = [ { name: getSelectedTypeName(), data: chartData.data, }, ]; return (
{projectName}