diff --git a/src/pages/transaction/approval-transaction/blocks/ListToolbar.tsx b/src/pages/transaction/approval-transaction/blocks/ListToolbar.tsx index d5b36ea..fd4ec89 100644 --- a/src/pages/transaction/approval-transaction/blocks/ListToolbar.tsx +++ b/src/pages/transaction/approval-transaction/blocks/ListToolbar.tsx @@ -3,6 +3,13 @@ import { useTransactionContext } from '../hooks/useApprovalTransactionContext'; import { Button } from '@/components/ui/button'; import { useCallback, useState, useEffect } from 'react'; import { toast } from 'sonner'; +import { + Select, + SelectContent, + SelectItem, + SelectTrigger, + SelectValue, +} from '@/components/ui/select'; const ListToolbar = () => { const { table, reload } = useDataGrid(); @@ -10,6 +17,18 @@ const ListToolbar = () => { // Set the initial state for trxDate const [trxDate, settrxDate] = useState({ from: '', to: '' }); + const [statusApproval, setStatusApproval] = useState( + (table.getColumn('status_approve')?.getFilterValue() as string) ?? '' + ); + + useEffect(() => { + const timer = setTimeout(() => { + table.getColumn('status_approve')?.setFilterValue(statusApproval); + table.setPageIndex(0); + }, 200); + return () => clearTimeout(timer); + }, [statusApproval, table]); + // Function to format date to YYYY-MM-DD const formatDate = (date: Date): string => { return date.toISOString().split('T')[0]; @@ -83,6 +102,22 @@ const ListToolbar = () => { /> + + - {/* */} + + + -
@@ -143,16 +168,20 @@ const ListToolbar = () => { const firstDayOfMonth = new Date(today.getFullYear(), today.getMonth(), 1); setSearchValue(''); - // setStatusValue(''); + setStatusValue(''); + setTypeValue(''); settrxDate({ from: formatDate(firstDayOfMonth), to: formatDate(today), }); - table.getColumn('code')?.setFilterValue(''); - // table.getColumn('status')?.setFilterValue(''); - table.setPageIndex(0); + table.setColumnFilters([ + { id: 'code', value: '' }, + { id: 'status', value: '' }, + { id: 'kind', value: '' }, + ]); + table.setPageIndex(0); reload(); }} > diff --git a/src/pages/transaction/history-transaction/hooks/TransactionContext.tsx b/src/pages/transaction/history-transaction/hooks/TransactionContext.tsx index 6b02b50..dba40bd 100644 --- a/src/pages/transaction/history-transaction/hooks/TransactionContext.tsx +++ b/src/pages/transaction/history-transaction/hooks/TransactionContext.tsx @@ -79,6 +79,25 @@ const TransactionProvider = ({ children }: { children: React.ReactNode }) => { headerClassName: 'w-[250px]' } }, + { + 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'; + default: return '_'; + } + }, + accessorKey: 'kind', + header: ({ column }) => , + enableSorting: false, + enableHiding: false, + meta: { + headerClassName: 'w-[250px]' + } + }, { accessorKey: 'transaction_date', header: ({ column }) => , @@ -249,11 +268,12 @@ const TransactionProvider = ({ children }: { children: React.ReactNode }) => { let startdate = firstDayOfMonth.toISOString().split('T')[0]; let enddate = today.toISOString().split('T')[0]; let transactioncode = ''; - // let transactionstatus = ''; + let transactionstatus = ''; + let type = '' if (Array.isArray(filter)) { + // console.log(filter); filter.forEach((f: any) => { - // console.log(f.id); if (f.id === 'transaction_date' && f.value?.from && f.value?.to) { startdate = f.value.from; enddate = f.value.to; @@ -263,25 +283,37 @@ const TransactionProvider = ({ children }: { children: React.ReactNode }) => { transactioncode = f.value; } - // if (f.id === 'status' && f.value) { - // transactionstatus = f.value; - // } + if (f.id === 'status' && f.value) { + transactionstatus = f.value; + } + + if (f.id === 'kind' && f.value) { + type = f.value; + } }); } - const formattedFilter = { + // Build filter object dynamically + const formattedFilter: any = { "Transactions.transaction_date": { from: `${startdate} 00:00:00`, to: `${enddate} 23:59:59` - }, - "Transactions.code": { - like: `%${transactioncode}%` - }, - // "Transactions.status": { - // like: `%${transactionstatus}%` - // } + } }; + if (transactioncode) { + formattedFilter["Transactions.code"] = { + like: `%${transactioncode}%` + }; + } + + if (transactionstatus) { + formattedFilter["Transactions.status"] = transactionstatus; + } + + if (type) { + formattedFilter["Transactions.kind"] = type; + } const response = await GetData(`${API_URL}/transaction/history`, { limit, @@ -302,7 +334,7 @@ const TransactionProvider = ({ children }: { children: React.ReactNode }) => { } catch (error) { console.error('Error fetching transaction', error); - return { data: [], totalCount: 0 }; // optional: fail-safe fallback + return { data: [], totalCount: 0 }; } };