import { type Dispatch, type SetStateAction } from 'react' import { Accordion, AccordionContent, AccordionItem, AccordionTrigger, Badge, Select, SelectContent, SelectItem, SelectSeparator, SelectTrigger, SelectValue, SheetSection, } from 'ui' import { Input } from 'ui-patterns/DataInputs/Input' import { FormItemLayout } from 'ui-patterns/form/FormItemLayout/FormItemLayout' import { getExtensionDefaultSchema } from '../IntegrationOverviewTabV2.utils' import { type ExtensionsSchema, type InstallIntegrationSheetProps } from './InstallIntegrationSheet' import { extensionsWithRecommendedSchemas } from '@/components/interfaces/Database/Extensions/Extensions.constants' import { useDatabaseExtensionsQuery } from '@/data/database-extensions/database-extensions-query' import { useSchemasQuery } from '@/data/database/schemas-query' import { useSelectedProjectQuery } from '@/hooks/misc/useSelectedProject' import { useProtectedSchemas } from '@/hooks/useProtectedSchemas' type AdvancedSettingsProps = InstallIntegrationSheetProps & { extensionsSchema: ExtensionsSchema setExtensionsSchema: Dispatch> } export const AdvancedSettings = ({ integration, extensionsSchema, setExtensionsSchema, }: AdvancedSettingsProps) => { const { data: project } = useSelectedProjectQuery() const { data: protectedSchemas } = useProtectedSchemas({ excludeSchemas: ['extensions'] }) const { requiredExtensions: requiredExtensionNames } = integration const involvesExtensions = requiredExtensionNames.length > 0 const { data: extensions = [] } = useDatabaseExtensionsQuery( { projectRef: project?.ref, connectionString: project?.connectionString }, { enabled: involvesExtensions } ) const { data: schemas = [] } = useSchemasQuery( { projectRef: project?.ref, connectionString: project?.connectionString }, { enabled: involvesExtensions } ) const availableSchemas = schemas.filter( (schema) => !protectedSchemas.some((protectedSchema) => protectedSchema.name === schema.name) ) return ( Advanced settings

Select which schemas to install the database extensions under

{requiredExtensionNames.map((extName) => { const ext = extensions.find((x) => x.name === extName) const extMeta = extensionsSchema[extName] const { schema, value } = extMeta const recommendedSchema = extensionsWithRecommendedSchemas[extName] const defaultSchema = getExtensionDefaultSchema(ext) return ( Installed in {ext.schema} schema ) : defaultSchema ? ( <> Must be installed in the{' '} {defaultSchema} schema ) : recommendedSchema ? ( <> Use the {recommendedSchema} schema for full compatibility with related features ) : undefined } > {schema === 'custom' && ( setExtensionsSchema((prev) => ({ ...prev, [extName]: { schema: prev[extName].schema, value: e.target.value, }, })) } placeholder="Provide a name for your schema" /> )} ) })}
) }