import { Badge, Card, CardContent, cn, Separator } from 'ui' import { useIsMarketplaceEnabled } from '../../App/FeaturePreview/FeaturePreviewContext' import { MissingExtensionAlert } from './MissingExtensionAlert' import { useIntegrationDetail } from '@/components/interfaces/Integrations/Landing/useIntegrationDetail' import { useDatabaseExtensionsQuery } from '@/data/database-extensions/database-extensions-query' import { useSelectedProjectQuery } from '@/hooks/misc/useSelectedProject' export const RequiredExtensionsSection = ({ hide = false, hideSeparator = false, className, }: { hide?: boolean hideSeparator?: boolean className?: string }) => { const { integration } = useIntegrationDetail() const { data: project } = useSelectedProjectQuery() const { data: extensions } = useDatabaseExtensionsQuery({ projectRef: project?.ref, connectionString: project?.connectionString, }) const isMarketplaceEnabled = useIsMarketplaceEnabled() const requiredExtensions = integration?.requiredExtensions ?? [] if (hide || requiredExtensions.length === 0) return null const installableExtensions = (extensions ?? []).filter((ext) => requiredExtensions.includes(ext.name) ) const hasMissingExtensions = installableExtensions.length !== requiredExtensions.length return ( <> {!hideSeparator && }

Required extensions

    {requiredExtensions.map((requiredExtension, idx) => { const extension = (extensions ?? []).find((ext) => ext.name === requiredExtension) const isInstalled = !!extension?.installed_version const isLastRow = idx === requiredExtensions.length - 1 return (
  • {requiredExtension}
    {extension ? ( isInstalled ? ( Installed ) : isMarketplaceEnabled ? ( Required ) : ( ) ) : ( Unavailable )}
  • ) })}
{hasMissingExtensions && integration?.missingExtensionsAlert && (
{integration.missingExtensionsAlert}
)}
) }