From 1cae4e924d9146908bd26dbec90586265161cae0 Mon Sep 17 00:00:00 2001 From: Sianida26 Date: Mon, 22 Jan 2024 01:01:20 +0700 Subject: [PATCH] Added TSdoc --- src/components/AppNavbar/Navbar.tsx | 32 ++++++++------- .../_components/{ => ChildMenu}/ChildMenu.tsx | 14 +++++-- .../{ => ChildMenu}/childMenu.module.css | 0 .../AppNavbar/_components/ChildMenu/index.ts | 3 ++ .../_components/{ => MenuItem}/MenuItem.tsx | 39 ++++++++++++------- .../AppNavbar/_components/MenuItem/index.ts | 3 ++ .../{ => MenuItem}/menuItem.module.css | 0 .../DashboardLayout/DashboardLayout.tsx | 19 +++++++-- 8 files changed, 76 insertions(+), 34 deletions(-) rename src/components/AppNavbar/_components/{ => ChildMenu}/ChildMenu.tsx (57%) rename src/components/AppNavbar/_components/{ => ChildMenu}/childMenu.module.css (100%) create mode 100644 src/components/AppNavbar/_components/ChildMenu/index.ts rename src/components/AppNavbar/_components/{ => MenuItem}/MenuItem.tsx (56%) create mode 100644 src/components/AppNavbar/_components/MenuItem/index.ts rename src/components/AppNavbar/_components/{ => MenuItem}/menuItem.module.css (100%) diff --git a/src/components/AppNavbar/Navbar.tsx b/src/components/AppNavbar/Navbar.tsx index 6c09465..acc5705 100644 --- a/src/components/AppNavbar/Navbar.tsx +++ b/src/components/AppNavbar/Navbar.tsx @@ -1,19 +1,23 @@ -import { AppShell, ScrollArea } from '@mantine/core' -import React from 'react' -import allMenu from './_data/allMenu' -import MenuItem from './_components/MenuItem' +import React from 'react'; +import { AppShell, ScrollArea } from '@mantine/core'; +import allMenu from "./_data/allMenu"; +import MenuItem from "./_components/MenuItem"; + +/** + * `AppNavbar` is a React functional component that renders the application's navigation bar. + * It utilizes data from `allMenu` to create a list of menu items displayed in a scrollable area. + * + * @returns A React element representing the application's navigation bar. + */ export default function AppNavbar() { - const menus = allMenu.map((menu, i) => ) + // Mapping all menu items to MenuItem components + const menus = allMenu.map((menu, i) => ); - return ( - - -
- {menus} -
-
-
- ) + return ( + + {menus} + + ); } diff --git a/src/components/AppNavbar/_components/ChildMenu.tsx b/src/components/AppNavbar/_components/ChildMenu/ChildMenu.tsx similarity index 57% rename from src/components/AppNavbar/_components/ChildMenu.tsx rename to src/components/AppNavbar/_components/ChildMenu/ChildMenu.tsx index 69fcf15..220a649 100644 --- a/src/components/AppNavbar/_components/ChildMenu.tsx +++ b/src/components/AppNavbar/_components/ChildMenu/ChildMenu.tsx @@ -1,14 +1,22 @@ -import { Text } from "@mantine/core"; import React from "react"; +import { Text } from "@mantine/core"; + import classNames from "./childMenu.module.css"; -import { MenuItem } from "../_data/allMenu"; -import { isNotEmpty } from "@mantine/form"; +import { MenuItem } from "../../_data/allMenu"; interface Props { item: NonNullable[number]; } +/** + * `ChildMenu` is a React functional component that renders a child menu item. + * It displays the item as a text link. + * + * @param props - The component props. + * @param props.item - The child menu item data. + * @returns A React element representing a child menu item. + */ export default function ChildMenu(props: Props) { return ( diff --git a/src/components/AppNavbar/_components/childMenu.module.css b/src/components/AppNavbar/_components/ChildMenu/childMenu.module.css similarity index 100% rename from src/components/AppNavbar/_components/childMenu.module.css rename to src/components/AppNavbar/_components/ChildMenu/childMenu.module.css diff --git a/src/components/AppNavbar/_components/ChildMenu/index.ts b/src/components/AppNavbar/_components/ChildMenu/index.ts new file mode 100644 index 0000000..e3205b7 --- /dev/null +++ b/src/components/AppNavbar/_components/ChildMenu/index.ts @@ -0,0 +1,3 @@ +import ChildMenu from "./ChildMenu"; + +export default ChildMenu; diff --git a/src/components/AppNavbar/_components/MenuItem.tsx b/src/components/AppNavbar/_components/MenuItem/MenuItem.tsx similarity index 56% rename from src/components/AppNavbar/_components/MenuItem.tsx rename to src/components/AppNavbar/_components/MenuItem/MenuItem.tsx index 05f0bab..591770d 100644 --- a/src/components/AppNavbar/_components/MenuItem.tsx +++ b/src/components/AppNavbar/_components/MenuItem/MenuItem.tsx @@ -1,4 +1,5 @@ import React, { useState } from "react"; + import { Box, Collapse, @@ -7,16 +8,24 @@ import { UnstyledButton, rem, } from "@mantine/core"; -import { MenuItem } from "../_data/allMenu"; import { TbChevronRight } from "react-icons/tb"; +import { MenuItem } from "../../_data/allMenu"; +import ChildMenu from "../ChildMenu/ChildMenu"; import classNames from "./menuItem.module.css"; -import ChildMenu from "./ChildMenu"; interface Props { menu: MenuItem; } +/** + * `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); @@ -26,46 +35,50 @@ export default function MenuItem({ menu }: Props) { setOpened((prev) => !prev); }; - const subItems = (hasChildren ? menu.children! : []).map((child, i) => ( - + // Mapping children menu items if available + const subItems = (hasChildren ? menu.children! : []).map((child, index) => ( + )); return ( <> - {/* Main Section */} + {/* Main Menu Item */} - {/* Left Section */} + + {/* Icon and Label */} - {/* Icon */} - {/* Label */} {menu.label} - {/* Right Section (Chevron if available) */} + {/* Chevron Icon for collapsible items */} {hasChildren && ( )} - {hasChildren ? {subItems} : null} + + {/* Collapsible Sub-Menu */} + {hasChildren && {subItems}} ); } diff --git a/src/components/AppNavbar/_components/MenuItem/index.ts b/src/components/AppNavbar/_components/MenuItem/index.ts new file mode 100644 index 0000000..442115f --- /dev/null +++ b/src/components/AppNavbar/_components/MenuItem/index.ts @@ -0,0 +1,3 @@ +import MenuItem from "./MenuItem"; + +export default MenuItem; diff --git a/src/components/AppNavbar/_components/menuItem.module.css b/src/components/AppNavbar/_components/MenuItem/menuItem.module.css similarity index 100% rename from src/components/AppNavbar/_components/menuItem.module.css rename to src/components/AppNavbar/_components/MenuItem/menuItem.module.css diff --git a/src/components/DashboardLayout/DashboardLayout.tsx b/src/components/DashboardLayout/DashboardLayout.tsx index cc35aa2..2ba49e8 100644 --- a/src/components/DashboardLayout/DashboardLayout.tsx +++ b/src/components/DashboardLayout/DashboardLayout.tsx @@ -1,16 +1,25 @@ "use client"; import React from "react"; -import { AppShell, AppShellHeader, Burger } from "@mantine/core"; +import { AppShell } from "@mantine/core"; +import { useDisclosure } from "@mantine/hooks"; + import AppHeader from "../AppHeader"; import AppNavbar from "../AppNavbar"; -import { useDisclosure } from "@mantine/hooks"; - interface Props { children: React.ReactNode; } +/** + * `DashboardLayout` is a React functional component that provides a layout structure + * for the dashboard, including a header, navigation bar, and main content area. + * + * @param props - The component props. + * @param props.children - The child components to be rendered inside the layout. + * @returns A React element representing the dashboard layout. + */ export default function DashboardLayout(props: Props) { + // State and toggle function for handling the disclosure of the navigation bar const [openNavbar, { toggle }] = useDisclosure(false); return ( @@ -29,7 +38,9 @@ export default function DashboardLayout(props: Props) { {/* Navbar */} - {props.children} + + {props.children} + ); }