import { Key } from 'lucide-react'
import { useMemo } from 'react'
import { useParams } from 'common'
import type { showApiKey } from 'components/interfaces/Docs/Docs.types'
import { useAPIKeysQuery } from 'data/api-keys/api-keys-query'
import {
Button,
DropdownMenu,
DropdownMenuContent,
DropdownMenuGroup,
DropdownMenuLabel,
DropdownMenuRadioGroup,
DropdownMenuRadioItem,
DropdownMenuSeparator,
DropdownMenuTrigger,
} from 'ui'
const DEFAULT_KEY = { name: 'hide', key: 'SUPABASE_KEY' }
interface LangSelectorProps {
selectedLang: string
selectedApiKey: showApiKey
setSelectedLang: (selectedLang: string) => void
setSelectedApiKey: (showApiKey: showApiKey) => void
}
const LangSelector = ({
selectedLang,
selectedApiKey,
setSelectedLang,
setSelectedApiKey,
}: LangSelectorProps) => {
const { ref: projectRef } = useParams()
const { data: apiKeys = [], isLoading: isLoadingAPIKeys } = useAPIKeysQuery({
projectRef,
reveal: false,
})
const legacyKeys = useMemo(() => apiKeys.filter(({ type }) => type === 'legacy'), [apiKeys])
const publishableKeys = useMemo(
() => apiKeys.filter(({ type }) => type === 'publishable'),
[apiKeys]
)
const secretKeys = useMemo(() => apiKeys.filter(({ type }) => type === 'secret'), [apiKeys])
return (
{selectedLang == 'bash' && !isLoadingAPIKeys && apiKeys && apiKeys.length > 0 && (
Project API key:
setSelectedApiKey(DEFAULT_KEY)}
>
Hide keys
{publishableKeys.length > 0 && (
<>
Publishable keys
{publishableKeys.map((key) => {
const value = key.api_key
return (
setSelectedApiKey({
name: `Publishable key: ${key.name}`,
key: value,
})
}
>
{key.name}
)
})}
>
)}
{secretKeys.length > 0 && (
<>
Secret keys
{secretKeys.map((key) => {
const value = key.prefix + '...'
return (
setSelectedApiKey({ name: `Secret key: ${key.name}`, key: value })
}
>
{key.name}
)
})}
>
)}
JWT-based legacy keys
{legacyKeys.map((key) => {
const value = key.api_key
return (
setSelectedApiKey({ name: `Legacy key: ${key.name}`, key: value })
}
>
{key.name}
)
})}
)}
)
}
export default LangSelector