// import React, { useState, useEffect } from 'react'; // import { Button, Dropdown, Table, Modal, Form } from 'react-bootstrap'; // import { FontAwesomeIcon } from '@fortawesome/react-fontawesome'; // import { faEdit, faTrashAlt, faPlus, faBars } from '@fortawesome/free-solid-svg-icons'; // import 'bootstrap/dist/css/bootstrap.min.css'; // import '../Dashboard/MenuMaitenance.css'; // function MenuMaintenance() { // const [menuItems, setMenuItems] = useState([]); // const [subMenuItems, setSubMenuItems] = useState([]); // const [showAddEditPopup, setShowAddEditPopup] = useState(false); // const [currentMenuItem, setCurrentMenuItem] = useState({}); // const [isEditing, setIsEditing] = useState(false); // const [recordsPerPage, setRecordsPerPage] = useState(10); // const [visibleColumns, setVisibleColumns] = useState({ // menuItemId: true, // menuItemDesc: true, // main_menu_action_name: true, // status: true // }); // const [isSubMenu, setIsSubMenu] = useState(false); // const [parentMenuItemId, setParentMenuItemId] = useState(null); // useEffect(() => { // const apiUrl = `${process.env.REACT_APP_API_URL}/api1/submenu1`; // 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(`Error: ${response.status}`); // } // const data = await response.json(); // setMenuItems(data); // } catch (error) { // console.error('Fetching error:', error); // } // }; // fetchMenuItems(); // }, []); // const toggleColumn = (column) => { // setVisibleColumns(prev => ({ // ...prev, // [column]: !prev[column] // })); // }; // const openAddEditPopup = (menuItem = {}) => { // setIsEditing(!!menuItem.menuItemId); // setCurrentMenuItem(menuItem); // setShowAddEditPopup(true); // }; // const handleInputChange = (event) => { // const { name, value } = event.target; // setCurrentMenuItem(prev => ({ ...prev, [name]: value })); // }; // const handleSubmit = (event) => { // event.preventDefault(); // if (isEditing) { // if (isSubMenu) { // setSubMenuItems(subMenuItems.map(item => // item.menuItemId === currentMenuItem.menuItemId ? currentMenuItem : item // )); // } else { // setMenuItems(menuItems.map(item => // item.menuItemId === currentMenuItem.menuItemId ? currentMenuItem : item // )); // } // } else { // if (isSubMenu) { // setSubMenuItems([...subMenuItems, { ...currentMenuItem, menuItemId: `ID-${subMenuItems.length + 1}` }]); // } else { // setMenuItems([...menuItems, { ...currentMenuItem, menuItemId: `ID-${menuItems.length + 1}` }]); // } // } // setShowAddEditPopup(false); // }; // const handleDelete = (menuItemId) => { // if (isSubMenu) { // setSubMenuItems(subMenuItems.filter(item => item.menuItemId !== menuItemId)); // } else { // setMenuItems(menuItems.filter(item => item.menuItemId !== menuItemId)); // } // }; // const handleRecordsPerPageChange = (number) => { // setRecordsPerPage(number); // }; // const handleSubMenuClick = async (menuItemId) => { // try { <<<<<<< HEAD // const apiUrl = `http://localhost:9292/api1/submenu1/${menuItemId}`; ======= // const apiUrl = `http://157.66.191.31:33266/api1/submenu1/${menuItemId}`; >>>>>>> 1c0592d (commit new code) // const response = await fetch(apiUrl, { // method: 'GET', // headers: { // 'Content-Type': 'application/json', // Authorization: 'Bearer eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJzeXNhZG1pbiIsInNjb3BlcyI6IlJPTEVfQURNSU4sUk9MRV9EZXZlbG9wZXIiLCJpYXQiOjE3MTU1ODc1ODEsImV4cCI6MTcxODE3OTU4MX0.hJ9heWuagVZB0WRbPNcIiCvMuQ4ASmth2mdSkGrkGXs', // } // }); // if (!response.ok) { // throw new Error(`Error: ${response.status}`); // } // const data = await response.json(); // setSubMenuItems(data); // setParentMenuItemId(menuItemId); // setIsSubMenu(true); // } catch (error) { // console.error('Fetching sub-menu error:', error); // } // }; // const handleBackToMainMenu = () => { // setIsSubMenu(false); // setSubMenuItems([]); // setParentMenuItemId(null); // }; // return ( //
//
// // {isSubMenu && ( // // )} //
//
// // // // {Object.keys(visibleColumns).map(key => visibleColumns[key] && ( // // ))} // // {!isSubMenu && } {/* Add sub-menu column for main menu */} // // // // {(isSubMenu ? subMenuItems : menuItems).slice(0, recordsPerPage).map((menuItem, index) => ( // // {Object.keys(visibleColumns).map(key => visibleColumns[key] && ( // // ))} // // {!isSubMenu && ( // // )} // // ))} // {(isSubMenu ? subMenuItems : menuItems).length === 0 && ( // // // // )} // //
{key.charAt(0).toUpperCase() + key.slice(1)}ActionsSub-Menu
{menuItem[key]} // // // // //
visibleColumns[key]).length + (isSubMenu ? 1 : 2)} className="text-center"> // No menu items found. Please add new items. //
//
//
// // // Manage Columns // // // {Object.keys(visibleColumns).map(column => ( // toggleColumn(column)}> // // // ))} // // // // // Records Per Page // // // {[5, 10, 20, 50].map(number => ( // handleRecordsPerPageChange(number)}> // {number} // // ))} // // //
// {showAddEditPopup && ( // setShowAddEditPopup(false)}> // // {isEditing ? 'Edit Menu Item' : 'Add New Menu Item'} // // //
// // Title // // // // Link // // // // Status // // // // // // // // // // //
//
//
// )} //
// ); // } // export default MenuMaintenance; import React, { useState, useEffect } from "react"; import { Button, Dropdown, Modal, Form, Row, Col, InputGroup, FormControl, OverlayTrigger, Tooltip, } from "react-bootstrap"; import { Table, Pagination, PaginationItem, PaginationLink } from "reactstrap"; import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; import { faEdit, faTrashAlt, faPlus, faBars, faArrowLeft, faTimes, faDownload, faUpload, faFileExcel, } from "@fortawesome/free-solid-svg-icons"; import "bootstrap/dist/css/bootstrap.min.css"; import "../Dashboard/CSS/CSS/MenuMaitenance.css"; import { FaSearch, FaTimes } from "react-icons/fa"; import { BsJournals } from "react-icons/bs"; import { toast } from "react-toastify"; import Spinner from "../../UIComponants/Spinner"; import { useNavigate } from "react-router-dom"; import * as XLSX from "xlsx"; import { fetchMenuItems, addMenuItem, updateMenuItem, deleteMenuItem, getSubmenuItems, addSubmenuItem, } from "../../APIServices/MenuMaintenanceAPI"; function MenuMaintenance() { const [menuItems, setMenuItems] = useState([]); const [subMenuItems, setSubMenuItems] = useState([]); const [showAddEditPopup, setShowAddEditPopup] = useState(false); const [currentMenuItem, setCurrentMenuItem] = useState({ menuItemDesc: "", menu_id: "", itemSeq: "", moduleName: "", main_menu_action_name: "", main_menu_icon_name: "", status: true, }); const [isEditing, setIsEditing] = useState(false); const [recordsPerPage, setRecordsPerPage] = useState(10); const [selectedMainMenuId, setSelectedMainMenuId] = useState(""); const [visibleColumns, setVisibleColumns] = useState({ menuItemDesc: true, menu_id: true, itemSeq: true, moduleName: true, main_menu_action_name: true, main_menu_icon_name: true, status: true, }); const [isSubMenu, setIsSubMenu] = useState(false); const [parentMenuItemId, setParentMenuItemId] = useState(null); const [currentPage, setCurrentPage] = useState(1); const [searchQuery, setSearchQuery] = useState(""); const [newItemData, setNewItemData] = useState({ menuItemDesc: "", menu_id: "", itemSeq: "", moduleName: "", main_menu_action_name: "", main_menu_icon_name: "", status: true, }); const [loading, setLoading] = useState(true); const [showModal, setShowModal] = useState(false); const [error, setError] = useState(null); const navigate = useNavigate(); useEffect(() => { // Simulate loading data setTimeout(() => { setLoading(false); }, 3000); // Simulated 3 seconds loading }, []); useEffect(() => { const fetchData = async () => { try { console.log("Fetching Menu Items..."); const data = await fetchMenuItems(); // Fetch data using the imported function setMenuItems(data); console.log("Fetched Menu Items:", data); toast.success("Menu items fetched successfully!"); } catch (error) { console.error("Fetching error:", error); setError(error.message); // Set error message to display in the UI toast.error("Error fetching menu items."); } }; fetchData(); }, []); const toggleColumn = (column) => { setVisibleColumns((prev) => ({ ...prev, [column]: !prev[column], })); }; const openAddEditPopup = (menuItem = {}) => { setIsEditing(!!menuItem.menuItemId); setCurrentMenuItem(menuItem); setParentMenuItemId(isSubMenu ? menuItem.menuItemId : null); setShowAddEditPopup(true); }; const handleOpenModal = () => setShowModal(true); const handleCloseModal = () => setShowModal(false); const handleFileChange = (event) => { const file = event.target.files[0]; if (file) { console.log("Selected file:", file.name); // For debugging or processing } }; const exportToExcel = () => { const worksheet = XLSX.utils.json_to_sheet([]); const workbook = XLSX.utils.book_new(); XLSX.utils.book_append_sheet(workbook, worksheet, "UserDetails"); XLSX.writeFile(workbook, "MenuMaintenance.xlsx"); }; // const handleInputChange = (event) => { // const { name, value } = event.target; // // Process status as a boolean // const processedValue = name === "status" ? value === "true" : value; // // Update state accordingly // setCurrentMenuItem((prev) => ({ ...prev, [name]: processedValue })); // }; const handleInputChange = (event) => { const { name, value } = event.target; // Convert status to boolean const processedValue = name === "status" ? value === "true" : value; setCurrentMenuItem((prev) => ({ ...prev, [name]: processedValue })); }; const handleSearch = (query) => { setSearchQuery(query); }; const handleSubmit = async (event) => { event.preventDefault(); try { if (isEditing) { if (isSubMenu) { setSubMenuItems( subMenuItems.map((item) => item.menuItemId === currentMenuItem.menuItemId ? currentMenuItem : item ) ); } else { const formData = { ...currentMenuItem, // Include required fields for API payload }; // Call the API to update the menu item await updateMenuItem(currentMenuItem.menuItemId, formData); setMenuItems( menuItems.map((item) => item.menuItemId === currentMenuItem.menuItemId ? currentMenuItem : item ) ); toast.success("Menu item updated successfully!"); } } else { if (isSubMenu) { // const formData = { // ...currentMenuItem, // Include fields required for submenu creation // }; // const addedSubMenuItem = await addSubmenuItem(parentMenuItemId, formData); // setSubMenuItems([...subMenuItems, addedSubMenuItem]); // toast.success("Submenu item added successfully!"); // // Local addition for submenus // setSubMenuItems([ // ...subMenuItems, // { ...currentMenuItem, menuItemId: `ID-${subMenuItems.length + 1}` }, // ]); } else { // Prepare form data for API const formData = { ...currentMenuItem, // Include required fields for API payload }; // Call the API to add a new menu item const addedMenuItem = await addMenuItem(formData); // Update menu items with the newly added item from the API response setMenuItems([...menuItems, addedMenuItem]); toast.success("Menu item added successfully!"); } } setShowAddEditPopup(false); } catch (error) { toast.error("There was an error while submitting the API."); console.error("Error in handleSubmit:", error); // Log the error for debugging } }; const handleDelete = async (menuItemId) => { if (isSubMenu) { setSubMenuItems( subMenuItems.filter((item) => item.menuItemId !== menuItemId) ); } else { await deleteMenuItem(menuItemId); setMenuItems(menuItems.filter((item) => item.menuItemId !== menuItemId)); } toast.success("Menu item deleted successfully!"); }; const handleRecordsPerPageChange = (number) => { setRecordsPerPage(number); }; const handleSubMenuClick = (menuItemId) => { // Pehle navigate karke page open karein navigate(`/admin/sub-menu-maintenance/:menuItemId`); // Phir API logic handle karein fetchSubMenuItems(menuItemId); }; const fetchSubMenuItems = async (menuItemId) => { try { // Call the API function to fetch submenu items const data = await getSubmenuItems(menuItemId); console.log("Fetched Sub-Menu Items:", data); // Update the submenu state with the fetched data setSubMenuItems(data); // Optional: Update additional state if required setIsSubMenu(true); setParentMenuItemId(menuItemId); toast.success("Sub-menu items fetched successfully!"); } catch (error) { console.error("Error fetching sub-menu items:", error); toast.error("Failed to fetch sub-menu items."); } }; const handleMainMenuClick = (menuId) => { console.log("Selected Menu ID:", menuId); // Aap yaha routing ya state update kar sakte hain }; const handleBackToMainMenu = () => { setIsSubMenu(false); setSubMenuItems([]); setParentMenuItemId(null); }; const totalPages = Math.ceil(menuItems.length / recordsPerPage); const handlePageChange = (pageNumber) => { setCurrentPage(pageNumber); }; const handleClose = () => { setShowAddEditPopup(false); // Close the modal by setting the state to false }; const slicedMenus = (isSubMenu ? subMenuItems : menuItems) .filter( (menuItem) => menuItem.menuItemDesc && menuItem.menuItemDesc.toLowerCase().includes(searchQuery.toLowerCase()) ) .slice((currentPage - 1) * recordsPerPage, currentPage * recordsPerPage); console.log("sliced menu", slicedMenus); // Verify the data in slicedMenus return (
{loading ? ( ) : (
{/* Header and Add Button */}

Menu Maintenance

{/* Main Menu */}
{/* 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 */} {isSubMenu && ( )} Add Menu} > openAddEditPopup(true)} style={{ cursor: "pointer", fontSize: "1.5rem", color: "#747264", marginRight: "20px", }} /> Download template} > Import} > handleOpenModal(true)} style={{ cursor: "pointer", fontSize: "1.5rem", color: "#747264", marginRight: "20px", }} /> XLSX} > exportToExcel(true)} style={{ cursor: "pointer", fontSize: "1.5rem", color: "#747264", marginRight: "20px", }} /> Menu Items} > Import File
Select a file to import:
{/* Table */}
{/* Add the No column */} {Object.entries(visibleColumns).map( ([key, visible]) => visible && ( ) )} {!isSubMenu && } {slicedMenus.length === 0 ? ( ) : ( slicedMenus.map((menuItem, index) => ( handleMainMenuClick(menuItem.menuItemId)} // onClick added > {/* Incrementing number column */} {Object.keys(visibleColumns).map( (key) => visibleColumns[key] && ( ) )} {!isSubMenu && ( )} )) )}
No {key.charAt(0).toUpperCase() + key.slice(1)} ActionsSub-Menu
visibleColumns[key] ).length + (isSubMenu ? 1 : 2) } className="text-center" > No menu items found. Please add new items.
{index + 1} {key === "status" ? ( {menuItem.status ? "Enabled" : "Disabled"} ) : ( menuItem[key] )} openAddEditPopup(menuItem)} style={{ cursor: "pointer", fontSize: "1rem", color: "green", marginRight: "15px", }} /> handleDelete(menuItem.menuItemId)} style={{ cursor: "pointer", fontSize: "1rem", color: "#dc3545", }} /> handleSubMenuClick(menuItem.menuItemId) } style={{ cursor: "pointer", fontSize: "1rem", color: "#0B4C6A", }} />
{/* 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 Modal */} {showAddEditPopup && ( setShowAddEditPopup(false)} centered > {isEditing ? "Edit Menu Item" : "Add New Menu Item"}
menuId Title Link Status
)}
)}
); } export default MenuMaintenance;