import { useParams } from 'common' import { Home, User } from 'icons' import { isUndefined } from 'lodash' import { Command, FileText, FlaskConical, Search, Settings } from 'lucide-react' import { useTheme } from 'next-themes' import Link from 'next/link' import { useRouter } from 'next/router' import { useState } from 'react' import { useIsAPIDocsSidePanelEnabled } from 'components/interfaces/App/FeaturePreview/FeaturePreviewContext' import { useIsFeatureEnabled } from 'hooks/misc/useIsFeatureEnabled' import { useFlag } from 'hooks/ui/useFlag' import { useSignOut } from 'lib/auth' import { IS_PLATFORM } from 'lib/constants' import { detectOS } from 'lib/helpers' import { useProfile } from 'lib/profile' import { useAppStateSnapshot } from 'state/app-state' import { Button, DropdownMenu, DropdownMenuContent, DropdownMenuGroup, DropdownMenuItem, DropdownMenuLabel, DropdownMenuRadioGroup, DropdownMenuRadioItem, DropdownMenuSeparator, DropdownMenuTrigger, Separator, Theme, cn, themes, } from 'ui' import { useCommandMenu } from 'ui-patterns/Cmdk' import { useProjectContext } from '../ProjectContext' import { generateOtherRoutes, generateProductRoutes, generateSettingsRoutes, generateToolRoutes, } from './NavigationBar.utils' import { NavigationIconButton } from './NavigationIconButton' import NavigationIconLink from './NavigationIconLink' export const ICON_SIZE = 20 export const ICON_STROKE_WIDTH = 1.5 const NavigationBar = () => { const os = detectOS() const router = useRouter() const { profile } = useProfile() const { project } = useProjectContext() const { theme, setTheme } = useTheme() const { ref: projectRef } = useParams() const { setIsOpen } = useCommandMenu() const snap = useAppStateSnapshot() const signOut = useSignOut() const navLayoutV2 = useFlag('navigationLayoutV2') const isNewAPIDocsEnabled = useIsAPIDocsSidePanelEnabled() const [userDropdownOpen, setUserDropdownOpenState] = useState(false) const { projectAuthAll: authEnabled, projectEdgeFunctionAll: edgeFunctionsEnabled, projectStorageAll: storageEnabled, realtimeAll: realtimeEnabled, } = useIsFeatureEnabled([ 'project_auth:all', 'project_edge_function:all', 'project_storage:all', 'realtime:all', ]) const activeRoute = router.pathname.split('/')[3] const toolRoutes = generateToolRoutes(projectRef, project) const productRoutes = generateProductRoutes(projectRef, project, { auth: authEnabled, edgeFunctions: edgeFunctionsEnabled, storage: storageEnabled, realtime: realtimeEnabled, }) const showWarehouse = useFlag('warehouse') const otherRoutes = generateOtherRoutes(projectRef, project) const settingsRoutes = generateSettingsRoutes(projectRef, project) const onCloseNavigationIconLink = (event: any) => { snap.setNavigationPanelOpen( false, event.target.id === 'icon-link' || ['svg', 'path'].includes(event.target.localName) ) } return (