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"; const ExpenseByProject = () => { const projectId = useSelector((store) => store.localVariables.projectId); const [range, setRange] = useState("12M"); const [selectedType, setSelectedType] = useState(""); const [viewMode, setViewMode] = useState("Category"); const [chartData, setChartData] = useState({ categories: [], data: [] }); const { ExpenseTypes, loading: typeLoading } = useExpenseType(); const { data: expenseApiData, isLoading } = useExpenseDataByProject( projectId, selectedType, range === "All" ? null : parseInt(range) ); 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 }, }, 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 (
{/* Header */}
Monthly Expense -

Detailed project expenses

{/* Range Buttons + Expense Dropdown */}
{["1M", "3M", "6M", "12M", "All"].map((item) => ( ))} {viewMode === "Category" && ( )}
{/* Chart */}
{isLoading ? (

Loading chart...

) : !expenseApiData || expenseApiData.length === 0 ? (
No data found
) : ( )}
); }; export default ExpenseByProject;