Files
supabase/apps/studio/components/layouts/ProjectLayout/OrganizationSettingsMenu.tsx
T
kemal.earth a9a1326b92 feat(studio): private apps ui (#43382)
## I have read the
[CONTRIBUTING.md](https://github.com/supabase/supabase/blob/master/CONTRIBUTING.md)
file.

YES

## What kind of change does this PR introduce?

This is a prototype for private apps UI. There are no endpoints at the
minute, just wanted to see what a potential flow could look like.
2026-03-23 10:51:04 -06:00

51 lines
1.8 KiB
TypeScript

import { useFlag, useParams } from 'common'
import { useIsPlatformWebhooksEnabled } from 'components/interfaces/App/FeaturePreview/FeaturePreviewContext'
import { SubMenu } from 'components/ui/ProductMenu/SubMenu'
import { useIsFeatureEnabled } from 'hooks/misc/useIsFeatureEnabled'
import { getPathnameWithoutQuery } from 'lib/pathname.utils'
import { useRouter } from 'next/router'
import {
generateOrganizationSettingsSections,
normalizeOrganizationSettingsPath,
} from './OrganizationSettingsLayout'
export interface OrganizationSettingsMenuProps {
onCloseSheet?: () => void
}
export function OrganizationSettingsMenu({ onCloseSheet }: OrganizationSettingsMenuProps) {
const router = useRouter()
const { slug } = useParams()
const organizationSlug = slug ?? (router.query.orgSlug as string) ?? ''
const pathname = getPathnameWithoutQuery(router.asPath, router.pathname)
const currentPath = normalizeOrganizationSettingsPath(pathname)
const showPlatformWebhooks = useIsPlatformWebhooksEnabled()
const showPrivateApps = useFlag('privateApps')
const {
organizationShowSsoSettings: showSsoSettings,
organizationShowSecuritySettings: showSecuritySettings,
organizationShowLegalDocuments: showLegalDocuments,
} = useIsFeatureEnabled([
'organization:show_sso_settings',
'organization:show_security_settings',
'organization:show_legal_documents',
])
const sections = generateOrganizationSettingsSections({
slug: organizationSlug,
currentPath,
showSecuritySettings: showSecuritySettings,
showSsoSettings,
showLegalDocuments,
showPlatformWebhooks,
showPrivateApps,
})
const page = currentPath.split('/').filter(Boolean).pop()
return <SubMenu sections={sections} page={page} onItemClick={onCloseSheet} />
}