diff --git a/src/components/Expenses/ExpenseList.jsx b/src/components/Expenses/ExpenseList.jsx index 16e47489..c1bf72f0 100644 --- a/src/components/Expenses/ExpenseList.jsx +++ b/src/components/Expenses/ExpenseList.jsx @@ -1,4 +1,4 @@ -import React, { useState } from "react"; +import React, { useEffect, useState } from "react"; import { useDeleteExpense, useExpenseList } from "../../hooks/useExpense"; import Avatar from "../common/Avatar"; import { useExpenseContext } from "../../pages/Expense/ExpensePage"; @@ -24,7 +24,7 @@ import ExpenseFilterChips from "./ExpenseFilterChips"; import { defaultFilter } from "./ExpenseSchema"; import { useNavigate } from "react-router-dom"; -const ExpenseList = ({ filters, groupBy = "transactionDate", searchText }) => { +const ExpenseList = ({ filters, groupBy = "transactionDate", searchText, tableRef, onDataFiltered }) => { const [deletingId, setDeletingId] = useState(null); const [IsDeleteModalOpen, setIsDeleteModalOpen] = useState(false); const { @@ -46,6 +46,12 @@ const ExpenseList = ({ filters, groupBy = "transactionDate", searchText }) => { filters, debouncedSearch ); + + useEffect(() => { + if (onDataFiltered) { + onDataFiltered(data?.data ?? []); + } + }, [data, onDataFiltered]); const SelfId = useSelector( (store) => store?.globalVariables?.loginUser?.employeeInfo?.id @@ -258,7 +264,7 @@ const ExpenseList = ({ filters, groupBy = "transactionDate", searchText }) => { groupBy={groupBy} />
@@ -313,8 +319,8 @@ const ExpenseList = ({ filters, groupBy = "transactionDate", searchText }) => { >
{ + if (!expenses || expenses.length === 0) return; + + // Map export data + const exportData = expenses.map((item) => ({ + "Expense ID": item?.expenseUId ?? "-", + "Expense Category": item?.expenseCategory?.name ?? "-", + "Payment Mode": item?.paymentMode?.name ?? "-", + "Submitted By": `${item?.createdBy?.firstName ?? ""} ${item?.createdBy?.lastName ?? ""}`.trim() || "-", + "Submitted": item?.createdAt ? moment(item.createdAt).format("DD-MMM-YYYY") : "-", + "Amount": item?.amount?.toLocaleString() ?? "-", + "Currency": item?.currency?.currencyCode ?? "-", + "Status": item?.status?.name ?? "-", + "Project": item?.project?.name ?? "-", + })); + + // Define column order + const columns = [ + "Expense ID", + "Expense Category", + "Payment Mode", + "Submitted By", + "Submitted", + "Amount", + "Currency", + "Status", + "Project", + ]; + + switch (type) { + case "csv": + exportToCSV(exportData, "expenses", columns); + break; + + case "excel": + exportToExcel(exportData, "expenses", columns); + break; + + case "pdf": + exportToPDF(exportData, "expenses", columns); + break; + + case "print": + if (tableRef?.current) printTable(tableRef.current); + break; + + default: + console.warn("Unhandled export type:", type); + break; + } +}; + +export default handleExpenseExport; diff --git a/src/pages/Expense/ExpensePage.jsx b/src/pages/Expense/ExpensePage.jsx index e7ac3638..b2057f97 100644 --- a/src/pages/Expense/ExpensePage.jsx +++ b/src/pages/Expense/ExpensePage.jsx @@ -30,6 +30,7 @@ import { SearchSchema, } from "../../components/Expenses/ExpenseSchema"; import PreviewDocument from "../../components/Expenses/PreviewDocument"; +import handleExpenseExport from "../../components/PaymentRequest/handleExpenseExport"; // Context export const ExpenseContext = createContext(); @@ -70,6 +71,8 @@ const ExpensePage = () => { const IsViewSelf = useHasUserPermission(VIEW_SELF_EXPENSE); const { setOffcanvasContent, setShowTrigger } = useFab(); const [filterData, setFilterdata] = useState(defaultFilter); + const tableRef = useRef(null); + const [filteredData, setFilteredData] = useState([]); const removeFilterChip = (key, id) => { setFilters((prev) => { const updated = { ...prev }; @@ -114,6 +117,10 @@ const ExpensePage = () => { removeFilterChip, }; + const handleExport = (type) => { + handleExpenseExport(type, filteredData, tableRef); // <-- corrected + }; + return (
@@ -126,17 +133,19 @@ const ExpensePage = () => {
-
- setSearchText(e.target.value)} - /> +
+
+ setSearchText(e.target.value)} + /> +
-
+
{IsCreatedAble && ( )} + + {/* 3-Dots Dropdown */} +
+ + +
    +
  • + +
  • + +

  • + +
  • + +
  • + +
  • + +
  • + +
  • + +
  • +
+
+
@@ -163,6 +213,8 @@ const ExpensePage = () => { filters={filters} groupBy={groupBy} searchText={searchText} + tableRef={tableRef} + onDataFiltered={setFilteredData} /> ) : (