import { useCallback, useEffect, useRef, useState } from 'react'; import { NumericFormat } from 'react-number-format'; import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from '@/components/ui/select'; import { Dialog, DialogBody, DialogContent, DialogDescription, DialogHeader, DialogTitle } from '@/components/ui/dialog'; import { useManageTransferFeeContext } from '../hooks/useManageTransferFeeContext'; import { Input } from '@/components/ui/input'; import { Button } from '@/components/ui/button'; import { apiConfig } from '@/config/api.config'; import { Alert, Container, DataGridInner, KeenIcon, useDataGrid } from '@/components'; import { toast } from 'sonner'; import { useCallApi } from '@/hooks'; import { doSaveLogActivity } from '@/actions/GlobalActions'; import { getAuth } from '@/auth'; import { ManageTransferFeeContextProvider } from '../../transferfee/hooks/ManageTransferFeeContext'; import AddFeeDialog from '../../transferfee/blocks/AddDialog'; const API_URL = apiConfig.service_transaction; const API_URL_MASTERDATA = apiConfig.service_master_data; const API_URL_CUSTOMER = apiConfig.service_customer; interface WalletProps { Wallet_id: string; Wallet_name: string; } interface CustomerProps { id: string; username: string; msisdn: string; } interface TransactionTypeProps { id: string; name: string; } const EditFeeDialog = () => { const parentRef = useRef(null); const { showEditFeeDialog, handleEditFeeDialog, selectedTransferFee } = useManageTransferFeeContext(); const { reload } = useDataGrid(); const [wallets, setWallets] = useState([]); const { GetData, PutData } = useCallApi(); const [isSubmitting, setIsSubmitting] = useState(false); const [transactionTypes, setTransactionTypes] = useState([]); const parsedUser = getAuth()?.user; const [customers, setCustomers] = useState([]); const [alert, setAlert] = useState({ show: false, message: '' }); const [formField, setFormField] = useState({ name: '', description: '', minimum_amount: 0, maximum_amount: 0, period_start: '', period_end: '', deduct_amount: 0, deduct_percentage: 0, priority: '', status: '', status_include: '', transaction_type: '', updated_by: '', updated_at: '' }); useEffect(() => { const updated_time = new Date(); const formattedTime = updated_time.toISOString().slice(0, 19).replace('T', ' '); if (showEditFeeDialog) { setFormField({ ...formField, updated_by: parsedUser?.username, updated_at: formattedTime }); } }, [showEditFeeDialog]); /* actions */ const doUpdateTransferFee = useCallback( async (e: React.FormEvent) => { e.preventDefault(); const response = await PutData(`${API_URL}/transactionfees/update/${selectedTransferFee}`, { ...formField, }); if (response?.status) { handleEditFeeDialog(false, null); toast.success('Success Update User'); reload(); } else { setAlert((prev) => ({ ...prev, show: true, message: response?.message })); } }, [formField, selectedTransferFee] ); const fetchWallets = useCallback(async () => { const params = { limit: 100, page: 1, with_deleted: false, order_field: 'name', order_direction: 'ASC', filter: JSON.stringify({ status: 'Y' }) }; const response = await GetData(`${API_URL_MASTERDATA}/wallet/list`, params); if (response?.status && response?.data) { setWallets(response.data.list); } else { setWallets([]); } }, []); useEffect(() => { fetchWallets(); }, [fetchWallets]); useEffect(() => { if (!showEditFeeDialog) return; const getCustomerList = async (sorting: any) => { try { sorting = sorting.length === 0 ? [{ id: 'name', desc: false }] : sorting; const response = await GetData(`${API_URL_CUSTOMER}/customer/list`, { limit: 100, page: 1, with_deleted: false, order_field: sorting[0].id, order_direction: sorting[0].desc ? 'DESC' : 'ASC' }); setCustomers(response?.data.list || []); } catch (error) { console.error('Error fetching customer', error); } }; getCustomerList([{ id: 'msisdn', desc: false }]); }, []); useEffect(() => { if (!showEditFeeDialog) return; const getTransactionTypeList = async (sorting: any) => { try { sorting = sorting.length === 0 ? [{ id: 'name', desc: false }] : sorting; const response = await GetData(`${API_URL}/transactiontype/list`, { limit: 100, page: 1, with_deleted: false, order_field: sorting[0].id, order_direction: sorting[0].desc ? 'DESC' : 'ASC' }); // console.log('Transaction Type: ', response?.data.list); setTransactionTypes(response?.data.list); } catch (error) { console.error('Error fetching Transaction Type', error); } }; getTransactionTypeList([{ id: 'id', desc: false }]); }, [showEditFeeDialog]); const fetchTransactionFee = useCallback(async (id: string) => { const response = await GetData(`${API_URL}/transactionfees/getdata/${id}`, { id }); if (response?.status) { setFormField((prev) => ({ ...prev, name: response.data.name, description: response.data.description, minimum_amount: response.data.minimum_amount, maximum_amount: response.data.maximum_amount, period_start: response.data.period_start, period_end: response.data.period_end, deduct_amount: response.data.deduct_amount, deduct_percentage: response.data.deduct_percentage, priority: response.data.priority, status: response.data.status, status_include: response.data.status_include, transaction_type: response.data.transaction_type.id })); } }, []); useEffect(() => { if (selectedTransferFee) { fetchTransactionFee(selectedTransferFee); } }, [selectedTransferFee]); const resetForm = () => { setFormField({ name: '', description: '', minimum_amount: 0, maximum_amount: 0, period_start: '', period_end: '', deduct_amount: 0, deduct_percentage: 0, priority: '', status: '', status_include: '', transaction_type: '', updated_by: '', updated_at: '' }); }; return ( handleEditFeeDialog(open, null)}>

Update Transaction Fee

handleEditFeeDialog(false, null)} >
{alert.show && (

{alert.message}

)}
setFormField((prev) => ({ ...prev, name: target.value })) } />
setFormField((prev) => ({ ...prev, description: target.value })) } />
{ setFormField((prev) => ({ ...prev, minimum_amount: values.floatValue || 0 })); }} placeholder="Enter Minimum Amount" />
{ setFormField((prev) => ({ ...prev, maximum_amount: values.floatValue || 0 })); }} placeholder="Enter Minimum Amount" />
setFormField((prev) => ({ ...prev, period_start: target.value })) } />
setFormField((prev) => ({ ...prev, period_end: target.value })) } />
{ setFormField((prev) => ({ ...prev, deduct_amount: values.floatValue || 0 })); }} placeholder="Enter Minimum Amount" />
{ setFormField((prev) => ({ ...prev, deduct_percentage: values.floatValue || 0 })); }} placeholder="Enter Minimum Amount" />
{/*
*/} {/*
*/}
); }; export { EditFeeDialog };