import React, { ReactNode } from 'react'; import { IconButton, Box, CloseButton, Flex, Image, HStack, VStack, Icon, useColorModeValue, Link, Text, BoxProps, FlexProps, Menu, MenuButton, MenuItem, MenuList, } from '@chakra-ui/react'; import { FiHome, FiCode, FiSettings, FiMenu, FiUser, FiUsers, FiChevronDown, } from 'react-icons/fi'; import { IconType } from 'react-icons'; import { ReactText } from 'react'; import { useMutation } from 'urql'; import { NavLink, useNavigate, useLocation } from 'react-router-dom'; import { useAuthContext } from '../contexts/AuthContext'; import { AdminLogout } from '../graphql/mutation'; interface LinkItemProps { name: string; icon: IconType; route: string; } const LinkItems: Array = [ { name: 'Home', icon: FiHome, route: '/' }, { name: 'Users', icon: FiUsers, route: '/users' }, { name: 'Environment Variables', icon: FiSettings, route: '/environment' }, ]; interface SidebarProps extends BoxProps { onClose: () => void; } export const Sidebar = ({ onClose, ...rest }: SidebarProps) => { const { pathname } = useLocation(); return ( logo AUTHORIZER {LinkItems.map((link) => ( {link.name} ))} API Playground ); }; 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 ); };