import { signIn, signOut, useSession } from "next-auth/react"; import styles from "../styles/header.module.css"; import React, { useState, useEffect, useRef } from "react"; import { useRouter } from 'next/router'; import sidemenu, { footerMenu } from './sidemenuData.js'; // Move sidemenu data to a separate file import axiosInstance from "src/axiosSecure"; import common from "src/helpers/common"; //get package version from package.json const packageVersion = require('../package.json').version; function SidebarMenuItem({ item, session, isSubmenu }) { const router = useRouter(); const isActive = router.pathname.includes(item.url); const collapsable = item.collapsable === undefined ? true : item.collapsable; // is open is always true if not collapsable; isOpen is true if not collapsable //const [isOpen, setIsOpen] = useState(false && collapsable); // Initialize isOpen to true for non-collapsible items, ensuring they are always "open" // xOR const baseClass = `sidemenu-item flex items-center ${isSubmenu ? "px-4 py-1" : ""} mt-1 transition-colors duration-3000 transform rounded-md`; const activeClass = isActive ? "sidemenu-item-active text-blue-600 bg-gray-100 dark:text-blue-400 dark:bg-blue-900" : "text-gray-700 dark:text-gray-300"; const hoverClasses = "hover:bg-gray-100 dark:hover:bg-gray-800 dark:hover:text-gray-200 hover:text-gray-700"; const initialState = common.getLocalStorage(`sidebar-openState-${item.id}`, isActive); const [isOpen, setIsOpen] = useState(() => common.getLocalStorage(`sidebar-openState-${item.id}`, isActive)); useEffect(() => { // Only run this effect on the client-side and if it's a submenu item if (typeof window !== 'undefined' && isSubmenu) { common.setLocalStorage(`sidebar-openState-${item.id}`, isOpen); } }, [isOpen, item.id, isSubmenu]); useEffect(() => { // This effect should also check for window to ensure it's client-side if (typeof window !== 'undefined' && isSubmenu) { const isAnyChildActive = item.children?.some(child => router.pathname.includes(child.url)); if (isActive || isAnyChildActive) { setIsOpen(true); } } }, [router.pathname, isActive, item.children, isSubmenu]); if (!session || (item.roles && !item.roles.includes(session?.user?.role))) { return null; } const handleClick = () => { //console.log("clicked", item); if (item.children && collapsable) { // Toggle isOpen only if item is collapsable and has children setIsOpen(!isOpen); } else if (item.url) { router.push(item.url); } }; const clickableClass = item.url || item.children ? "cursor-pointer" : ""; return ( <>