import React, { useState } from "react"; import { EXPENSE_DRAFT, EXPENSE_REJECTEDBY, FREQUENCY_FOR_RECURRING, ITEMS_PER_PAGE, } from "../../utils/constants"; import { formatCurrency, useDebounce, } from "../../utils/appUtils"; import { formatUTCToLocalTime } from "../../utils/dateUtils"; import { ExpenseTableSkeleton } from "../Expenses/ExpenseSkeleton"; import ConfirmModal from "../common/ConfirmModal"; import { useNavigate } from "react-router-dom"; import { useSelector } from "react-redux"; import Error from "../common/Error"; import { useRecurringExpenseContext } from "../../pages/RecurringExpense/RecurringExpensePage"; import { useRecurringExpenseList } from "../../hooks/useExpense"; const RecurringExpenseList = ({ search }) => { const { setManageRequest, setVieRequest } = useRecurringExpenseContext(); const navigate = useNavigate(); const [IsDeleteModalOpen, setIsDeleteModalOpen] = useState(false); const [deletingId, setDeletingId] = useState(null); const SelfId = useSelector( (store) => store?.globalVariables?.loginUser?.employeeInfo?.id ); const recurringExpenseColumns = [ { key: "recurringPaymentUId", label: "Recurring Payment ID", align: "text-start ps-2", getValue: (e) => e?.recurringPaymentUId || "N/A", }, { key: "expenseCategory", label: "Category", align: "text-start", getValue: (e) => e?.expenseCategory?.name || "N/A", }, { key: "title", label: "Title", align: "text-start", getValue: (e) => e?.title || "N/A", }, { key: "strikeDate", label: "Strike Date", align: "text-start", getValue: (e) => e?.strikeDate ? formatUTCToLocalTime(e.strikeDate) : "N/A", }, { key: "amount", label: "Amount", align: "text-start", getValue: (e) => e?.amount ? `${e?.currency?.symbol || ""}${e.amount.toLocaleString()}` : "N/A", }, { key: "payee", label: "Payee", align: "text-start", getValue: (e) => e?.payee || "N/A", }, { key: "frequency", label: "Frequency", align: "text-start", getValue: (e) => e?.frequency !== undefined && e?.frequency !== null ? FREQUENCY_FOR_RECURRING[e.frequency] || "N/A" : "N/A", }, { key: "latestPRGeneratedAt", label: "Last Generation Date", align: "text-start", getValue: (e) => e?.latestPRGeneratedAt ? formatUTCToLocalTime(e.latestPRGeneratedAt) : "N/A", }, { key: "createdAt", label: "Next Generation Date", align: "text-start", getValue: (e) => e?.createdAt ? formatUTCToLocalTime(e.createdAt) : "N/A", }, { key: "status", label: "Status", align: "text-start", getValue: (e) => e?.status?.name || "N/A", }, ]; const [currentPage, setCurrentPage] = useState(1); const debouncedSearch = useDebounce(search, 500); const { data, isLoading, isError, error, isRefetching, refetch } = useRecurringExpenseList( ITEMS_PER_PAGE, currentPage, {}, true, debouncedSearch ); const recurringExpenseData = data?.data || []; const totalPages = data?.totalPages || 1; if (isError) { return ; } const header = [ "Template Name", "Frequency", "Next Generation Date", "Last Generation Date", "Status", "Action", ]; if (isLoading) return ; const canEditExpense = (recurringExpense) => { // return ( // (recurringExpense?.expenseStatus?.id === EXPENSE_DRAFT || // EXPENSE_REJECTEDBY.includes(recurringExpense?.expenseStatus.id)) && // recurringExpense?.createdBy?.id === SelfId // ); }; const canDeleteExpense = (request) => { return ( request?.expenseStatus?.id === EXPENSE_DRAFT && request?.createdBy?.id === SelfId ); }; const handleDelete = (id) => { setDeletingId(id); DeleteExpense( { id }, { onSettled: () => { setDeletingId(null); setIsDeleteModalOpen(false); }, } ); }; return ( <> {IsDeleteModalOpen && ( setIsDeleteModalOpen(false)} paramData={deletingId} /> )}
{recurringExpenseColumns.map((col) => ( ))} {recurringExpenseData.length > 0 ? ( recurringExpenseData.map((recurringExpense) => ( {recurringExpenseColumns.map((col) => ( ))} )) ) : ( )}
{col.label} Action
{col?.customRender ? col?.customRender(recurringExpense) : col?.getValue(recurringExpense)}
// setVieRequest({ // requestId: recurringExpense.id, // view: true, // }) // } > {/* Uncomment for edit/delete actions */}
  • setManageRequest({ IsOpen: true, RequestId: recurringExpense.id, }) } > Modify
  • { setIsDeleteModalOpen(true); setDeletingId(recurringExpense.id); }} > Delete

No Recurring Expense Found

{/* Pagination */} {totalPages > 1 && (
)}
); }; export default RecurringExpenseList;