import { FC, useState } from 'react' import { observer } from 'mobx-react-lite' import { partition, isNull } from 'lodash' import { Input, IconSearch, IconAlertCircle } from '@supabase/ui' import { PermissionAction } from '@supabase/shared-types/out/constants' import { useStore, useFlag, checkPermissions } from 'hooks' import ExtensionCard from './ExtensionCard' import { HIDDEN_EXTENSIONS } from './Extensions.constants' import NoSearchResults from 'components/to-be-cleaned/NoSearchResults' import InformationBox from 'components/ui/InformationBox' interface Props {} const Extensions: FC = ({}) => { const { meta } = useStore() const [filterString, setFilterString] = useState('') const enableVaultExtension = useFlag('vaultExtension') const hiddenExtensions = enableVaultExtension ? HIDDEN_EXTENSIONS : HIDDEN_EXTENSIONS.concat(['vault']) const extensions = filterString.length === 0 ? meta.extensions.list() : meta.extensions.list((ext: any) => ext.name.includes(filterString)) const extensionsWithoutHidden = extensions.filter( (ext: any) => !hiddenExtensions.includes(ext.name) ) const [enabledExtensions, disabledExtensions] = partition( extensionsWithoutHidden, (ext: any) => !isNull(ext.installed_version) ) const canUpdateExtentions = checkPermissions( PermissionAction.TENANT_SQL_ADMIN_WRITE, 'extensions' ) return (
setFilterString(e.target.value)} icon={} /> {!canUpdateExtentions && (
} title="You need additional permissions to update database extensions" />
)}
{extensions.length === 0 && }
{enabledExtensions.length > 0 && (

Enabled extensions

{enabledExtensions.map((extension) => ( ))}
)} {disabledExtensions.length > 0 && (

Available extensions

{disabledExtensions.map((extension) => ( ))}
)}
) } export default observer(Extensions)