OrgMenuContent.utils.ts 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. import type { ReactNode } from 'react'
  2. export interface OrgNavItem {
  3. label: string
  4. href: string
  5. key: string
  6. icon: ReactNode
  7. }
  8. export function getOrgActiveRoute(pathname: string): string | undefined {
  9. const segments = pathname.split('/').filter(Boolean)
  10. const orgIndex = segments.indexOf('org')
  11. if (orgIndex === -1 || segments.length <= orgIndex + 1) return undefined
  12. return segments[orgIndex + 2]
  13. }
  14. const ORG_SETTINGS_ROUTES: string[] = [
  15. 'general',
  16. 'apps',
  17. 'audit',
  18. 'documents',
  19. 'security',
  20. 'sso',
  21. ] as const
  22. export function getOrgSectionKeyFromPathname(activeRoute: string | undefined): string | null {
  23. if (activeRoute && ORG_SETTINGS_ROUTES.includes(activeRoute)) {
  24. return 'settings'
  25. }
  26. return null
  27. }
  28. export function isOrgMenuActive(
  29. item: OrgNavItem,
  30. index: number,
  31. pathname: string,
  32. activeRoute: string | undefined
  33. ): boolean {
  34. if (index === 0) {
  35. return activeRoute === undefined
  36. }
  37. if (item.key === 'settings') {
  38. const route = activeRoute ?? getOrgActiveRoute(pathname)
  39. if (route === undefined) return false
  40. return (
  41. route === 'settings' ||
  42. ORG_SETTINGS_ROUTES.includes(route as (typeof ORG_SETTINGS_ROUTES)[number])
  43. )
  44. }
  45. return activeRoute === item.key
  46. }