import { useRouter } from 'next/router' import { PropsWithChildren, ReactNode } from 'react' import { useParams } from 'common' import { Markdown } from 'components/interfaces/Markdown' import { useDatabaseExtensionsQuery } from 'data/database-extensions/database-extensions-query' import { useSelectedProjectQuery } from 'hooks/misc/useSelectedProject' import { Alert_Shadcn_, AlertDescription_Shadcn_, Badge, Separator } from 'ui' import { INTEGRATIONS } from '../Landing/Integrations.constants' import { BuiltBySection } from './BuildBySection' import { MarkdownContent } from './MarkdownContent' import { MissingExtensionAlert } from './MissingExtensionAlert' interface IntegrationOverviewTabProps { actions?: ReactNode } export const IntegrationOverviewTab = ({ actions, children, }: PropsWithChildren) => { const { id } = useParams() const router = useRouter() 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 (
{dependsOnExtension && (
Supabase Postgres Module `\`${x}\``).join(', ')} extension${integration.requiredExtensions.length > 1 ? 's' : ''} directly in your Postgres database. ${hasToInstallExtensions && !hasMissingExtensions ? `Install ${integration.requiredExtensions.length > 1 ? 'these' : 'this'} database extension${integration.requiredExtensions.length > 1 ? 's' : ''} to use ${integration.name} in your project.` : ''} `} /> {hasMissingExtensions ? ( integration.missingExtensionsAlert ) : (
{installableExtensions.map((extension) => ( ))}
)}
)} {!!actions && !hasToInstallExtensions &&
{actions}
} {children}
) }