import { useParams } from 'common' import { PropsWithChildren, ReactNode } from 'react' import { Badge, Card, CardContent, cn, Separator } from 'ui' import { INTEGRATIONS } from '../Landing/Integrations.constants' import { BuiltBySection } from './BuildBySection' import { MarkdownContent } from './MarkdownContent' import { MissingExtensionAlert } from './MissingExtensionAlert' import { useDatabaseExtensionsQuery } from '@/data/database-extensions/database-extensions-query' import { useSelectedProjectQuery } from '@/hooks/misc/useSelectedProject' export interface IntegrationOverviewTabProps { actions?: ReactNode status?: string | ReactNode alert?: ReactNode hideRequiredExtensionsSection?: boolean } /** [Joshen] This will eventually get replaced by IntegrationOverviewTabV2 */ export const IntegrationOverviewTab = ({ actions, alert, status, children, hideRequiredExtensionsSection = false, }: PropsWithChildren) => { const { id } = useParams() const { data: project } = useSelectedProjectQuery() const integration = INTEGRATIONS.find((i) => i.id === id) const { data: extensions } = useDatabaseExtensionsQuery({ projectRef: project?.ref, connectionString: project?.connectionString, }) if (!integration) { return
Unsupported integration type
} const dependsOnExtension = (integration.requiredExtensions ?? []).length > 0 const installableExtensions = (extensions ?? []).filter((ext) => (integration.requiredExtensions ?? []).includes(ext.name) ) const hasToInstallExtensions = installableExtensions.some((x) => !x.installed_version) // The integration requires extensions that are not available to install on the current database image const hasMissingExtensions = installableExtensions.length !== integration.requiredExtensions.length return (
{!!alert &&
{alert}
} {dependsOnExtension && !hideRequiredExtensionsSection && (

Required extensions

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