'use client'
import { useFlag, useParams } from 'common'
import { Home } from 'icons'
import { ChevronLeft } from 'lucide-react'
import { useRouter } from 'next/router'
import React, { useMemo } from 'react'
import { Button, cn, Separator, SidebarGroup, SidebarMenu } from 'ui'
import { GenericSkeletonLoader } from 'ui-patterns/ShimmeringLoader'
import { resolveSectionDisplay } from './MobileMenuContent.utils'
import { getProductMenuComponent } from './mobileProductMenuRegistry'
import { TopLevelRouteItem } from './TopLevelRouteItem'
import { routeHasSubmenu, useMobileMenuNavigation } from './useMobileMenuNavigation'
import { ICON_SIZE, ICON_STROKE_WIDTH } from '@/components/interfaces/Sidebar'
import {
generateProductRoutes,
generateSettingsRoutes,
useGenerateOtherRoutes,
useGenerateToolRoutes,
} from '@/components/layouts/Navigation/NavigationBar/NavigationBar.utils'
import type { Route } from '@/components/ui/ui.types'
import { useIsFeatureEnabled } from '@/hooks/misc/useIsFeatureEnabled'
import { useSelectedProjectQuery } from '@/hooks/misc/useSelectedProject'
import { getPathnameWithoutQuery, getPathSegment } from '@/lib/pathname.utils'
export interface MobileMenuContentProps {
currentProductMenu: React.ReactNode
currentProduct: string
currentSectionKey: string | null
onCloseSheet?: () => void
}
export function MobileMenuContent({
currentProductMenu,
currentProduct,
currentSectionKey,
onCloseSheet,
}: MobileMenuContentProps) {
const router = useRouter()
const { ref } = useParams()
const { data: project } = useSelectedProjectQuery()
const pathname = getPathnameWithoutQuery(router.asPath, router.pathname)
const activeRoute = getPathSegment(pathname, 3)
const { viewLevel, selectedSectionKey, handleTopLevelClick, handleBackToTop } =
useMobileMenuNavigation({
currentSectionKey,
hasCurrentProductMenu: !!currentProductMenu,
onCloseSheet,
})
const {
projectAuthAll: authEnabled,
projectEdgeFunctionAll: edgeFunctionsEnabled,
projectStorageAll: storageEnabled,
realtimeAll: realtimeEnabled,
} = useIsFeatureEnabled([
'project_auth:all',
'project_edge_function:all',
'project_storage:all',
'realtime:all',
])
const authOverviewPageEnabled = useFlag('authOverviewPage')
const workersEnabled = useFlag('workers')
const toolRoutes = useGenerateToolRoutes()
const productRoutes = useMemo(
() =>
generateProductRoutes(ref, project, {
auth: authEnabled,
edgeFunctions: edgeFunctionsEnabled,
storage: storageEnabled,
realtime: realtimeEnabled,
authOverviewPage: authOverviewPageEnabled,
workers: workersEnabled,
}),
[
ref,
project,
authEnabled,
edgeFunctionsEnabled,
storageEnabled,
realtimeEnabled,
authOverviewPageEnabled,
workersEnabled,
]
)
const otherRoutes = useGenerateOtherRoutes()
const settingsRoutes = useMemo(() => generateSettingsRoutes(ref), [ref])
const homeRoute: Route = useMemo(
() => ({
key: 'HOME',
label: 'Project Overview',
icon: