import { useCallback, useEffect, useRef, useState } from 'react'; import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from '@/components/ui/select'; import { Command, CommandEmpty, CommandGroup, CommandInput, CommandItem, CommandList } from '@/components/ui/command'; import { Popover, PopoverContent, PopoverTrigger } from '@/components/ui/popover'; import { Dialog, DialogBody, DialogContent, DialogDescription, DialogHeader, DialogTitle } from '@/components/ui/dialog'; import { CustomerProps } from './AddDialog'; import { useUserContext } from '../hooks'; import { ChevronDown } from 'lucide-react'; import { Input } from '@/components/ui/input'; import { Button } from '@/components/ui/button'; import { apiConfig } from '@/config/api.config'; import { Alert, KeenIcon, useDataGrid } from '@/components'; import { toast } from 'sonner'; import { useCallApi } from '@/hooks'; import { doSaveLogActivity } from '@/actions/GlobalActions'; interface RoleListProps { id: string; name: string; status: string; } const API_URL_CUSTOMER = apiConfig.service_customer; const API_URL = apiConfig.service_dashboard; const initialState = { name: '', username: '', email: '', id_role: '', status: '', customerid: '' }; const EditDialog = () => { const parentRef = useRef(null); const { showEditDialog, selectedUser, handleEditDialog } = useUserContext(); const { reload } = useDataGrid(); const { GetData, PutData } = useCallApi(); const [open, setOpen] = useState(false); const [roles, setRoles] = useState([]); const [customers, setCustomers] = useState([]); const [alert, setAlert] = useState({ show: false, message: '' }); const [formField, setFormField] = useState(initialState); const resetForm = () => { setFormField(initialState); setAlert({ show: false, message: '' }); }; /* actions */ const doUpdateUser = useCallback( async (e: React.FormEvent) => { e.preventDefault(); const response = await PutData(`${API_URL}/user/update/${selectedUser}`, { ...formField }); if (formField.name.trim() === '') { setAlert({ show: true, message: 'Please fill all required field' }); return; } if (response?.status) { resetForm(); handleEditDialog(false, null); toast.success('Success Update User'); reload(); const createActivity = { module: 'Manage User', description: `Edit User => ${formField.username}`, action: 'U' }; doSaveLogActivity(createActivity); } else { setAlert((prev) => ({ ...prev, show: true, message: response?.message })); } }, [selectedUser, formField] ); const doFetchUserRole = useCallback(async (sorting: any) => { try { sorting = sorting.length == 0 ? [{ id: 'name', desc: false }] : sorting; const response = await GetData(`${API_URL}/user_role/list`, { limit: 100, page: 1, with_deleted: false, order_field: sorting[0].id, order_direction: sorting[0].desc == false ? 'ASC' : 'DESC' }); // console.log('User ID_ROLE:', response?.data.id_role); // console.log('Role: ', response?.data.list); setRoles(response?.data.list); } catch (error) { console.error('Error fetching role', error); } }, []); 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 == false ? 'ASC' : 'DESC' }); // console.log('CUSTOMER: ', response?.data); setCustomers(response?.data.list); } catch (error) { console.error('Error fetching customer', error); } }; const doFetchUserData = useCallback(async (id: string) => { const response = await GetData(`${API_URL}/user/detail/${id}`, { id }); // console.log('User detail response:', response?.data); if (response?.status) { setFormField((prev) => ({ ...prev, name: response.data.name, username: response.data.username, email: response.data.email, id_role: response.data.idRole, status: response.data.status, customerid: response.data.customer.id })); // console.log('Customer ID from API:', response?.data.customerid); } else { setFormField((prev) => ({ ...prev, name: '', username: '', email: '', id_role: '0', status: '', customerid: '' })); } // console.log('Fetched ID Role:', response?.data.id_role); }, []); useEffect(() => { if (showEditDialog === false) { resetForm(); } }, [showEditDialog]); useEffect(() => { const fetchAllData = async () => { await getCustomerList([{ id: 'id', desc: false }]); await doFetchUserRole([{ id: 'name', desc: false }]); if (selectedUser) { await doFetchUserData(selectedUser); } }; fetchAllData(); }, [selectedUser]); // console.log('ini role: ', roles); // useEffect(() => { // console.log('Selected User ID Role:', formField.id_role); // // console.log('Available Roles:', roles); // }, [formField.id_role, roles]); return ( handleEditDialog(open, null)}>

User - Update

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

{alert.message}

)}
setFormField((prev) => ({ ...prev, name: target.value })) } />
setFormField((prev) => ({ ...prev, username: target.value })) } />
{ e.currentTarget.scrollTop += e.deltaY; }} > No Customer found. {customers.map((customer) => ( { setFormField({ ...formField, customerid: customer.id }); setOpen(false); }} > {customer.username} ))}
setFormField((prev) => ({ ...prev, email: target.value })) } />
); }; export { EditDialog };