import { useCallback, useRef, useState } from 'react';
import {
Dialog,
DialogBody,
DialogContent,
DialogDescription,
DialogHeader,
DialogTitle
} from '@/components/ui/dialog';
import { useManagePositionContext } from '../hooks';
import { Input } from '@/components/ui/input';
import { Button } from '@/components/ui/button';
import { apiConfig } from '@/config/api.config';
import { Alert, useDataGrid } from '@/components';
import { toast } from 'sonner';
import { useCallApi } from '@/hooks';
import { Checkbox } from '@/components/ui/checkbox';
import { doSaveLogActivity } from '@/actions/GlobalActions';
const API_URL = apiConfig.service_dashboard;
interface MenuItem {
id: string;
name: string;
children?: MenuItem[];
}
const MenuItemComponent: React.FC<{
menu: MenuItem;
selectMenus: string[];
handleCheckboxChange: (id: string) => void;
}> = ({ menu, selectMenus, handleCheckboxChange }) => {
const { id, name, children = [] } = menu;
return (
handleCheckboxChange(id)}
/>
{children.length > 0 && (
{children.map((child) => (
))}
)}
);
};
const AddDialog = () => {
const parentRef = useRef(null);
const { showAddDialog, handleAddDialog, menus } = useManagePositionContext();
const { reload } = useDataGrid();
const { PostData } = useCallApi();
const [alert, setAlert] = useState({
show: false,
message: ''
});
const [selectMenus, setSelectMenus] = useState([]);
const [formField, setFormField] = useState({
name: ''
});
/* actions */
const handleCheckboxChange = useCallback((key: string) => {
setSelectMenus((prev) =>
prev.includes(key) ? prev.filter((item) => item !== key) : [...prev, key]
);
}, []);
const doCreatePosition = useCallback(
async (e: React.FormEvent) => {
e.preventDefault();
if (formField.name.trim() === '') {
setAlert({ show: true, message: 'Please fill in all required fields.' });
return;
}
const response = await PostData(`${API_URL}/user_role/create`, {
name: formField.name,
roles: selectMenus,
status: 'Y'
});
if (response?.status) {
setAlert((prev) => ({ ...prev, show: false, message: '' }));
handleAddDialog(false);
toast.success('Success Create Position');
reload();
const createActivity = {
module: 'Manage Position',
description: `Create New Position => ${formField.name}`,
action: 'C'
};
doSaveLogActivity(createActivity);
} else {
setAlert((prev) => ({ ...prev, show: true, message: response?.message }));
}
},
[formField, selectMenus]
);
return (
);
};
export { AddDialog };