import { PermissionAction } from '@supabase/shared-types/out/constants' import { isNull, partition } from 'lodash' import { observer } from 'mobx-react-lite' import Link from 'next/link' import { useEffect, useState } from 'react' import { Button, IconAlertCircle, IconExternalLink, IconSearch, Input } from 'ui' import { useParams } from 'common/hooks' import InformationBox from 'components/ui/InformationBox' import NoSearchResults from 'components/ui/NoSearchResults' import { useCheckPermissions, useStore } from 'hooks' import ExtensionCard from './ExtensionCard' import { HIDDEN_EXTENSIONS } from './Extensions.constants' const Extensions = () => { 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 = useCheckPermissions( PermissionAction.TENANT_SQL_ADMIN_WRITE, 'extensions' ) useEffect(() => { if (filter !== undefined) setFilterString(filter as string) }, [filter]) return ( <>
setFilterString(e.target.value)} className="w-64" 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)