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}

{isManageExpense && (
3 ? "text-base":"text-lg" }`}>Project Spendings:{" "} {`(All Processed Payments)`}
3 ? "text-":"text-3xl" } text-md`}> {formatCurrency(data?.totalAmount)}
)}
{[ { title: "Pending Payment", count: data?.approvePending?.count, amount: data?.approvePending?.totalAmount, icon: "bx bx-rupee", iconColor: "text-primary", status: EXPENSE_STATUS.payment_pending, }, { title: "Pending Approve", count: data?.processPending?.count, amount: data?.processPending?.totalAmount, icon: "fa-solid fa-check", iconColor: "text-warning", status: EXPENSE_STATUS.approve_pending, }, { title: "Pending Review", count: data?.reviewPending?.count, amount: data?.reviewPending?.totalAmount, icon: "bx bx-search-alt-2", iconColor: "text-secondary", status: EXPENSE_STATUS.review_pending, }, { title: "Draft", count: data?.submited?.count, amount: data?.submited?.totalAmount, 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)} :""}
{" "} = 3 ? "text-xl" : "text-2xl"} text-gray-500`}> {item?.count }
))}
); }; export default ExpenseStatus;