import { useTheme } from 'common/Providers' import Image from 'next/image' import Link from 'next/link' import { useRouter } from 'next/router' import { useEffect, useState, memo } from 'react' import NavigationMenuCliList from './NavigationMenuCliList' import NavigationMenuGuideList from './NavigationMenuGuideList' import NavigationMenuRefList from './NavigationMenuRefList' import { NavigationMenuContextProvider } from './NavigationMenu.Context' // @ts-expect-error import jsSpecNEW from '~/../../spec/supabase_js_v2_temp_new_shape.yml' assert { type: 'yml' } // @ts-expect-error import dartSpecNEW from '~/../../spec/supabase_dart_v1_temp_new_shape.yml' assert { type: 'yml' } const SideNav = () => { const router = useRouter() const { isDarkMode } = useTheme() const [level, setLevel] = useState('home') function handleRouteChange(url: string) { switch (url) { case `/docs`: setLevel('home') break case url.includes(`/docs/getting-started`) && url: setLevel('gettingstarted') break case url.includes(`/docs/guides/tutorials`) && url: setLevel('tutorials') break case url.includes(`/docs/guides/database`) && url: setLevel('database') break case url.includes(`/docs/guides/auth`) && url: setLevel('auth') break case url.includes(`/docs/guides/storage`) && url: setLevel('storage') break case url.includes(`/docs/guides/realtime`) && url: setLevel('realtime') break case url.includes(`/docs/guides/functions`) && url: setLevel('functions') break case url.includes(`/docs/guides/integrations`) && url: setLevel('integrations') break case url.includes(`/docs/guides/platform`) || (url.includes(`/docs/guides/hosting/platform`) && url): setLevel('platform') break case url.includes(`/docs/guides/resources`) && url: setLevel('resources') break case url.includes(`/docs/reference/javascript`) && url: setLevel('reference_javascript') break case url.includes(`/docs/reference/dart`) && url: setLevel('reference_dart') break case url.includes(`/docs/reference/cli`) && url: setLevel('reference_cli') break default: break } } useEffect(() => { handleRouteChange(router.basePath + router.asPath) // Listen for page changes after a navigation or when the query changes router.events.on('routeChangeComplete', handleRouteChange) return () => { router.events.off('routeChangeComplete', handleRouteChange) } }, [router.events]) const home = [ [ { label: 'Home', icon: '/img/icons/menu/home', href: '/', level: 'home', }, { label: 'Getting started', icon: '/img/icons/menu/getting-started', href: '/getting-started', level: 'gettingstarted', }, { label: 'Tutorials', icon: '/img/icons/menu/tutorials', href: '/guides/tutorials', level: 'tutorials', }, ], [ { label: 'Database', icon: '/img/icons/menu/database', href: '/guides/database', level: 'database', }, { label: 'Auth', icon: '/img/icons/menu/auth', href: '/guides/auth', level: 'auth', }, { label: 'Storage', icon: '/img/icons/menu/storage', href: '/guides/storage', level: 'storage', }, { label: 'Realtime', icon: '/img/icons/menu/realtime', href: '/guides/realtime', level: 'realtime', }, { label: 'Edge Functions', icon: '/img/icons/menu/functions', href: '/guides/functions', level: 'functions', }, ], [ { label: 'Platform', icon: '/img/icons/menu/platform', href: '/guides/hosting/platform', level: 'platform', }, { label: 'Integrations', icon: '/img/icons/menu/integrations', href: '/guides/integrations', level: 'integrations', }, { label: 'Resources', icon: '/img/icons/menu/platform', href: '/guides/resources', level: 'resources', }, ], [ { label: 'Client Library Reference', }, { label: 'JavaScript Client', icon: '/img/icons/javascript-icon', hasLightIcon: false, href: '/reference/javascript/start', level: 'reference_javascript', }, // { // label: 'Python Client Library', // icon: '/img/icons/python-icon', // hasLightIcon: false, // href: '/reference/javascript/start', // level: 'reference_javascript', // }, { label: 'Dart Client Library', icon: '/img/icons/dart-icon', hasLightIcon: false, href: '/reference/dart/start', level: 'reference_dart', }, { label: 'Tools Reference', }, { label: 'Mangement API', icon: '/img/icons/api-icon', hasLightIcon: false, href: '/reference/api/start', level: 'reference_javascript', }, { label: 'CLI', icon: '/img/icons/cli-icon', hasLightIcon: false, href: '/reference/cli/start', level: 'reference_javascript', }, { label: 'Self hosting server', icon: '/img/icons/menu/platform', href: '/reference/javascript/start', level: 'reference_javascript', }, ], ] return (