useRegisterOrgMenu.tsx 1.0 KB

123456789101112131415161718192021222324252627
  1. 'use client'
  2. import { useRouter } from 'next/router'
  3. import { useLayoutEffect } from 'react'
  4. import { useMobileSheet } from '../Navigation/NavigationBar/MobileSheetContext'
  5. import { OrgMenuContent } from '../ProjectLayout/LayoutHeader/MobileMenuContent/OrgMenuContent'
  6. import { getPathnameWithoutQuery, isOrgMenuScope } from './OrganizationLayout.utils'
  7. /**
  8. * Registers the org menu with the mobile sheet when in org scope (/org/...).
  9. * Unregisters when navigating away. Call from OrganizationLayout.
  10. */
  11. export function useRegisterOrgMenu() {
  12. const router = useRouter()
  13. const { setContent: setMobileSheetContent, registerOpenMenu } = useMobileSheet()
  14. useLayoutEffect(() => {
  15. const pathname = getPathnameWithoutQuery(router.asPath, router.pathname)
  16. if (!isOrgMenuScope(pathname)) return
  17. const unregister = registerOpenMenu(() => {
  18. setMobileSheetContent(<OrgMenuContent onCloseSheet={() => setMobileSheetContent(null)} />)
  19. })
  20. return unregister
  21. }, [router.asPath, router.pathname, registerOpenMenu, setMobileSheetContent])
  22. }