import React, { 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"; import { FiHome, FiUser, FiGlobe, FiCode, FiSettings, FiMenu, FiUsers, FiChevronDown, FiShieldOff, } from "react-icons/fi"; import { BiCustomize } from "react-icons/bi"; import { FcDatabase } from "react-icons/fc"; import { AiOutlineKey } from "react-icons/ai"; import { SiOpenaccess, SiJsonwebtokens } from "react-icons/si"; import { MdSecurity } from "react-icons/md"; import { RiSkullLine } from "react-icons/ri"; 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; } interface LinkItemProps { 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: "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: "AUsers", icon: FiUsers, route: "/usersa" }, ]; interface SidebarProps extends BoxProps { 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 {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} )} ); }; interface NavItemProps extends FlexProps { icon: IconType; children: ReactText; } export const NavItem = ({ icon, children, ...rest }: NavItemProps) => { return ( {icon && ( )} {children} ); }; interface MobileProps extends FlexProps { onOpen: () => void; } export const MobileNav = ({ onOpen, ...rest }: MobileProps) => { const [_, logout] = useMutation(AdminLogout); const { setIsLoggedIn } = useAuthContext(); const navigate = useNavigate(); const handleLogout = async () => { await logout(); setIsLoggedIn(false); navigate("/", { replace: true }); }; return ( } /> logo Admin Sign out ); };