import React, { useEffect, useState } from "react"; import { useExpense } from "../../hooks/useExpense"; import { useExpenseStatus } from "../../hooks/useDashboard_Data"; import { useSelectedProject } from "../../slices/apiDataManager"; import { useProjectName } from "../../hooks/useProjects"; import { countDigit, formatCurrency } from "../../utils/appUtils"; import { EXPENSE_MANAGE, EXPENSE_STATUS } from "../../utils/constants"; import { useNavigate } from "react-router-dom"; import { useHasUserPermission } from "../../hooks/useHasUserPermission"; const ExpenseStatus = () => { const [projectName, setProjectName] = useState("All Project"); const selectedProject = useSelectedProject(); const { projectNames, loading } = useProjectName(); const { data, isPending, error } = useExpenseStatus(selectedProject); const navigate = useNavigate(); const isManageExpense = useHasUserPermission(EXPENSE_MANAGE) useEffect(() => { if (selectedProject && projectNames?.length) { const project = projectNames.find((p) => p.id === selectedProject); setProjectName(project?.name || "All Project"); } else { setProjectName("All Project"); } }, [projectNames, selectedProject]); const handleNavigate = (status) => { if (selectedProject) { navigate(`/expenses/${status}/${selectedProject}`); } else { navigate(`/expenses/${status}`); } }; return ( <>
Expense - By Status

{projectName}

{[ { title: "Pending Payment", count: data?.processPending?.count || 0, amount: data?.processPending?.totalAmount || 0, icon: "bx bx-rupee", iconColor: "text-primary", status: EXPENSE_STATUS.payment_pending, }, { title: "Pending Approve", count: data?.approvePending?.count || 0, amount: data?.approvePending?.totalAmount || 0, icon: "fa-solid fa-check", iconColor: "text-warning", status: EXPENSE_STATUS.approve_pending, }, { title: "Pending Review", count: data?.reviewPending?.count || 0, amount: data?.reviewPending?.totalAmount || 0, icon: "bx bx-search-alt-2", iconColor: "text-secondary", status: EXPENSE_STATUS.review_pending, }, { title: "Draft", count: data?.draft?.count || 0, amount: data?.draft?.totalAmount || 0, icon: "bx bx-file-blank", iconColor: "text-info", status: EXPENSE_STATUS.daft, }, ].map((item, idx) => (
handleNavigate(item?.status)} >
{item?.title} {item?.amount ? ( {formatCurrency(item?.amount)} ) : ( {formatCurrency(0)} )}
= 3 ? "text-xl" : "text-xl" } text-gray-500`} > {item?.count || 0}
))}
{isManageExpense && (
handleNavigate(EXPENSE_STATUS.payment_processed)} >
3 ? "text-base" : "text-lg" }`} > Project Spendings: {" "} (All Processed Payments)
3 ? "text-xl" : "text-3xl" } text-md`} > {formatCurrency(data?.totalAmount || 0)}
)}
); }; export default ExpenseStatus;