import { FC, useEffect, useState } from 'react' import { observer } from 'mobx-react-lite' import { partition, isNull } from 'lodash' import { Input, IconSearch, IconAlertCircle, Button, IconBookOpen } from 'ui' import { PermissionAction } from '@supabase/shared-types/out/constants' import { useStore, checkPermissions } from 'hooks' import { useParams } from 'common/hooks' import ExtensionCard from './ExtensionCard' import { HIDDEN_EXTENSIONS } from './Extensions.constants' import NoSearchResults from 'components/ui/NoSearchResults' import InformationBox from 'components/ui/InformationBox' import Link from 'next/link' interface Props {} const Extensions: FC = ({}) => { const { meta } = useStore() const { filter } = useParams() const [filterString, setFilterString] = useState('') const extensions = filterString.length === 0 ? meta.extensions.list() : meta.extensions.list((ext: any) => ext.name.includes(filterString)) const extensionsWithoutHidden = extensions.filter( (ext: any) => !HIDDEN_EXTENSIONS.includes(ext.name) ) const [enabledExtensions, disabledExtensions] = partition( extensionsWithoutHidden, (ext: any) => !isNull(ext.installed_version) ) const canUpdateExtensions = checkPermissions( PermissionAction.TENANT_SQL_ADMIN_WRITE, 'extensions' ) useEffect(() => { if (filter !== undefined) setFilterString(filter as string) }, [filter]) return (
setFilterString(e.target.value)} icon={} /> {!canUpdateExtensions ? (
} title="You need additional permissions to update database extensions" />
) : ( )}
{extensions.length === 0 && ( setFilterString('')} /> )}
{enabledExtensions.length > 0 && (

Enabled extensions

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

Available extensions

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