mirror of
https://github.com/supabase/supabase.git
synced 2026-05-09 18:30:12 -04:00
23c827bdda
- consolidate `top level menu` and `contextual menu` into nested menu on mobile - remove legacy mobile submenu
52 lines
1.2 KiB
TypeScript
52 lines
1.2 KiB
TypeScript
import type { ReactNode } from 'react'
|
|
|
|
export interface OrgNavItem {
|
|
label: string
|
|
href: string
|
|
key: string
|
|
icon: ReactNode
|
|
}
|
|
|
|
export function getOrgActiveRoute(pathname: string): string | undefined {
|
|
const segments = pathname.split('/').filter(Boolean)
|
|
const orgIndex = segments.indexOf('org')
|
|
if (orgIndex === -1 || segments.length <= orgIndex + 1) return undefined
|
|
return segments[orgIndex + 2]
|
|
}
|
|
|
|
const ORG_SETTINGS_ROUTES: string[] = [
|
|
'general',
|
|
'apps',
|
|
'audit',
|
|
'documents',
|
|
'security',
|
|
'sso',
|
|
] as const
|
|
|
|
export function getOrgSectionKeyFromPathname(activeRoute: string | undefined): string | null {
|
|
if (activeRoute && ORG_SETTINGS_ROUTES.includes(activeRoute)) {
|
|
return 'settings'
|
|
}
|
|
return null
|
|
}
|
|
|
|
export function isOrgMenuActive(
|
|
item: OrgNavItem,
|
|
index: number,
|
|
pathname: string,
|
|
activeRoute: string | undefined
|
|
): boolean {
|
|
if (index === 0) {
|
|
return activeRoute === undefined
|
|
}
|
|
if (item.key === 'settings') {
|
|
const route = activeRoute ?? getOrgActiveRoute(pathname)
|
|
if (route === undefined) return false
|
|
return (
|
|
route === 'settings' ||
|
|
ORG_SETTINGS_ROUTES.includes(route as (typeof ORG_SETTINGS_ROUTES)[number])
|
|
)
|
|
}
|
|
return activeRoute === item.key
|
|
}
|