import { apiConfig } from '@/config/api.config'; import React, { useCallback, useRef, useState } from 'react'; import { useManageMenusContext } from '../hooks/useManageMenusContext'; import { Alert, useDataGrid } from '@/components'; import { useCallApi } from '@/hooks'; 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 { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from '@/components/ui/select'; import { doSaveLogActivity } from '@/actions/GlobalActions'; import { RefreshCw } from 'lucide-react'; const API_URL = apiConfig.service_dashboard; const AddDialog = () => { const { showAddDialog, handleAddDialog, parents, selectedMenu } = useManageMenusContext(); const { reload } = useDataGrid(); const { PostData } = useCallApi(); const [open, setOpen] = useState(false); const [alert, setAlert] = useState({ show: false, message: '' }); const initialState = { module: '', name: '', link: '', id_parent: '', order_number: 0, icon: '', status: '' }; const [formField, setFormField] = useState(initialState); const [isSubmitting, setIsSubmitting] = useState(false); const handleSubmit = async (e: React.FormEvent) => { e.preventDefault(); setIsSubmitting(true); if ( formField.module.trim() === '' || formField.name.trim() === '' || formField.link.trim() === '' || formField.order_number === 0 || formField.status.trim() === '' ) { setAlert({ show: true, message: 'Please fill in all required fields.' }); setIsSubmitting(false); return; } try { const response = await PostData(`${API_URL}/menus/create`, formField); if (response?.status) { handleAddDialog(false); resetForm(); toast.success('Success Create Menu'); const createActivity = { module: 'Manage Menu', description: `Create Menu => ${selectedMenu}`, action: 'C' }; doSaveLogActivity(createActivity); reload(); } else { toast.error('Failed Create Menu'); setAlert({ show: true, message: response?.message }); } } catch (error) { toast.error('Something went wrong, please try again'); } finally { setIsSubmitting(false); } setAlert({ show: false, message: '' }); }; const handleAddDialogChange = (open: boolean) => { handleAddDialog(open); if(!open) { resetForm(); } } const resetForm = () => { setFormField({ ...initialState, status: formField.status }); setAlert({ show: false, message: '' }); }; return ( Menu - Create
{alert.show && (

{alert.message}

)}
setFormField({ ...formField, module: e.target.value })} />
setFormField({ ...formField, name: e.target.value })} />
setFormField({ ...formField, link: e.target.value })} />
{ const value = parseInt(e.target.value, 10); setFormField({ ...formField, order_number: isNaN(value) ? 0 : value }); }} />
setFormField({ ...formField, name: e.target.value })} />
); }; export default AddDialog;