From 6d7a1534ebb1f37160fbeda32e3b12a8dd0f6faf Mon Sep 17 00:00:00 2001 From: bagusajisaputroo Date: Mon, 14 Jul 2025 11:22:21 +0700 Subject: [PATCH] trying fix export filter --- .../blocks/ListToolbar.tsx | 48 +++--- .../hooks/TransactionContext.tsx | 138 ++++++++++-------- 2 files changed, 105 insertions(+), 81 deletions(-) diff --git a/src/pages/transaction/history-transaction/blocks/ListToolbar.tsx b/src/pages/transaction/history-transaction/blocks/ListToolbar.tsx index dee1b0f..e36d971 100644 --- a/src/pages/transaction/history-transaction/blocks/ListToolbar.tsx +++ b/src/pages/transaction/history-transaction/blocks/ListToolbar.tsx @@ -67,34 +67,44 @@ const ListToolbar = () => { table.setPageIndex(0); }, [trxDate, typeValue, typeSearchValue, searchValue, status, table]); - const exporDataToExcel = async ( - typeSearchValue: string, - searchValue: string, - trxDate: any, - typeValue: string, - status: string - ) => { - try { - const formattedFilter: any = { - "Transactions.transaction_date": { - from: `${trxDate.from} 00:00:00`, - to: `${trxDate.to} 23:59:59`, - }, + const exporDataToExcel = async ( + typeSearchValue: string, + searchValue: string, + trxDate: any, + typeValue: string, + status: string +) => { + try { + const formattedFilter: any = {}; + + // Tambahkan filter tanggal (selalu ada) + if (trxDate.from && trxDate.to) { + formattedFilter["Transactions.transaction_date"] = { + from: `${trxDate.from} 00:00:00`, + to: `${trxDate.to} 23:59:59`, }; + } + // Tambahkan filter berdasarkan searchType (sama seperti di search) + if (typeSearchValue && searchValue) { if (typeSearchValue === 'msisdn') { - formattedFilter['Transactions.origin_msisdn'] = searchValue; + formattedFilter['origin_customer.msisdn'] = { like: `%${searchValue}%` }; } else if (typeSearchValue === 'fullname') { - formattedFilter['Transactions.origin_name'] = searchValue; + formattedFilter['origin_customer.fullname'] = { like: `%${searchValue}%` }; } else if (typeSearchValue === 'trxid') { - formattedFilter['Transactions.code'] = searchValue; + formattedFilter['Transactions.code'] = { like: `%${searchValue}%` }; } + } - if (typeValue) { - formattedFilter['Transactions.kind'] = typeValue; - } + // Tambahkan filter jenis transaksi jika ada + if (typeValue) { + formattedFilter['Transactions.kind'] = typeValue; + } + // Tambahkan filter status jika ada + if (status) { formattedFilter['Transactions.status'] = status; + } const filterParam = encodeURIComponent(JSON.stringify(formattedFilter)); diff --git a/src/pages/transaction/history-transaction/hooks/TransactionContext.tsx b/src/pages/transaction/history-transaction/hooks/TransactionContext.tsx index ea12462..f078e67 100644 --- a/src/pages/transaction/history-transaction/hooks/TransactionContext.tsx +++ b/src/pages/transaction/history-transaction/hooks/TransactionContext.tsx @@ -36,11 +36,11 @@ interface ContextProps { const initialProps: ContextProps = { getTransactionLists: async () => ({ data: [], totalCount: 0 }), showDetailDialog: false, - setShowDetailDialog: () => { }, + setShowDetailDialog: () => {}, showRollbackDialog: false, - setShowRollbackDialog: () => { }, + setShowRollbackDialog: () => {}, selectedTransactionId: null, - setSelectedTransactionId: () => { } + setSelectedTransactionId: () => {} }; const ManageTransactionContext = createContext(initialProps); @@ -58,7 +58,6 @@ const TransactionProvider = ({ children }: { children: React.ReactNode }) => { const url = navigate(`${API_URL}/transaction/history/${path}`); }; - const handleShowDetail = (transactionId: any) => { setIsLoadingDetail(true); setSelectedTransactionId(transactionId); @@ -70,7 +69,6 @@ const TransactionProvider = ({ children }: { children: React.ReactNode }) => { }, 1000); // 500ms loading }; - const columns = useMemo[]>( () => [ { @@ -85,27 +83,48 @@ const TransactionProvider = ({ children }: { children: React.ReactNode }) => { { accessorFn: (row) => { switch (row.kind) { - case 'T': return 'TRANSFER'; - case 'P': return 'PURCHASE'; - case 'W': return 'WITHDRAW'; - case 'U': return 'TOP UP'; - case 'R': return 'RETURN'; - case 'N': return 'TOP UP PARTNER'; - case 'E': return 'REWARD'; - case 'L': return 'PURCHASE LOJA'; - case 'B': return 'TOP UP P24'; - case 'A': return 'TRANSFER AGENT'; - case 'M': return 'WITHDRAWAL AGENT'; - case 'O': return 'TOP UP AGENT'; - case 'S': return 'TRANSFER P24'; - case 'I': return 'WIJTDRAW MERCHANT'; - case 'D': return 'DONATION'; - case 'F': return 'FEE'; - case 'V': return 'REVERSAL'; - case 'C': return 'CASHBACK CASH'; - case 'H': return 'CASHBACK POINT'; - case 'J': return 'WITHDRAW ADMIN'; - default: return '_'; + case 'T': + return 'TRANSFER'; + case 'P': + return 'PURCHASE'; + case 'W': + return 'WITHDRAW'; + case 'U': + return 'TOP UP'; + case 'R': + return 'RETURN'; + case 'N': + return 'TOP UP PARTNER'; + case 'E': + return 'REWARD'; + case 'L': + return 'PURCHASE LOJA'; + case 'B': + return 'TOP UP P24'; + case 'A': + return 'TRANSFER AGENT'; + case 'M': + return 'WITHDRAWAL AGENT'; + case 'O': + return 'TOP UP AGENT'; + case 'S': + return 'TRANSFER P24'; + case 'I': + return 'WIJTDRAW MERCHANT'; + case 'D': + return 'DONATION'; + case 'F': + return 'FEE'; + case 'V': + return 'REVERSAL'; + case 'C': + return 'CASHBACK CASH'; + case 'H': + return 'CASHBACK POINT'; + case 'J': + return 'WITHDRAW ADMIN'; + default: + return '_'; } }, accessorKey: 'kind', @@ -153,7 +172,7 @@ const TransactionProvider = ({ children }: { children: React.ReactNode }) => { }, { accessorFn: (row) => { - const purchase = "T-PAY"; + const purchase = 'T-PAY'; const transfer = row?.transfer?.destination_name; return transfer ?? purchase; @@ -165,38 +184,42 @@ const TransactionProvider = ({ children }: { children: React.ReactNode }) => { enableSorting: false, enableHiding: false, meta: { - headerClassName: 'w-[250px]', - }, + headerClassName: 'w-[250px]' + } }, { accessorFn: (row) => { const purchaseAmount = row?.purchase?.amount; const transferAmount = row?.transfer?.amount; - return new Intl.NumberFormat('en-US', { style: 'currency', currency: 'USD' }).format(purchaseAmount ?? transferAmount ?? 0); + return new Intl.NumberFormat('en-US', { style: 'currency', currency: 'USD' }).format( + purchaseAmount ?? transferAmount ?? 0 + ); }, id: 'amount', header: ({ column }) => , enableSorting: false, enableHiding: false, meta: { - headerClassName: 'w-[250px]', - }, + headerClassName: 'w-[250px]' + } }, { accessorFn: (row) => { const purchaseAmount = row?.purchase?.fee_amount; const transferAmount = row?.transfer?.fee_amount; - return new Intl.NumberFormat('en-US', { style: 'currency', currency: 'USD' }).format(purchaseAmount ?? transferAmount ?? 0); + return new Intl.NumberFormat('en-US', { style: 'currency', currency: 'USD' }).format( + purchaseAmount ?? transferAmount ?? 0 + ); }, id: 'feeamount', header: ({ column }) => , enableSorting: false, enableHiding: false, meta: { - headerClassName: 'w-[250px]', - }, + headerClassName: 'w-[250px]' + } }, { accessorKey: 'status', @@ -204,7 +227,7 @@ const TransactionProvider = ({ children }: { children: React.ReactNode }) => { enableSorting: false, enableHiding: false, meta: { - headerClassName: 'w-[250px]', + headerClassName: 'w-[250px]' }, cell: ({ row }) => { const statusCode = row.original.status; @@ -247,7 +270,7 @@ const TransactionProvider = ({ children }: { children: React.ReactNode }) => { {label} ); - }, + } }, { accessorKey: 'description', @@ -279,7 +302,7 @@ const TransactionProvider = ({ children }: { children: React.ReactNode }) => {
)} -