From 0df19cb78e13e16a1936fcb562bcddd24703eff5 Mon Sep 17 00:00:00 2001 From: pramod mahajan Date: Mon, 18 Aug 2025 18:21:16 +0530 Subject: [PATCH 1/4] initial setup sidebar menus from backend --- src/components/Layout/MenuItemSkeleton.jsx | 36 +++++++++++++++ src/components/Layout/Sidebar.jsx | 54 ++++++++++++++-------- src/hooks/useProfile.js | 10 ++++ src/repositories/AuthRepository.jsx | 2 + 4 files changed, 82 insertions(+), 20 deletions(-) create mode 100644 src/components/Layout/MenuItemSkeleton.jsx diff --git a/src/components/Layout/MenuItemSkeleton.jsx b/src/components/Layout/MenuItemSkeleton.jsx new file mode 100644 index 00000000..304c33c3 --- /dev/null +++ b/src/components/Layout/MenuItemSkeleton.jsx @@ -0,0 +1,36 @@ + +const SkeletonLine = ({ height = 50, width = "100%", className = "" }) => ( +
+); +export const MenuItemSkeleton = ({ hasSubmenu = false, submenuCount = 3 }) => { + return ( +
  • +
    + {/* icon placeholder */} + + {/* text placeholder */} + +
    + + {/* Submenu skeletons */} + {hasSubmenu && ( + + )} +
  • + ); +}; diff --git a/src/components/Layout/Sidebar.jsx b/src/components/Layout/Sidebar.jsx index de754542..2db04c8e 100644 --- a/src/components/Layout/Sidebar.jsx +++ b/src/components/Layout/Sidebar.jsx @@ -2,10 +2,12 @@ import React from "react"; import { Link, NavLink, useLocation, useNavigate } from "react-router-dom"; import menuData from "../../data/menuData.json"; import { getCachedProfileData } from "../../slices/apiDataManager"; +import { useSidBarMenu } from "../../hooks/useProfile"; +import { MenuItemSkeleton } from "./MenuItemSkeleton"; const Sidebar = () => { const navigate = useNavigate(); - + const { data, isError, isLoading, isFetched } = useSidBarMenu(); return ( ); }; const MenuItem = (item) => { - item.id = Math.random(); const location = useLocation(); const isActive = location.pathname === item.link; - const hasSubmenu = item.submenu && item.submenu.length > 0; + const hasSubmenu = Array.isArray(item.submenu) && item.submenu.length > 0; const isSubmenuActive = - hasSubmenu && - item.submenu.some((subitem) => location.pathname === subitem.link); + hasSubmenu && item.submenu.some((sub) => location.pathname === sub.link); return (
  • { -
    {item.text}
    {" "} +
    {item.text}
    {item.available === false && (
    Pro
    )}
    - {item.submenu && ( -