Files
supabase/apps/studio/components/interfaces/APIKeys/hooks/useApiKeysVisibility.ts
T
Joshen Lim d46525eac1 Chore/swap use check permissions with use async check project permissions part 8 (Season Finale) (#38619)
* Update perms checking in audit logs

* Deprecate useCheckPermissions, useIsPermissionsLoaded and useCheckProjectPermissions as they're no longer used

* Rename useAsyncCheckProjectPermissions to useAsyncCheckPermissions

* Fix TS
2025-09-16 17:05:57 +08:00

52 lines
1.6 KiB
TypeScript

import { PermissionAction } from '@supabase/shared-types/out/constants'
import { useMemo } from 'react'
import { useParams } from 'common'
import { useAPIKeysQuery } from 'data/api-keys/api-keys-query'
import { useAsyncCheckPermissions } from 'hooks/misc/useCheckPermissions'
interface ApiKeysVisibilityState {
hasApiKeys: boolean
isLoading: boolean
canReadAPIKeys: boolean
canInitApiKeys: boolean
shouldDisableUI: boolean
}
/**
* A hook that provides visibility states for API keys UI components
* Consolidates logic for determining access to API keys functionality
*/
export function useApiKeysVisibility(): ApiKeysVisibilityState {
const { ref: projectRef } = useParams()
const { can: canReadAPIKeys } = useAsyncCheckPermissions(PermissionAction.READ, 'api_keys')
const { data: apiKeysData, isLoading } = useAPIKeysQuery({
projectRef,
reveal: false,
})
const publishableApiKeys = useMemo(
() => apiKeysData?.filter(({ type }) => type === 'publishable') ?? [],
[apiKeysData]
)
// Check if there are any publishable API keys
// we don't check for secret keys because they can be optionally deleted
const hasApiKeys = publishableApiKeys.length > 0
// Can initialize API keys when in rollout, has permissions, not loading, and no API keys yet
const canInitApiKeys = canReadAPIKeys && !isLoading && !hasApiKeys
// Disable UI for publishable keys and secrets keys if flag is not enabled OR no API keys created yet
const shouldDisableUI = !hasApiKeys
return {
hasApiKeys,
isLoading,
canReadAPIKeys,
canInitApiKeys,
shouldDisableUI,
}
}