import { apiConfig } from '@/config/api.config'; import { Alert, useDataGrid } from '@/components'; import { useCallApi } from '@/hooks'; import { getAuth } from '@/auth'; import React, { useCallback, useEffect, useRef, useState } from 'react'; import { toast } from 'sonner'; import { Dialog, DialogBody, DialogContent, DialogDescription, DialogHeader, DialogTitle } from '@/components/ui/dialog'; import { Input } from '@/components/ui/input'; import { Button } from '@/components/ui/button'; import { NumericFormat } from 'react-number-format'; import { Popover, PopoverContent, PopoverTrigger } from '@/components/ui/popover'; import { Command, CommandEmpty, CommandGroup, CommandInput, CommandItem, CommandList } from '@/components/ui/command'; import { set } from 'date-fns'; import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from '@/components/ui/select'; import { useManageCurrencyContext } from '../hooks/useManageCurrencyContext'; import { doSaveLogActivity } from '@/actions/GlobalActions'; interface CurrencyProps { ID: string; name: string; } const API_URL = apiConfig.service_wallet; const EditDialog = () => { const parentRef = useRef(null); const { showEditDialog, handleEditDialog, selectedCurrency } = useManageCurrencyContext(); const { reload } = useDataGrid(); const { PostData, GetData, PutData } = useCallApi(); const parsedUser = getAuth()?.user; const [currencies, setCurrencies] = useState([]); const [open, setOpen] = useState(false); const [isLoading, setIsLoading] = useState(false); const [alert, setAlert] = useState({ show: false, message: '' }); const initialState = { code: '', name: '', prefix: '', status: '', created_by: '', created_at: '' }; const [formField, setFormField] = useState(initialState); const updated_time = new Date(); const formattedTime = updated_time.toISOString().slice(0, 19).replace('T', ' '); const resetForm = () => { setFormField(initialState); setAlert({ show: false, message: '' }); }; const doUpdateCurrency = useCallback( async (e: React.FormEvent) => { e.preventDefault(); if (!showEditDialog) return; const response = await PutData(`${API_URL}/dashboard/currency/${selectedCurrency}`, { ...formField }); if (response?.status) { resetForm(); handleEditDialog(false, null); toast.success('Success Update Currency'); const createActivity = { module: 'Manage Currency', description: `Update Currency=> ${selectedCurrency}`, action: 'U' }; doSaveLogActivity(createActivity); reload(); } else { toast.error('Error Create Currency'); setAlert({ show: true, message: 'Failed to Update Currency. Please try again.' }); } }, [formField] ); const doFetchData = useCallback(async (id: string) => { setIsLoading(true); const response = await GetData(`${API_URL}/dashboard/currency/${id}`, { id }); // console.log('Transaction Type: ', response?.data); if (response?.status) { setFormField((prev) => ({ ...prev, status: response.data.status, code: response.data.code, name: response.data.name, prefix: response.data.prefix })); } setIsLoading(false); // console.log('form fieldd Transaction Type: ', formField); }, []); useEffect(() => { if (selectedCurrency) { doFetchData(selectedCurrency); } }, [selectedCurrency]); useEffect(() => { if (showEditDialog) { setFormField({ ...formField, created_by: parsedUser.username, created_at: formattedTime }); } }, [formattedTime]); useEffect(() => { if (showEditDialog === false) { resetForm(); } }, [showEditDialog]); return ( handleEditDialog(open, null)}> Currency - Update
{alert.show && (

{alert.message}

)} {isLoading ? (

Loading Currency Details...

) : (
setFormField((prev) => ({ ...prev, code: e.target.value }))} />
setFormField((prev) => ({ ...prev, name: e.target.value }))} />
setFormField((prev) => ({ ...prev, prefix: e.target.value })) } />
)}
); }; export default EditDialog;