@@ -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)}
- />
+
-
+
{IsCreatedAble && (
)}
+
+ {/* 3-Dots Dropdown */}
+
+
+
+
+ -
+
+
+
+
+
+ -
+
+
+
+ -
+
+
+
+ -
+
+
+
+
+
@@ -163,6 +213,8 @@ const ExpensePage = () => {
filters={filters}
groupBy={groupBy}
searchText={searchText}
+ tableRef={tableRef}
+ onDataFiltered={setFilteredData}
/>
>
) : (