diff --git a/src/pages/dashboards/home/blocks/TransactionPieChart.tsx b/src/pages/dashboards/home/blocks/TransactionPieChart.tsx index 5e2f3b5..904b962 100644 --- a/src/pages/dashboards/home/blocks/TransactionPieChart.tsx +++ b/src/pages/dashboards/home/blocks/TransactionPieChart.tsx @@ -43,6 +43,7 @@ const TransactionPieChart = ({ startdate, enddate }: Props) => { { name: 'Purchase', value: parseFloat((responseTransactionValue?.data?.P ?? 0).toFixed(2)), color: '#baf7c5' }, { name: 'Withdraw', value: parseFloat((responseTransactionValue?.data?.W ?? 0).toFixed(2)), color: '#f56565' }, { name: 'Top Up Partner', value: parseFloat((responseTransactionValue?.data?.N ?? 0).toFixed(2)), color: '#f7fa52' }, + { name: 'Reward', value: parseFloat((responseTransactionValue?.data?.E ?? 0).toFixed(2)), color: '#f7fa52' }, ]; return ( diff --git a/src/pages/dashboards/home/blocks/TransactionValue.tsx b/src/pages/dashboards/home/blocks/TransactionValue.tsx index 5c69564..451decc 100644 --- a/src/pages/dashboards/home/blocks/TransactionValue.tsx +++ b/src/pages/dashboards/home/blocks/TransactionValue.tsx @@ -64,6 +64,9 @@ const TransactionValue = ({ startdate, enddate }: Props) => { case "N": type = "Top Up Partner"; break; + case "E": + type = "Reward"; + break; default: type = "Unknown"; break; diff --git a/src/pages/members/agent-balance/AgentBalance.tsx b/src/pages/members/agent-balance/AgentBalance.tsx new file mode 100644 index 0000000..024fb2f --- /dev/null +++ b/src/pages/members/agent-balance/AgentBalance.tsx @@ -0,0 +1,236 @@ +import { DataTable } from '@/components/ui/DataTable'; +import { getColumns } from './Column'; +import { apiConfig } from '@/config/api.config'; +import axios, { AxiosResponse } from 'axios'; +import { Helmet } from 'react-helmet'; +import { + DialogContent, + MenuItem, + Radio, + RadioGroup, + FormControlLabel, + FormControl, + Dialog, + DialogTitle, + Typography, + Button, + Box, + Breadcrumbs, + Link +} from '@mui/material'; +import { useState, useEffect } from 'react'; +import CloseIcon from '@mui/icons-material/Close'; +import Divider from '@mui/material/Divider'; +import ConfirmDialog from '@/components/confirm'; +import { toast } from 'sonner'; +import { Container, DataGridLoader, DataGridProvider, LoaderTransparant } from '@/components'; +import { ListToolBar } from './ListToolbar'; +import { RefreshCw } from 'lucide-react'; +import { setgroups } from 'process'; +const BASE_URL = apiConfig.service_customer; + +let initBalance = { + id: '', + msisdn: '', + fullname: '', + username: '', + agent_name: '', + balance_emoney: '', + balance_merchant: '', + balance_point: '', + balance_deposit: '' +}; + +const AgentBalance = () => { + const [isDialogOpen, setIsDialogOpen] = useState(false); + const [loading, setLoading] = useState(false); + const [dataBalance, setDataBalance] = useState([]); + const [formData, setFormData] = useState(initBalance); + const [pageIndex, setPageIndex] = useState(1); + const [pageSize, setPageSize] = useState(10); + const [dialogType, setDialogType] = useState(''); + const [dialogOpen, setDialogOpen] = useState(false); + const [isReloading, setIsReloading] = useState(false); + + useEffect(() => { + fetchAgentBalance(); + }, []); + + async function fetchAgentBalance(): Promise { + setIsReloading(true); + try { + let balances = await axios.get(`${BASE_URL}/customer/agent-balance`, { + params: { + limit: 20, + page: 1, + with_deleted: false, + order_field: 'created_at', + order_direction: 'DESC' + } + }); + let temp = 1; + let resBalance = balances.data.data.list.map((el: any) => { + el.no = temp++; + return el; + }); + setDataBalance(resBalance); + } catch (error: any) { + alert(error.message); + console.log(error); + } finally { + setIsReloading(false); + } + } + + const openDialog = () => setIsDialogOpen(true); + const closeDialog = () => { + setIsDialogOpen(false); + setFormData(initBalance); + }; + + function createGroup() { + setDialogType('create'); + openDialog(); + } + + const handleUpdate = (group: any) => { + setDialogType('update'); + setIsDialogOpen(true); + }; + + const handleReload = () => { + setIsReloading(true); + fetchAgentBalance(); + }; + + if (loading) return ; + + return ( + <> + + TPAY | Agent Balance + + + {/* setDialogOpen(false)} + title="Confirm Action" + content={''} + onYes={handleYes} + onNo={() => setDialogOpen(false)} + /> */} +

Agent Balances

+ + + Dashboard + + + + Members + + + + Agent Balances + + + +
+ {isReloading && ( + + )} + + } + layout={{ card: true }} + serverSide={false} + onRowSelectionChange={(selected, table: any) => { + const selectedRow = table.getSelectedRowModel().rows[0]; + if (selectedRow) handleUpdate(selectedRow.original); + }} + /> +
+ {/* */} + + {/* + +
+ + {dialogType === 'create' ? 'Create New Group' : 'Update Group'} + + + + +
+ +
+
+
+ + +
+
+ + + + } + label="Yes" + /> + } + label="No" + /> + + +
+
+ + +
+ +
+
+
+
*/} +
+ + ); +}; + +export default AgentBalance; diff --git a/src/pages/members/agent-balance/Column.tsx b/src/pages/members/agent-balance/Column.tsx new file mode 100644 index 0000000..a188e8b --- /dev/null +++ b/src/pages/members/agent-balance/Column.tsx @@ -0,0 +1,146 @@ +import { KeenIcon } from '@/components'; +import { Button } from '@/components/ui/button'; +import { ColumnDef } from '@tanstack/react-table'; +import { ArrowUpDown } from 'lucide-react'; +import moment from 'moment'; + +export type AgentBalance = { + id: string, + msisdn: string, + fullname: string, + username: string, + agent_name: string, + balance_emoney: string, + balance_merchant: string, + balance_point: string, + balance_deposit: string +}; + +export const getColumns = (handleUpdate: (data: any) => void): ColumnDef[] => [ + { + accessorKey: 'no', + header: ({ column }) => { + return ( + + ); + } + }, + { + accessorKey: 'msisdn', + header: ({ column }) => { + return ( + + ); + } + }, + { + accessorKey: 'fullname', + header: ({ column }) => { + return ( + + ); + } + }, + { + accessorKey: 'username', + header: ({ column }) => { + return ( + + ); + } + }, + { + accessorKey: 'agent_name', + header: ({ column }) => { + return ( + + ); + } + }, + { + accessorKey: 'balance_emoney', + header: ({ column }) => { + return ( + + ); + } + }, + { + accessorKey: 'balance_merchant', + header: ({ column }) => { + return ( + + ); + } + }, + { + accessorKey: 'balance_point', + header: ({ column }) => { + return ( + + ); + } + }, + { + accessorKey: 'balance_deposit', + header: ({ column }) => { + return ( + + ); + } + }, +]; diff --git a/src/pages/members/agent-balance/ListToolbar.tsx b/src/pages/members/agent-balance/ListToolbar.tsx new file mode 100644 index 0000000..5e9f421 --- /dev/null +++ b/src/pages/members/agent-balance/ListToolbar.tsx @@ -0,0 +1,82 @@ +import { DefaultTooltip, KeenIcon, useDataGrid } from '@/components'; +import { Button } from '@/components/ui/button'; +import React, { useState } from 'react'; + +interface ListToolBarProps { + createGroup: () => void; + onReload: () => void; + isReloading: boolean; +} + +const ListToolBar = ({ createGroup, onReload, isReloading }: ListToolBarProps) => { + const { table } = useDataGrid(); + const [usernameFilter, setUsernameFilter] = useState(''); + const [msisdn, setMsisdn] = useState(''); + const [fullname, setFullname] = useState(''); + const [merchantName, setMerchantName] = useState(''); + + const handleUsernameChange = (e: React.ChangeEvent) => { + setUsernameFilter(e.target.value); + table.getColumn('username')?.setFilterValue(e.target.value); + }; + + const filtermsisdn = (e: React.ChangeEvent) => { + setMsisdn(e.target.value); + table.getColumn('msisdn')?.setFilterValue(e.target.value); + }; + + const filterfullname = (e: React.ChangeEvent) => { + setFullname(e.target.value); + table.getColumn('fullname')?.setFilterValue(e.target.value); + }; + + const filtermerchantname = (e: React.ChangeEvent) => { + setMerchantName(e.target.value); + table.getColumn('agent_name')?.setFilterValue(e.target.value); + }; + + return ( +
+
+
+
+ + + + +
+
+ {/* */} + + + +
+
+
+
+ ); +}; + +export { ListToolBar }; diff --git a/src/pages/members/kyc-delete-member/blocks/DetailDialog.tsx b/src/pages/members/kyc-delete-member/blocks/DetailDialog.tsx index c50489f..47c0661 100644 --- a/src/pages/members/kyc-delete-member/blocks/DetailDialog.tsx +++ b/src/pages/members/kyc-delete-member/blocks/DetailDialog.tsx @@ -18,15 +18,37 @@ import { useManageKycDeletionContext } from '../hooks'; import { apiConfig } from '@/config/api.config'; import { useDataGrid } from '@/components'; import { useState } from 'react'; +import ConfirmDialog from '@/components/confirm'; const API_URL = apiConfig.service_customer; const DetailDialog = () => { const { showDetailDialog, setShowDetailDialog, detailKyc, handleApproveReject } = useManageKycDeletionContext(); const [genders] = useState([ { name: 'Male',id: 'M' }, { name: 'Female',id: 'F' }]) + const [dialogOpen, setDialogOpen] = useState(false); + const [dialogType, setDialogType] = useState(''); const { reload } = useDataGrid(); + async function handleYes() { + await handleApproveReject(detailKyc.id, dialogType) + setDialogOpen(false) + reload() + } + + function onSubmit(type:string) { + setDialogType(type) + setDialogOpen(true) + } + return ( + setDialogOpen(false)} + title="Confirm Action" + content={`Are you sure you want to ${dialogType === 'Y' ? 'Approve' : 'Reject'}?`} + onYes={handleYes} + onNo={() => setDialogOpen(false)} + /> Customer Deletion Details @@ -49,13 +71,15 @@ const DetailDialog = () => {
+ // await handleApproveReject(detailKyc.id, 'N') + // reload() + onSubmit('N') + }} variant="destructive" color="warning" disabled={detailKyc.status_approve==='Waiting Approval'?false:true}>Reject + // await handleApproveReject(detailKyc.id, 'Y') + // reload() + onSubmit('Y') + }} variant="default" color="primary" disabled={detailKyc.status_approve==='Waiting Approval'?false:true}>Approve
) : (
)} diff --git a/src/pages/members/kyc-delete-member/hooks/ManageKycDeletionContext.tsx b/src/pages/members/kyc-delete-member/hooks/ManageKycDeletionContext.tsx index e146b23..b994f5c 100644 --- a/src/pages/members/kyc-delete-member/hooks/ManageKycDeletionContext.tsx +++ b/src/pages/members/kyc-delete-member/hooks/ManageKycDeletionContext.tsx @@ -159,7 +159,8 @@ const ManageKycDeletionContextProvider = ({ children }: { children: React.ReactN }) if (approveReject?.status == true) { - toast.success('Success update status approval') + if (status_approve === 'Y') toast.success('Update status approve success') + if (status_approve === 'N') toast.success('Update status reject success') handleDetailDialog(false, null) } else { toast.warning(`${approveReject?.message}`) diff --git a/src/pages/members/manage-members/ManageMembers.tsx b/src/pages/members/manage-members/ManageMembers.tsx index 01d9785..3739311 100644 --- a/src/pages/members/manage-members/ManageMembers.tsx +++ b/src/pages/members/manage-members/ManageMembers.tsx @@ -18,7 +18,7 @@ const BASE_URL_CUSTOMER = apiConfig.service_customer; const BASE_URL = apiConfig.service_customer; const ManageMembers = () => { - const [loading, setLoading] = useState(false); + // const [loading, setLoading] = useState(false); const [members, setMembers] = useState([]); const [selectedMember, setSelectedMember] = useState(''); const [member, setMember] = useState(initialMember); @@ -28,6 +28,9 @@ const ManageMembers = () => { const [dialogType, setDialogType] = useState(''); const [groups, setGroups] = useState([]); const [isReloading, setIsReloading] = useState(false); + const [currentPage, setCurrentPage] = useState(0); + const [totalItems, setTotalItems] = useState(10); + const closeDialog = () => { setIsDialogOpen(false); setMember(initialMember); @@ -36,6 +39,7 @@ const ManageMembers = () => { useEffect(() => { fetchCustomers(); + fetchMasters(); }, []); async function fetchCustomers(): Promise { @@ -44,7 +48,7 @@ const ManageMembers = () => { let customers = await axios.get(`${BASE_URL}/customer/list`, { params: { limit: 30, - page: 1, + page: 1 + currentPage, with_deleted: false, order_field: 'created_at', order_direction: 'DESC' @@ -61,8 +65,17 @@ const ManageMembers = () => { return el; }); setMembers(resMembers); - // setIsReloading(false); + } catch (error: any) { + toast.error(error.message); + console.log(error); + } finally { + setIsReloading(false); + } + } + async function fetchMasters(): Promise { + setIsReloading(true); + try { let getProfession: any = await axios.get(`${BASE_URL_MASTER_DATA}/profession/list`, { params: { limit: 50, @@ -87,7 +100,6 @@ const ManageMembers = () => { toast.error(error.message); console.log(error); } finally { - // setLoading(false); setIsReloading(false); } } @@ -269,7 +281,7 @@ const ManageMembers = () => { )} ([]); const [groups, setGroups] = useState([]); const [identity_type] = useState([ - { id: 'eleitoral_id', name: 'Eleitoral ID' }, - { id: 'bihete_de_identidade', name: 'Bihete de Identidade' }, - { id: 'passport', name: 'Passport' }, + { id: 'Eleitoral ID', name: 'Eleitoral ID' }, + { id: 'Bihete de Identidade', name: 'Bihete de Identidade' }, + { id: 'Passport', name: 'Passport' }, ]); const [genders] = useState([ { name: 'Male',id: 'M' }, { name: 'Female',id: 'F' }]) const [previewImg, setPreviewImg] = useState({ @@ -162,8 +162,8 @@ const DetailMember = ({ showAddDialog, setShowAddDialog, handleSubmit, initialDa function buttonOnSubmit(e:any) { e.preventDefault(); if (dialogType === 'update') { - if (page === 'kyc' && formData.destinationGroup === "Premium" && !formData.approval_description_premium) return toast.warning(`Approval Premium Description needed!`) - if (page === 'kyc' && formData.destinationGroup === "Agent" && !formData.approval_description_premium) return toast.warning(`Approval Agent Description needed!`) + // if (page === 'kyc' && formData.destinationGroup === "Premium" && !formData.approval_description_premium) return toast.warning(`Approval Premium Description needed!`) + // if (page === 'kyc' && formData.destinationGroup === "Agent" && !formData.approval_description_premium) return toast.warning(`Approval Agent Description needed!`) if (!formData.msisdn||!formData.email||!formData.fullname||!formData.username||!formData.mother_fullname||!formData.address||!formData.nationality||!formData.date_birth||!formData.gender) { return toast.warning(`Required fields cannot be empty: msisdn, email, fullname, username, mother Full Name, Address, Nationality, Date Of Birth, Gender.!`) } diff --git a/src/pages/transaction/approval-transaction/blocks/DetailApprovalTransaction.tsx b/src/pages/transaction/approval-transaction/blocks/DetailApprovalTransaction.tsx index 319d75f..53541be 100644 --- a/src/pages/transaction/approval-transaction/blocks/DetailApprovalTransaction.tsx +++ b/src/pages/transaction/approval-transaction/blocks/DetailApprovalTransaction.tsx @@ -261,6 +261,8 @@ const DetailApprovalTransaction = () => { kind = 'TOP UP'; } else if (transactionDetails?.kind === 'R') { kind = 'RETURN'; + }else if (transactionDetails?.kind === 'E') { + kind = 'REWARD'; } return kind; })()} @@ -445,6 +447,8 @@ const DetailApprovalTransaction = () => { kind = 'TOP UP'; } else if (transactionDetails?.kind === 'R') { kind = 'RETURN'; + }else if (transactionDetails?.kind === 'E') { + kind = 'REWARD'; } return kind; })()} diff --git a/src/pages/transaction/history-transaction/blocks/DetailTransaction.tsx b/src/pages/transaction/history-transaction/blocks/DetailTransaction.tsx index 2862059..6a9dd4f 100644 --- a/src/pages/transaction/history-transaction/blocks/DetailTransaction.tsx +++ b/src/pages/transaction/history-transaction/blocks/DetailTransaction.tsx @@ -281,6 +281,8 @@ const DetailTransaction = () => { kind = 'TOP UP'; } else if (transactionDetails?.kind === 'R') { kind = 'RETURN'; + }else if (transactionDetails?.kind === 'E') { + kind = 'REWARD'; } return kind; })()} @@ -336,7 +338,7 @@ const DetailTransaction = () => { )} - {/* {activeTab === 'detail' && transactionDetails?.kind === 'P' && ( */} + {activeTab === 'detail' && (

Product Information @@ -389,7 +391,7 @@ const DetailTransaction = () => {

- {/* )} */} + )} {activeTab === 'detail' && transactionDetails?.kind != 'P' && transactionDetails?.transfer != null && (
@@ -461,6 +463,8 @@ const DetailTransaction = () => { kind = 'TOP UP'; } else if (transactionDetails?.kind === 'R') { kind = 'RETURN'; + }else if (transactionDetails?.kind === 'E') { + kind = 'REWARD'; } return kind; })()} @@ -492,11 +496,11 @@ const DetailTransaction = () => {

Full Name

-

{transactionDetails?.origin_customer?.fullname ?? transactionDetails?.origin_customer?.origin_name}

+

{transactionDetails?.origin_customer?.origin_name}

Phone Number

-

{transactionDetails?.origin_customer?.msisdn ?? transactionDetails?.origin_msisdn}

+

{transactionDetails?.origin_msisdn}

Email

diff --git a/src/pages/transaction/history-transaction/blocks/ListToolbar.tsx b/src/pages/transaction/history-transaction/blocks/ListToolbar.tsx index ef55958..342c24e 100644 --- a/src/pages/transaction/history-transaction/blocks/ListToolbar.tsx +++ b/src/pages/transaction/history-transaction/blocks/ListToolbar.tsx @@ -177,6 +177,7 @@ const ListToolbar = () => { TOP UP RETURN TOP UP PARTNER + REWARD diff --git a/src/pages/transaction/history-transaction/hooks/TransactionContext.tsx b/src/pages/transaction/history-transaction/hooks/TransactionContext.tsx index 5332a60..bfd2355 100644 --- a/src/pages/transaction/history-transaction/hooks/TransactionContext.tsx +++ b/src/pages/transaction/history-transaction/hooks/TransactionContext.tsx @@ -77,6 +77,7 @@ const TransactionProvider = ({ children }: { children: React.ReactNode }) => { case 'U': return 'TOP UP'; case 'R': return 'RETURN'; case 'N': return 'TOP UP PARTNER'; + case 'E': return 'REWARD'; default: return '_'; } }, diff --git a/src/pages/transfer/transfertype/blocks/AddDialog.tsx b/src/pages/transfer/transfertype/blocks/AddDialog.tsx index e164a1b..2c4ec65 100644 --- a/src/pages/transfer/transfertype/blocks/AddDialog.tsx +++ b/src/pages/transfer/transfertype/blocks/AddDialog.tsx @@ -559,6 +559,7 @@ const AddDialog = () => { Withdraw Top Up Top Up Patner + Reward {errors.status_kind && ( diff --git a/src/pages/transfer/transfertype/blocks/EditDialog.tsx b/src/pages/transfer/transfertype/blocks/EditDialog.tsx index 1fd1936..cf761c8 100644 --- a/src/pages/transfer/transfertype/blocks/EditDialog.tsx +++ b/src/pages/transfer/transfertype/blocks/EditDialog.tsx @@ -757,6 +757,7 @@ const EditDialog = () => { Withdraw Top Up Top Up Patner + Reward {errors.status_kind && ( diff --git a/src/pages/transfer/transfertype/blocks/ListToolBar.tsx b/src/pages/transfer/transfertype/blocks/ListToolBar.tsx index 3580abb..f1e90d5 100644 --- a/src/pages/transfer/transfertype/blocks/ListToolBar.tsx +++ b/src/pages/transfer/transfertype/blocks/ListToolBar.tsx @@ -43,7 +43,8 @@ const typeLabelMap: Record = { DM: 'Disbursment Master Agent', DA: 'Disbursment Agent', WI: 'Withdraw Merchant', - IC: 'Income Merchant' + IC: 'Income Merchant', + DN: 'Donation' }; const ListToolbar = () => { diff --git a/src/pages/transfer/transfertype/hooks/ManageTransferTypeContext.tsx b/src/pages/transfer/transfertype/hooks/ManageTransferTypeContext.tsx index afb3628..1614b59 100644 --- a/src/pages/transfer/transfertype/hooks/ManageTransferTypeContext.tsx +++ b/src/pages/transfer/transfertype/hooks/ManageTransferTypeContext.tsx @@ -276,7 +276,8 @@ const ManageTransferTypeContextProvider = ({ children }: { children: React.React P: { label: 'Purchase', className: 'bg-green-100 text-green-600' }, W: { label: 'Withdraw', className: 'bg-fuchsia-100 text-fuchsia-600' }, U: { label: 'Top Up', className: 'bg-yellow-100 text-yellow-600' }, - N: { label: 'Top Up Patner', className: 'bg-purple-100 text-purple-600' } + N: { label: 'Top Up Patner', className: 'bg-purple-100 text-purple-600' }, + E: {label: 'Reward', className: 'bg-rose-100 text-rose-600'} }; const kindInfo = mapping[kind] || { diff --git a/src/pages/wallet/wallet-history/blocks/ListToolbar.tsx b/src/pages/wallet/wallet-history/blocks/ListToolbar.tsx index b5775c1..6eb8298 100644 --- a/src/pages/wallet/wallet-history/blocks/ListToolbar.tsx +++ b/src/pages/wallet/wallet-history/blocks/ListToolbar.tsx @@ -19,6 +19,11 @@ interface WalletProps { name: string; } +interface GroupProps { + ID: string; + name: string; +} + const getOneMonthsAgo = () => { const today = new Date(); return new Date(today.getFullYear(), today.getMonth() - 1, today.getDate()); @@ -37,7 +42,11 @@ const ListToolbar = () => { const [walletId, setWalletId] = useState( (table.getColumn('id_wallet')?.getFilterValue() as string) ?? '' ); + const [groupId, setGroupId] = useState( + (table.getColumn('id_group')?.getFilterValue() as string) ?? '' + ); const [wallets, setWallets] = useState([]); + const [groups, setGroups] = useState([]); useEffect(() => { const today = new Date(); @@ -67,6 +76,11 @@ const ListToolbar = () => { table.setPageIndex(0); }, [walletId, table]); + useEffect(() => { + table.getColumn('id_group')?.setFilterValue(groupId); + table.setPageIndex(0); + }, [groupId, table]); + useEffect(() => { if (dateRange.from && dateRange.to) { handleFilterByDate(); @@ -88,8 +102,24 @@ const ListToolbar = () => { } }; + const fetchGroups = async () => { + try { + const response = await GetData(`${API_URL_WALLET}/dashboard/group/`, { + limit: 100, + page: 1, + with_deleted: false, + order_field: 'created_at', + order_direction: 'ASC' + }); + setGroups(response?.data.list || []); + } catch (error) { + console.error('Error fetching groups', error); + } + }; + useEffect(() => { fetchWallets(); + fetchGroups(); }, []); const handleClearAllFilters = () => { @@ -102,10 +132,12 @@ const ListToolbar = () => { setSearchValue(''); setWalletId(''); + setGroupId(''); setDateRange(resetDateRange); table.getColumn('msisdn')?.setFilterValue(''); table.getColumn('id_wallet')?.setFilterValue(''); + table.getColumn('id_group')?.setFilterValue(''); table.getColumn('CreatedAt')?.setFilterValue(resetDateRange); setTimeout(() => { @@ -114,7 +146,6 @@ const ListToolbar = () => { }, 0); }; - const handleRefresh = () => { const today = new Date(); const threeMonthsAgo = getOneMonthsAgo(); @@ -125,6 +156,7 @@ const ListToolbar = () => { setSearchValue(''); setWalletId(''); + setGroupId(''); setDateRange(resetDateRange); table.setColumnFilters([{ id: 'CreatedAt', value: resetDateRange }]); @@ -180,6 +212,22 @@ const ListToolbar = () => {
+ +
+ +
+