import { useState, useEffect } from "react"; import { Link, useLocation } from "react-router-dom"; import PropTypes from "prop-types"; import { Sidebar as ProSidebar, Menu, MenuItem, SubMenu } from "react-pro-sidebar"; import { fetchMenuItems } from "../../APIServices/MenuAPI"; import routes from "routes.js"; import "../Sidebar/Sidebar.css"; const Sidebar = (props) => { const [menuItems, setMenuItems] = useState([]); const [collapsed, setCollapsed] = useState(false); const [error, setError] = useState(""); const location = useLocation(); useEffect(() => { loadMenuItems(); }, []); const loadMenuItems = async () => { try { const respdata = await fetchMenuItems(); const data = respdata.data; if (Array.isArray(data)) { const dynamicRoutes = mapMenuToRoutes(data); setMenuItems(dynamicRoutes); } else if (data && typeof data === "object") { const dynamicRoutes = mapMenuToRoutes([data]); setMenuItems(dynamicRoutes); } else { console.error("Invalid menu data format:", data); setError("Invalid menu data format."); } } catch (err) { console.error("Error fetching menu items:", err); setError(err.message || "Failed to fetch menu items."); } }; const mapMenuToRoutes = (menuArray) => { if (!Array.isArray(menuArray)) { console.error('Expected an array for menuArray, received:', menuArray); return []; } return menuArray.map(menu => ({ path: menu.path || '#', name: menu.name || menu.menuName || '', icon: menu.icon || 'bi bi-grid', submenu: Array.isArray(menu.submenu) ? mapMenuToRoutes(menu.submenu) : [] })); }; const toggleSidebar = () => { setCollapsed(!collapsed); if (props.onSidebarToggle) { props.onSidebarToggle(!collapsed); } }; const renderMenuItems = () => { const allRoutes = [...routes, ...menuItems]; return allRoutes.map((route, key) => { if (route.submenu && route.submenu.length > 0) { return ( } > {route.submenu.map((submenu, subKey) => ( } icon={} > {submenu.name} ))} ); } return ( } icon={} > {route.name} ); }); }; const { logo } = props; return (
{/* {logo && ( {logo.imgAlt} )} */}
{renderMenuItems()}
); }; Sidebar.defaultProps = { logo: {}, }; Sidebar.propTypes = { logo: PropTypes.object, onSidebarToggle: PropTypes.func, }; export default Sidebar;