diff --git a/dashboard/src/components/Menu.tsx b/dashboard/src/components/Menu.tsx index 637f414..e49f2df 100644 --- a/dashboard/src/components/Menu.tsx +++ b/dashboard/src/components/Menu.tsx @@ -1,360 +1,362 @@ -import React, { ReactNode } from "react"; +import React, { Fragment, ReactNode } from 'react'; import { - IconButton, - Box, - CloseButton, - Flex, - Image, - HStack, - VStack, - Icon, - useColorModeValue, - Link, - Text, - BoxProps, - FlexProps, - Menu, - MenuButton, - MenuItem, - MenuList, - Accordion, - AccordionButton, - AccordionPanel, - AccordionItem, - AccordionIcon, - useMediaQuery, -} from "@chakra-ui/react"; + IconButton, + Box, + CloseButton, + Flex, + Image, + HStack, + VStack, + Icon, + useColorModeValue, + Link, + Text, + BoxProps, + FlexProps, + Menu, + MenuButton, + MenuItem, + MenuList, + Accordion, + AccordionButton, + AccordionPanel, + AccordionItem, + AccordionIcon, + useMediaQuery, +} from '@chakra-ui/react'; import { - FiHome, - FiUser, - FiGlobe, - FiCode, - FiSettings, - FiMenu, - FiUsers, - FiChevronDown, - FiShieldOff, -} from "react-icons/fi"; -import { BiCustomize } from "react-icons/bi"; -import { AiOutlineKey } from "react-icons/ai"; -import { SiOpenaccess, SiJsonwebtokens } from "react-icons/si"; -import { MdSecurity } from "react-icons/md"; -import { RiDatabase2Line } from "react-icons/ri"; -import { BsCheck2Circle } from "react-icons/bs"; -import { HiOutlineMail, HiOutlineOfficeBuilding } from "react-icons/hi"; -import { IconType } from "react-icons"; -import { ReactText } from "react"; -import { useMutation, useQuery } from "urql"; -import { NavLink, useNavigate, useLocation } from "react-router-dom"; -import { useAuthContext } from "../contexts/AuthContext"; -import { AdminLogout } from "../graphql/mutation"; -import { MetaQuery } from "../graphql/queries"; + FiHome, + FiUser, + FiGlobe, + FiCode, + FiSettings, + FiMenu, + FiUsers, + FiChevronDown, + FiShieldOff, +} from 'react-icons/fi'; +import { BiCustomize } from 'react-icons/bi'; +import { AiOutlineKey } from 'react-icons/ai'; +import { SiOpenaccess, SiJsonwebtokens } from 'react-icons/si'; +import { MdSecurity } from 'react-icons/md'; +import { RiDatabase2Line } from 'react-icons/ri'; +import { BsCheck2Circle } from 'react-icons/bs'; +import { HiOutlineMail, HiOutlineOfficeBuilding } from 'react-icons/hi'; +import { IconType } from 'react-icons'; +import { ReactText } from 'react'; +import { useMutation, useQuery } from 'urql'; +import { NavLink, useNavigate, useLocation } from 'react-router-dom'; +import { useAuthContext } from '../contexts/AuthContext'; +import { AdminLogout } from '../graphql/mutation'; +import { MetaQuery } from '../graphql/queries'; interface SubRoutes { - name: string; - icon: IconType; - route: string; + name: string; + icon: IconType; + route: string; } interface LinkItemProps { - name: string; - icon: IconType; - route: string; - subRoutes?: SubRoutes[]; + name: string; + icon: IconType; + route: string; + subRoutes?: SubRoutes[]; } const LinkItems: Array = [ - { - name: "Environment ", - icon: FiSettings, - route: "/", - subRoutes: [ - { - name: "OAuth Config", - icon: AiOutlineKey, - route: "/oauth-setting", - }, + { + name: 'Environment ', + icon: FiSettings, + route: '/', + subRoutes: [ + { + name: 'OAuth Config', + icon: AiOutlineKey, + route: '/oauth-setting', + }, - { name: "Roles", icon: FiUser, route: "/roles" }, - { - name: "JWT Secrets", - icon: SiJsonwebtokens, - route: "/jwt-config", - }, - { - name: "Session Storage", - icon: RiDatabase2Line, - route: "/session-storage", - }, - { - name: "Email Configurations", - icon: HiOutlineMail, - route: "/email-config", - }, - { - name: "Domain White Listing", - icon: BsCheck2Circle, - route: "/whitelist-variables", - }, - { - name: "Organization Info", - icon: HiOutlineOfficeBuilding, - route: "/organization-info", - }, - { name: "Access Token", icon: SiOpenaccess, route: "/access-token" }, - { - name: "UI Customization", - icon: BiCustomize, - route: "/ui-customization", - }, - { name: "Database", icon: RiDatabase2Line, route: "/db-cred" }, - { - name: " Security", - icon: MdSecurity, - route: "/admin-secret", - }, - ], - }, - { name: "Users", icon: FiUsers, route: "/users" }, + { name: 'Roles', icon: FiUser, route: '/roles' }, + { + name: 'JWT Secrets', + icon: SiJsonwebtokens, + route: '/jwt-config', + }, + { + name: 'Session Storage', + icon: RiDatabase2Line, + route: '/session-storage', + }, + { + name: 'Email Configurations', + icon: HiOutlineMail, + route: '/email-config', + }, + { + name: 'Domain White Listing', + icon: BsCheck2Circle, + route: '/whitelist-variables', + }, + { + name: 'Organization Info', + icon: HiOutlineOfficeBuilding, + route: '/organization-info', + }, + { name: 'Access Token', icon: SiOpenaccess, route: '/access-token' }, + { + name: 'UI Customization', + icon: BiCustomize, + route: '/ui-customization', + }, + { name: 'Database', icon: RiDatabase2Line, route: '/db-cred' }, + { + name: ' Security', + icon: MdSecurity, + route: '/admin-secret', + }, + ], + }, + { name: 'Users', icon: FiUsers, route: '/users' }, ]; interface SidebarProps extends BoxProps { - onClose: () => void; + onClose: () => void; } export const Sidebar = ({ onClose, ...rest }: SidebarProps) => { - const { pathname } = useLocation(); - const [{ fetching, data }] = useQuery({ query: MetaQuery }); - const [isNotSmallerScreen] = useMediaQuery("(min-width:600px)"); - return ( - - - - - logo - - AUTHORIZER - - - - - + const { pathname } = useLocation(); + const [{ fetching, data }] = useQuery({ query: MetaQuery }); + const [isNotSmallerScreen] = useMediaQuery('(min-width:600px)'); + return ( + + + + + logo + + AUTHORIZER + + + + + - - - {LinkItems.map((link) => - link?.subRoutes ? ( - - - - - {link.name} - - - - - - - - {link.subRoutes?.map((sublink) => ( - - {" "} - - - {sublink.name} - {" "} - - - ))} - - - ) : ( - - {" "} - - - {link.name} - {" "} - - - ) - )} - - API Playground - - - + + + {LinkItems.map((link) => + link?.subRoutes ? ( +
+ + + + + {link.name} + + + + + + + + + {link.subRoutes?.map((sublink) => ( + + {' '} + + + {sublink.name} + {' '} + + + ))} + +
+ ) : ( + + {' '} + + + {link.name} + {' '} + + + ) + )} + + API Playground + +
+
- {data?.meta?.version && ( - - {" "} - - Current Version: {data.meta.version} - - - )} -
- ); + {data?.meta?.version && ( + + {' '} + + Current Version: {data.meta.version} + + + )} +
+ ); }; interface NavItemProps extends FlexProps { - icon: IconType; - children: ReactText; + icon: IconType; + children: ReactText | JSX.Element | JSX.Element[]; } export const NavItem = ({ icon, children, ...rest }: NavItemProps) => { - return ( - - {icon && ( - - )} - {children} - - ); + return ( + + {icon && ( + + )} + {children} + + ); }; interface MobileProps extends FlexProps { - onOpen: () => void; + onOpen: () => void; } export const MobileNav = ({ onOpen, ...rest }: MobileProps) => { - const [_, logout] = useMutation(AdminLogout); - const { setIsLoggedIn } = useAuthContext(); - const navigate = useNavigate(); + const [_, logout] = useMutation(AdminLogout); + const { setIsLoggedIn } = useAuthContext(); + const navigate = useNavigate(); - const handleLogout = async () => { - await logout(); - setIsLoggedIn(false); - navigate("/", { replace: true }); - }; + const handleLogout = async () => { + await logout(); + setIsLoggedIn(false); + navigate('/', { replace: true }); + }; - return ( - - } - /> + return ( + + } + /> - logo + logo - - - - - - - - Admin - - - - - - - - Sign out - - - - - - ); -}; \ No newline at end of file + + + + + + + + Admin + + + + + + + + Sign out + + + + + + ); +};