diff --git a/src/components/Expenses/ExpenseList.jsx b/src/components/Expenses/ExpenseList.jsx index d2254193..4cbcce2c 100644 --- a/src/components/Expenses/ExpenseList.jsx +++ b/src/components/Expenses/ExpenseList.jsx @@ -11,6 +11,8 @@ import ConfirmModal from "../common/ConfirmModal"; import { useHasUserPermission } from "../../hooks/useHasUserPermission"; import { useSelector } from "react-redux"; + + const ExpenseList = ({ filters, groupBy = "transactionDate" }) => { const [deletingId, setDeletingId] = useState(null); const [IsDeleteModalOpen, setIsDeleteModalOpen] = useState(false); @@ -81,11 +83,74 @@ const ExpenseList = ({ filters, groupBy = "transactionDate" }) => { }, {}); }; + const expenseColumns = [ + { + key: "expensesType", + label: "Expense Type", + getValue: (e) => e.expensesType?.name || "N/A", + align:"text-start", + }, + { + key: "paymentMode", + label: "Payment Mode", + getValue: (e) => e.paymentMode?.name || "N/A", + align:"text-start" + }, + { + key: "paidBy", + label: "Paid By", + align:"text-start", + getValue: (e) => + `${e.paidBy?.firstName ?? ""} ${e.paidBy?.lastName ?? ""}`.trim() || "N/A", + customRender: (e) => ( +
+ + + {`${e.paidBy?.firstName ?? ""} ${e.paidBy?.lastName ?? ""}`.trim() || "N/A"} + +
+ ) + }, + { + key: "submitted", + label: "Submitted", + getValue: (e) => formatUTCToLocalTime(e?.createdAt), + isAlwaysVisible: true + }, + { + key: "amount", + label: "Amount", + getValue: (e) => ( + <> + {e?.amount} + + ), + isAlwaysVisible: true, + align: "text-end" + }, + { + key: "status", + label: "Status", + align:"text-center", + getValue: (e) => ( + + {e.status?.name || "Unknown"} + + ) + } + ]; + if (isInitialLoading) return ; if (isError) return
{error}
; const grouped = groupBy ? groupByField(data?.data ?? [], groupBy) : { All: data?.data ?? [] }; - const IsGroupedByDate = ["transactionDate","createdAt"].includes(groupBy) + const IsGroupedByDate = ["transactionDate", "createdAt"].includes(groupBy); + return ( <> {IsDeleteModalOpen && ( @@ -95,7 +160,7 @@ const ExpenseList = ({ filters, groupBy = "transactionDate" }) => { role="dialog" style={{ display: "block", - backgroundColor: "rgba(0,0,0,0.5)", + backgroundColor: "rgba(0,0,0,0.5)" }} aria-hidden="false" > @@ -117,48 +182,18 @@ const ExpenseList = ({ filters, groupBy = "transactionDate" }) => { - {![ groupBy].includes("expensesType") && ( - - )} - {![groupBy].includes("paymentMode") && ( - - )} - {![groupBy].includes("paidBy") && ( + {expenseColumns.map( + (col) => + (col.isAlwaysVisible || groupBy !== col.key) && ( + key={col.key} + className={`sorting d-table-cell`} + aria-sort="descending" + > +
{col.label}
+ + ) )} - - - {![groupBy].includes("status") && } @@ -166,51 +201,21 @@ const ExpenseList = ({ filters, groupBy = "transactionDate" }) => { {Object.entries(grouped).map(([group, expenses]) => ( - {expenses.map((expense) => ( - - {![groupBy].includes("expensesType") && ( - - )} - {![groupBy].includes("paymentMode") && ( - - )} - {![ groupBy].includes("paidBy") && ( - - )} - - - {![ groupBy].includes("status") && ( - + + {expenseColumns.map( + (col) => + (col.isAlwaysVisible || groupBy !== col.key) && ( + + ) )}
-
Expense Type
-
-
Payment Mode
-
-
Paid By
-
Submitted
AmountStatusAction
+ {IsGroupedByDate ? formatUTCToLocalTime(group) : group}
{expense.expensesType?.name || "N/A"}{expense.paymentMode?.name || "N/A"} -
- - - {`${expense.paidBy?.firstName ?? ""} ${ - expense.paidBy?.lastName ?? "" - }`.trim() || "N/A"} - -
-
{formatUTCToLocalTime(expense?.createdAt)} - - {expense?.amount} - - - {expense.status?.name || "Unknown"} - -
+ {col.customRender + ? col.customRender(expense) + : col.getValue(expense)} +
@@ -228,7 +233,7 @@ const ExpenseList = ({ filters, groupBy = "transactionDate" }) => { onClick={() => setManageExpenseModal({ IsOpen: true, - expenseId: expense.id, + expenseId: expense.id }) } > @@ -273,3 +278,4 @@ const ExpenseList = ({ filters, groupBy = "transactionDate" }) => { }; export default ExpenseList; +