import { useCallApi } from '@/hooks'; import { useManageWalletContext } from '../hooks/useManageWalletContext'; import { Alert, useDataGrid } from '@/components'; import React, { useCallback, useEffect, useState } from 'react'; import { apiConfig } from '@/config/api.config'; import { toast } from 'sonner'; import { Dialog, DialogBody, DialogContent, DialogDescription, DialogHeader, DialogTitle } from '@/components/ui/dialog'; import { Input } from '@/components/ui/input'; import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from '@/components/ui/select'; import { Button } from '@/components/ui/button'; import { Checkbox } from '@/components/ui/checkbox'; import { doSaveLogActivity } from '@/actions/GlobalActions'; import { RefreshCw } from 'lucide-react'; interface CurrencyProps { ID: string; code: string; name: string; prefix: string; status: string; } interface GroupProps { id: string; name: string; description: string; status: string; } const API_URL_WALLET = apiConfig.service_wallet; const API_URL_MASTER_DATA = apiConfig.service_master_data; const AddDialog = () => { const { showAddDialog, handleAddDialog, selectedWallet } = useManageWalletContext(); const { GetData, PostData } = useCallApi(); const { reload } = useDataGrid(); const [alert, setAlert] = useState({ show: false, message: '' }); const initialState: { name: string; description: string; status: string; group: string[]; id_currency: string; } = { name: '', description: '', status: '', group: [], id_currency: '' }; const [formField, setFormField] = useState(initialState); const [isSubmitting, setIsSubmitting] = useState(false); const [currencies, setCurrencies] = useState([]); const [groups, setGroups] = useState([]); const resetForm = () => { setFormField(initialState); setAlert({ show: false, message: '' }); }; const handleGroupChange = (groupId: string) => { setFormField((prevState) => { const isSelected = prevState.group.includes(groupId); if (isSelected) { // Remove the group if already selected return { ...prevState, group: prevState.group.filter((id) => id !== groupId) }; } else { // Add the group if not selected return { ...prevState, group: [...prevState.group, groupId] }; } }); }; const doCreateWallet = useCallback( async (e: React.FormEvent) => { e.preventDefault(); setIsSubmitting(true); try { const response = await PostData(`${API_URL_MASTER_DATA}/wallet/create`, formField); if (response?.status) { handleAddDialog(false); toast.success('Success Create Wallet'); reload(); const createActivity = { module: 'Manage Wallet', description: `Create Wallet => ${formField.name}`, action: 'C' }; doSaveLogActivity(createActivity); } else { toast.error('Failed Create Wallet'); setAlert({ show: true, message: response?.message }); } } catch (error) { toast.error('Something went wrong, please try again.'); } finally { setIsSubmitting(false); } }, [formField] ); const handleSubmit = (e: React.FormEvent) => { e.preventDefault(); if ( formField.name.trim() === '' || formField.description.trim() === '' || formField.status.trim() === '' || formField.group.length === 0 || formField.id_currency.trim() === '' ) { setAlert({ show: true, message: 'Please fill in all required fields.' }); return; } // console.log(formField); doCreateWallet(e); setAlert({ show: false, message: '' }); }; const getCurrencyLists = async (sorting: any) => { try { const response = await GetData(`${API_URL_WALLET}/dashboard/currency`, { limit: 100, page: 1, with_deleted: false, order_field: sorting[0].id, order_direction: sorting[0].desc == false ? 'ASC' : 'DESC' }); // console.log('Currency: ', response?.data); setCurrencies(response?.data.list); } catch (error) { console.error('Error fetching currency', error); } }; const getGroupLists = async (sorting: any) => { try { const response = await GetData(`${API_URL_MASTER_DATA}/groups/list`, { limit: 100, page: 1, with_deleted: false, order_field: sorting[0].id, order_direction: sorting[0].desc == false ? 'ASC' : 'DESC' }); // console.log('Group: ', response?.data); setGroups(response?.data.list); } catch (error) { console.error('Error fetching group', error); } }; useEffect(() => { getCurrencyLists([{ id: 'name', desc: false }]); getGroupLists([{ id: 'name', desc: false }]); }, []); useEffect(() => { if (showAddDialog === false) { resetForm(); } }, [showAddDialog]); return ( handleAddDialog(open)}> Wallet - Create
{alert.show && (

{alert.message}

)}
setFormField({ ...formField, name: e.target.value })} placeholder="Wallet Name" />
setFormField({ ...formField, description: e.target.value })} placeholder="Description" />
{groups.map((group) => ( ))}
); }; export default AddDialog;