AuthLayout.tsx 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. import { useParams } from 'common'
  2. import { useRouter } from 'next/router'
  3. import type { PropsWithChildren } from 'react'
  4. import { ProjectLayout } from '../ProjectLayout'
  5. import { useGenerateAuthMenu } from './AuthLayout.utils'
  6. import { ProductMenu } from '@/components/ui/ProductMenu'
  7. import { ProductMenuShortcuts } from '@/components/ui/ProductMenu/ProductMenuShortcuts'
  8. import { useAuthConfigPrefetch } from '@/data/auth/auth-config-query'
  9. import { withAuth } from '@/hooks/misc/withAuth'
  10. export const AuthProductMenu = () => {
  11. const router = useRouter()
  12. const { ref: projectRef = 'default' } = useParams()
  13. useAuthConfigPrefetch({ projectRef })
  14. const page = router.pathname.split('/')[4]
  15. const menu = useGenerateAuthMenu()
  16. return <ProductMenu page={page} menu={menu} />
  17. }
  18. const AuthLayout = ({ title, children }: PropsWithChildren<{ title: string }>) => {
  19. const router = useRouter()
  20. const { ref: projectRef = 'default' } = useParams()
  21. useAuthConfigPrefetch({ projectRef })
  22. const page = router.pathname.split('/')[4]
  23. const menu = useGenerateAuthMenu()
  24. return (
  25. <ProjectLayout
  26. product="authentication"
  27. browserTitle={{ section: title }}
  28. productMenu={<ProductMenu page={page} menu={menu} />}
  29. isBlocking={false}
  30. >
  31. <ProductMenuShortcuts menu={menu} />
  32. {children}
  33. </ProjectLayout>
  34. )
  35. }
  36. /**
  37. * Layout for all auth pages on the dashboard, wrapped with withAuth to verify logged in state
  38. *
  39. * Handles rendering the navigation for each section under the auth pages.
  40. */
  41. export default withAuth(AuthLayout)