import React, { useState, useEffect } from "react"; import { Button, Dropdown, Modal, Form,Row,Col,InputGroup, FormControl, } from "react-bootstrap"; import { Table ,Pagination, PaginationItem, PaginationLink,Input,Label} from 'reactstrap'; import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; import { faEdit, faTrashAlt, faPlus, faBars, faTimes } from "@fortawesome/free-solid-svg-icons"; import "bootstrap/dist/css/bootstrap.min.css"; import "../Dashboard/CSS/CSS/CommonStyle.css"; import { FaSearch, FaTimes } from "react-icons/fa"; import { BsJournals } from "react-icons/bs"; import Spinner from '../../UIComponants/Spinner'; import { getByUsrGrpId } from "APIServices/MenuAccessControlAPI"; import { toast } from "react-toastify"; function MenuAccessControl({ selected,Sync}) { const [loading, setLoading] = useState(true); const [menuItems, setMenuItems] = useState([]); const [menus,setMenus] = useState([]); const [showAddEditModal, setShowAddEditModal] = useState(false); const [selectedMenuId, setSelectedMenuId] = useState(null); const [usrgrp, setUsrgrp] = useState('DefaultGroup'); const [allData, setAllData] = useState([]); const [currentMenuItem, setCurrentMenuItem] = useState({ menuId: "", menuItemName: "", accessLevel: "", isActive: false, view: false, // For View checkbox create: false, // For Create checkbox edit: false, // For Edit checkbox delete: false, // For Delete checkbox query: false, // For Query checkbox export: false, // For Export checkbox }); const [alldata, setAlldata] = useState([]); // const [slicedMenus, setSlicedMenus] = useState([]); const [toggle, setToggle] = useState(false); const [currentPage, setCurrentPage] = useState(1); const [isEditing, setIsEditing] = useState(false); const [recordsPerPage, setRecordsPerPage] = useState(10); const [searchQuery, setSearchQuery] = useState(""); let [slicedMenus, setSlicedMenus] = useState([ { menuId: 1, view: false, create: false, edit: false, delete: false, query: false, export: false, isActive: true, }, { menuId: 2, view: false, create: false, edit: false, delete: false, query: false, export: false, isActive: false, }, ]); const [visibleColumns, setVisibleColumns] = useState({ No:true, menuId: true, menuItemName: true, view:true, create:true, edit:true, delete:true, query:true, export:true, isActive: true, actions: true }); const [newItemData, setNewItemData] = useState({ menuId: "", menuItemName: "", view:"", create:"", edit:"", delete:"", query:"", export:"", isActive: true, }); useEffect(() => { // Simulate loading data setTimeout(() => { setLoading(false); }, 3000); // Simulated 3 seconds loading }, []); useEffect(() => { // Simulate fetching or setting a default value // const defaultGroup = 'Admin'; // Replace with fetched or derived value setUsrgrp(); }, []); useEffect(() => { const apiUrl = `${process.env.REACT_APP_API_URL}/api/getAllMenuItems`; const token = localStorage.getItem("authToken"); const fetchMenuItems = async () => { try { const response = await fetch(apiUrl, { method: "GET", headers: { "Content-Type": "application/json", Authorization: `Bearer ${token}`, }, }); if (!response.ok) { throw new Error(`HTTP error! status: ${response.status}`); } const data = await response.json(); setMenuItems(data); } catch (error) { console.error("Error fetching menu items:", error); } }; fetchMenuItems(); }, []); useEffect(() => { fetchData(); }, []); // const fetchData = async () => { // try { // const data = await getByUsrGrpId(usrgrp); // console.log("Data fetched successfully:", data); // setAlldata(data); // Update the state with fetched data // toast.success("Data fetched successfully!"); // } catch (error) { // console.error('Error fetching data:', error); // toast.error("Failed to fetch data."); // } // }; // const fetchData = async () => { // try { // console.log("Fetching data for usrgrp:", usrgrp); // const data = await getByUsrGrpId(usrgrp); // if (!data) { // console.error("Received undefined data"); // toast.error("Failed to fetch data."); // return; // } // console.log("Data fetched successfully:", data); // setAlldata(data); // toast.success("Data fetched successfully!"); // } catch (error) { // console.error("Error fetching data:", error); // toast.error("Failed to fetch data."); // } // }; const fetchData = async () => { try { console.log("Fetching data for usrgrp:", usrgrp); const data = await getByUsrGrpId(usrgrp); if (!data) { console.error("Received undefined data"); toast.error("Failed to fetch data."); return; } console.log("Data fetched successfully:", data); setAlldata(data); toast.success("Data fetched successfully!"); } catch (error) { console.error("Error fetching data:", error.message || error); toast.error("Failed to fetch data."); } }; const idselected = (value) => { setSelectedMenuId(value); }; const toggleColumn = (column) => { setVisibleColumns((prev) => ({ ...prev, [column]: !prev[column], })); }; const handleInputChange = (event,menuId) => { const { name, value, checked, type } = event.target; setCurrentMenuItem(prev => ({ ...prev, [name]: type === "checkbox" ? checked : value })); setSlicedMenus((prevMenus) => prevMenus.map((menu) => menu.menuId === currentMenuItem.menuId // Identify the correct menu item ? { ...menu, [name]: value } // Update the specific field : menu ) ); }; const handleSearch = (query) => { setSearchQuery(query); }; const handleAddItem = () => { setIsEditing(false); setNewItemData({ menuId: "", menuItemName: "", isActive: true, }); setShowAddEditModal(true) }; const handleClose = () => { setShowAddEditModal(false); // Close the modal by setting the state to false }; const handleSubmit = (event) => { event.preventDefault(); if (isEditing) { setMenuItems(menuItems.map(item => item.menuId === currentMenuItem.menuId ? currentMenuItem : item )); } else { const newMenuId = `ID${menuItems.length + 1}`; setMenuItems([...menuItems, { ...currentMenuItem, menuId: newMenuId }]); } setShowAddEditModal(false); }; const openModal = (item = { menuId: "", menuName: "", accessLevel: "", isActive: false }) => { setIsEditing(!!item.menuId); setCurrentMenuItem(item); setShowAddEditModal(true); }; const handleDelete = (menuId) => { setMenuItems(menuItems.filter(item => item.menuId !== menuId)); }; const handleRecordsPerPageChange=(number) =>{ setRecordsPerPage(number); setCurrentPage(1); } const totalPages = Math.ceil(menuItems.length / recordsPerPage); const handlePageChange = (pageNumber) => { setCurrentPage(pageNumber); }; const handleSelectChange = (value) => { console.log(value); setUsrgrp(value); }; const handleToggleCheckbox = () => { setToggle(!toggle); }; slicedMenus = menuItems .filter((item) => item.menuName && item.menuName.toLowerCase().includes(searchQuery.toLowerCase()) ) .slice((currentPage - 1) * recordsPerPage, currentPage * recordsPerPage); return (
{loading ? ( ):(
{/* Left Side */}

Menu Access Control

Edit Mode
{/* Right Side */}
For {toggle ? "Only Main Menu" : "Show All"}
{/* Left: Search Bar */} handleSearch(e.target.value)} style={{ padding: "10px", border: "none", paddingRight: "5px", // More space on the right side of input field }} /> {/*Add Icons */} <> {/* Add Icon */} handleAddItem(true)} style={{ cursor: "pointer", fontSize: "1.5rem", color: "#747264", marginRight: "20px", }} />
{Object.entries(visibleColumns).map(([key, visible]) => visible ? : null )} {slicedMenus.length === 0 ? ( ) : ( slicedMenus.map((item, index) => ( {Object.entries(visibleColumns).map(([key, visible]) => visible ? ( ) : null )} )) )}
{key.charAt(0).toUpperCase() + key.slice(1)}
visibleColumns[key]) .length } className="text-center" > No items found. Please add new items.
{key === "actions" ? ( <> openModal(item)} style={{ cursor: "pointer", fontSize: "1rem", color: "green", marginRight: "15px", }} /> handleDelete(item.menuId)} style={{ cursor: "pointer", fontSize: "1rem", color: "#dc3545", }} /> ) :["view", "create", "edit", "delete", "query", "export"].includes(key) ? ( // handleInputChange({ // target: { // name: key, // value: e.target.checked, // }, // }) onChange={(e) => handleInputChange(e, item.menuId)} disabled={false} /> ): key === "isActive" ? ( {item.isActive ? "Active" : "Inactive"} ) : ( item[key] )}
{/* Manage Columns & Records Per Page */} Manage Columns {Object.keys(visibleColumns).map((column) => ( toggleColumn(column)} > ))} {[1, 5, 10, 20, 50].map((number) => ( handleRecordsPerPageChange(number)} className="text-dark d-flex justify-content-between align-items-center" > {number} ))} handlePageChange(currentPage - 1)} /> {[...Array(totalPages)].map((_, index) => ( handlePageChange(index + 1)} style={{ color: '#0b6592' }}> {index + 1} ))} handlePageChange(currentPage + 1)} /> {/* Add/Edit Model */} {/* setShowAddEditModal(false)}> {isEditing ? "Edit Menu Access" : "Add Menu Access"}
Menu Name idselected(e.target.value)}> {menus.map((sub) => ( ))}
*/} setShowAddEditModal(false)}> {isEditing ? "Edit Menu Access" : "Add Menu Access"}
{/* Menu Name Input */} Menu Items Name {/* Select Menu Item */} idselected(e.target.value)} > {menus.map((sub) => ( ))} {/* Active Checkbox */} {/* Modal Footer with buttons */}
)}
); } export default MenuAccessControl;