import React, { useState } from "react"; import { Box, Collapse, Group, ThemeIcon, UnstyledButton, rem, } from "@mantine/core"; import { TbChevronRight } from "react-icons/tb"; import ChildMenu from "./SidebarChildMenu"; import classNames from "./styles/sidebarMenuItem.module.css"; import SidebarMenu from "../types/SidebarMenu"; interface Props { menu: SidebarMenu; } /** * `MenuItem` is a React functional component that displays an individual menu item. * It can optionally include a collapsible sub-menu for items with children. * * @param props - The component props. * @param props.menu - The menu item data to display. * @returns A React element representing an individual menu item. */ export default function MenuItem({ menu }: Props) { const hasChildren = Array.isArray(menu.children); const [opened, setOpened] = useState(false); const toggleOpenMenu = () => { setOpened((prev) => !prev); }; // Mapping children menu items if available const subItems = (hasChildren ? menu.children! : []).map((child, index) => ( )); return ( <> {/* Main Menu Item */} {/* Icon and Label */} {menu.label} {/* Chevron Icon for collapsible items */} {hasChildren && ( )} {/* Collapsible Sub-Menu */} {hasChildren && {subItems}} ); }