) => {
+ setGroupFilter(e.target.value);
+ table.getColumn('group_name')?.setFilterValue(e.target.value);
};
return (
@@ -37,6 +37,13 @@ const ListToolbar = ({ createMember, onReload, isReloading }: ListToolbarProps)
onChange={handleUsernameChange}
className="input input-sm w-40"
/>
+
Full Name
-
{transactionDetails?.origin_customer.fullname}
+
+ {transactionDetails?.origin_customer?.fullname ?? "-"}
+
+
Amount
-
{new Intl.NumberFormat('en-US', { style: 'currency', currency: 'USD' }).format(transactionDetails?.purchase.amount)}
+
{new Intl.NumberFormat('en-US', { style: 'currency', currency: 'USD' }).format(transactionDetails?.purchase?.amount) ?? new Intl.NumberFormat('en-US', { style: 'currency', currency: 'USD' }).format(transactionDetails?.transfer.amount)}
Fee
@@ -292,7 +294,9 @@ const DetailApprovalTransaction = () => {
Full Name
-
{transactionDetails?.origin_customer.fullname}
+
+ {transactionDetails?.origin_customer?.fullname ?? "-"}
+
Amount
@@ -347,10 +351,10 @@ const DetailApprovalTransaction = () => {
{transactionDetails?.description}
-
-
Name
-
{transactionDetails?.type?.name || '-'}
-
+
+
Name
+
{transactionDetails?.type?.name || '-'}
+
Reference
@@ -370,19 +374,21 @@ const DetailApprovalTransaction = () => {
Full Name
-
{transactionDetails?.origin_customer.fullname}
+
+ {transactionDetails?.origin_customer?.fullname ?? "-"}
+
Phone Number
-
{transactionDetails?.origin_customer.msisdn}
+
{transactionDetails?.origin_customer?.msisdn ?? "-"}
Email
-
{transactionDetails?.origin_customer.email}
+
{transactionDetails?.origin_customer?.email ?? "-"}
Username
-
{transactionDetails?.origin_customer.username}
+
{transactionDetails?.origin_customer?.username ?? "-"}
@@ -391,24 +397,37 @@ const DetailApprovalTransaction = () => {
{activeTab === 'destinationcustomer' && (
Destination Customer
-
-
-
Name
-
{transactionDetails?.transfer.destination_customer.fullname}
+
+ {transactionDetails?.transfer?.destination_customer ? (
+
+
+
Name
+
+ {transactionDetails.transfer.destination_customer.fullname ?? "-"}
+
+
+
+
MSISDN
+
+ {transactionDetails.transfer.destination_customer.msisdn ?? "-"}
+
+
+
+
Email
+
+ {transactionDetails.transfer.destination_customer.email ?? "-"}
+
+
+
+
Username
+
+ {transactionDetails.transfer.destination_customer.username ?? "-"}
+
+
-
-
MSISDN
-
{transactionDetails?.transfer.destination_customer.msisdn}
-
-
-
Email
-
{transactionDetails?.transfer.destination_customer.email}
-
-
-
Username
-
{transactionDetails?.transfer.destination_customer.username}
-
-
+ ) : (
+
No data available
+ )}
)}
diff --git a/src/pages/transaction/disbursement-saldo/TransactionDisbursement.tsx b/src/pages/transaction/disbursement-saldo/TransactionDisbursement.tsx
index e608cd6..72c660d 100644
--- a/src/pages/transaction/disbursement-saldo/TransactionDisbursement.tsx
+++ b/src/pages/transaction/disbursement-saldo/TransactionDisbursement.tsx
@@ -4,10 +4,11 @@ import { Breadcrumbs, Link } from '@mui/material';
import { Helmet } from 'react-helmet';
import { Input } from '@/components/ui/input';
import { Button } from '@/components/ui/button';
-import { useState } from 'react';
+import { useState ,useEffect } from 'react';
import { useCallApi } from '@/hooks';
import { apiConfig } from '@/config/api.config';
import { toast } from 'sonner';
+import { getAuth } from '@/auth';
const TransactionDisbursement = () => {
const [form, setForm] = useState({
@@ -15,8 +16,28 @@ const TransactionDisbursement = () => {
amount: '',
pin: ''
});
+ const [wallets, setWallets] = useState([]);
const { GetData, PostData } = useCallApi();
+ const parsedUser = getAuth()?.user;
const API_URL = apiConfig.transaction;
+ const API_URL_WALLET = apiConfig.service_wallet
+
+ useEffect(() => {
+ const fetchWallets = async () => {
+ try {
+ const response = await GetData(`${API_URL_WALLET}/dashboard/balance/account/${parsedUser.customer.id}`, {});
+ if (response?.status === true) {
+ setWallets(response.data || []);
+ } else {
+ toast.warning(response?.message || 'Failed to fetch wallet data');
+ }
+ } catch (error) {
+ toast.warning('Failed to fetch wallet data');
+ }
+ };
+
+ fetchWallets();
+ }, []);
const handleSubmit = async (e: any) => {
e.preventDefault();
@@ -61,6 +82,20 @@ const TransactionDisbursement = () => {
Disbursement Saldo
+ {/* Wallet Section */}
+
+
Your Wallets
+
+ {wallets.map((wallet: any) => (
+
+
{wallet.wallet}
+
+ {new Intl.NumberFormat('en-US', { style: 'currency', currency: 'USD' }).format(wallet.amount)}
+
+
+ ))}
+
+
diff --git a/src/pages/transaction/history-transaction/blocks/DetailTransaction.tsx b/src/pages/transaction/history-transaction/blocks/DetailTransaction.tsx
index 6d774d7..079aaf6 100644
--- a/src/pages/transaction/history-transaction/blocks/DetailTransaction.tsx
+++ b/src/pages/transaction/history-transaction/blocks/DetailTransaction.tsx
@@ -120,11 +120,11 @@ const DetailTransaction = () => {
Full Name
-
{transactionDetails?.origin_customer.fullname}
+
{transactionDetails?.origin_customer?.fullname ?? "-"}
Amount
-
{new Intl.NumberFormat('en-US', { style: 'currency', currency: 'USD' }).format(transactionDetails?.purchase.amount)}
+
{new Intl.NumberFormat('en-US', { style: 'currency', currency: 'USD' }).format(transactionDetails?.purchase?.amount) ?? new Intl.NumberFormat('en-US', { style: 'currency', currency: 'USD' }).format(transactionDetails?.transfer.amount)}
Fee
@@ -291,7 +291,7 @@ const DetailTransaction = () => {
Full Name
-
{transactionDetails?.origin_customer.fullname}
+
{transactionDetails?.origin_customer?.fullname ?? "-"}
Amount
@@ -367,19 +367,19 @@ const DetailTransaction = () => {
Full Name
-
{transactionDetails?.origin_customer.fullname}
+
{transactionDetails?.origin_customer?.fullname ?? "-"}
Phone Number
-
{transactionDetails?.origin_customer.msisdn}
+
{transactionDetails?.origin_customer?.msisdn ?? "-"}
Email
-
{transactionDetails?.origin_customer.email}
+
{transactionDetails?.origin_customer?.email ?? "-"}
Username
-
{transactionDetails?.origin_customer.username}
+
{transactionDetails?.origin_customer?.username ?? "-"}
@@ -388,24 +388,37 @@ const DetailTransaction = () => {
{activeTab === 'destinationcustomer' && (
Destination Customer
-
-
-
Name
-
{transactionDetails?.transfer.destination_customer.fullname}
+
+ {transactionDetails?.transfer?.destination_customer ? (
+
+
+
Name
+
+ {transactionDetails.transfer.destination_customer.fullname ?? "-"}
+
+
+
+
MSISDN
+
+ {transactionDetails.transfer.destination_customer.msisdn ?? "-"}
+
+
+
+
Email
+
+ {transactionDetails.transfer.destination_customer.email ?? "-"}
+
+
+
+
Username
+
+ {transactionDetails.transfer.destination_customer.username ?? "-"}
+
+
-
-
MSISDN
-
{transactionDetails?.transfer.destination_customer.msisdn}
-
-
-
Email
-
{transactionDetails?.transfer.destination_customer.email}
-
-
-
Username
-
{transactionDetails?.transfer.destination_customer.username}
-
-
+ ) : (
+
No data available
+ )}
)}
@@ -430,7 +443,7 @@ const DetailTransaction = () => {
Destination Wallet
{!transactionDetails?.transfer ? (
-
No Data available
+
No Data available
) : (
diff --git a/src/pages/transaction/topup/TransactionTopup.tsx b/src/pages/transaction/topup/TransactionTopup.tsx
index 9552360..a05fb95 100644
--- a/src/pages/transaction/topup/TransactionTopup.tsx
+++ b/src/pages/transaction/topup/TransactionTopup.tsx
@@ -4,24 +4,46 @@ import { Breadcrumbs, Link } from '@mui/material';
import { Helmet } from 'react-helmet';
import { Input } from '@/components/ui/input';
import { Button } from '@/components/ui/button';
-import { useState } from 'react';
+import { useState, useEffect } from 'react';
import { useCallApi } from '@/hooks';
import { apiConfig } from '@/config/api.config';
import { toast } from 'sonner';
+import { getAuth } from '@/auth';
const TransactionTopup = () => {
const [form, setForm] = useState({
topupAmount: '',
pin: ''
});
+
+ const [wallets, setWallets] = useState([]);
const { GetData, PostData } = useCallApi();
+ const parsedUser = getAuth()?.user;
const API_URL = apiConfig.transaction;
+ const API_URL_WALLET = apiConfig.service_wallet
+
+ useEffect(() => {
+ const fetchWallets = async () => {
+ try {
+ const response = await GetData(`${API_URL_WALLET}/dashboard/balance/account/${parsedUser.customer.id}`, {});
+ if (response?.status === true) {
+ setWallets(response.data || []);
+ } else {
+ toast.warning(response?.message || 'Failed to fetch wallet data');
+ }
+ } catch (error) {
+ toast.warning('Failed to fetch wallet data');
+ }
+ };
+
+ fetchWallets();
+ }, []);
const handleSubmit = async (e: any) => {
e.preventDefault();
console.log('Submitted Data:', form);
- if (form.pin == '' || form.topupAmount) {
+ if (form.pin == '' || form.topupAmount == '') {
toast.warning('Please fill in all required fields.')
return
}
@@ -60,6 +82,20 @@ const TransactionTopup = () => {
Topup
+ {/* Wallet Section */}
+
+
Your Wallets
+
+ {wallets.map((wallet: any) => (
+
+
{wallet.wallet}
+
+ {new Intl.NumberFormat('en-US', { style: 'currency', currency: 'USD' }).format(wallet.amount)}
+
+
+ ))}
+
+
diff --git a/src/routing/AppRoutingSetup.tsx b/src/routing/AppRoutingSetup.tsx
index 786cd1e..fbb889e 100644
--- a/src/routing/AppRoutingSetup.tsx
+++ b/src/routing/AppRoutingSetup.tsx
@@ -42,9 +42,10 @@ import WalletRuleMaster from '@/pages/master/walletRule/WalletRuleMaster';
import WalletHistory from '@/pages/wallet/wallet-history/WalletHistory';
import WalletMaster from '@/pages/master/wallet/WalletMaster';
import CurrencyMaster from '@/pages/master/currency/CurrencyMaster';
+import FeedbackMemberMaster from '@/pages/members/feedback-member/FeedbackMember';
// DISBURSEMENT
-import HistoryTransactionDisbursement from '@/pages/disbursement/history-transaction/HistoryTransaction'
+import HistoryTransactionDisbursement from '@/pages/disbursement/history-transaction/HistoryTransaction';
// DISBURSEMENT
const AppRoutingSetup = (): ReactElement => {
@@ -84,6 +85,7 @@ const AppRoutingSetup = (): ReactElement => {
} />
} />
} />
+ } />
} />
@@ -98,8 +100,8 @@ const AppRoutingSetup = (): ReactElement => {
} />
} />
- } />
- } />
+ } />
+ } />
} />
} />
} />
@@ -112,9 +114,11 @@ const AppRoutingSetup = (): ReactElement => {
/>
{/* DISBURSEMENT */}
- } />
+ }
+ />
{/* DISBURSEMENT */}
-
} />