Home / Function/ ConnectTabContent() — supabase Function Reference

ConnectTabContent() — supabase Function Reference

Architecture documentation for the ConnectTabContent() function in ConnectTabContent.tsx from the supabase codebase.

Entity Profile

Dependency Diagram

graph TD
  75818850_185c_a647_3c04_dd4a89a6621f["ConnectTabContent()"]
  e1a800f6_40cd_bb1e_2d8c_b45c1e9bdecb["getAddons()"]
  75818850_185c_a647_3c04_dd4a89a6621f -->|calls| e1a800f6_40cd_bb1e_2d8c_b45c1e9bdecb
  5d0c8f95_0a85_540b_b07a_4f89470a9135["getConnectionStrings()"]
  75818850_185c_a647_3c04_dd4a89a6621f -->|calls| 5d0c8f95_0a85_540b_b07a_4f89470a9135
  style 75818850_185c_a647_3c04_dd4a89a6621f fill:#6366f1,stroke:#818cf8,color:#fff

Relationship Graph

Source Code

apps/studio/components/interfaces/Connect/ConnectTabContent.tsx lines 34–130

  ({ projectKeys, filePath, connectionTab, selectedFrameworkOrTool, ...props }, ref) => {
    const { ref: projectRef } = useParams()
    const track = useTrack()
    const { data: selectedOrg } = useSelectedOrganizationQuery()
    const allowPgBouncerSelection = useMemo(() => selectedOrg?.plan.id !== 'free', [selectedOrg])

    const handleCopy = () => {
      const trackingProperties: {
        connectionTab: 'App Frameworks' | 'Mobile Frameworks' | 'ORMs'
        selectedItem: string
        connectionType?: string
        lang?: string
      } = {
        connectionTab,
        selectedItem: selectedFrameworkOrTool,
      }

      // Only include connectionType and lang for App Frameworks and Mobile Frameworks
      if (connectionTab !== 'ORMs') {
        trackingProperties.connectionType = 'Framework snippet'
        trackingProperties.lang = filePath.split('/').pop() ?? 'unknown'
      }

      track('connection_string_copied', trackingProperties)
    }

    const { data: settings } = useProjectSettingsV2Query({ projectRef })
    const { data: pgbouncerConfig } = usePgbouncerConfigQuery({ projectRef })
    const { data: supavisorConfig } = useSupavisorConfigurationQuery({ projectRef })
    const { data: addons } = useProjectAddonsQuery({ projectRef })
    const { ipv4: ipv4Addon } = getAddons(addons?.selected_addons ?? [])

    const DB_FIELDS = ['db_host', 'db_name', 'db_port', 'db_user', 'inserted_at']
    const emptyState = { db_user: '', db_host: '', db_port: '', db_name: '' }
    const connectionInfo = pluckObjectFields(settings || emptyState, DB_FIELDS)
    const poolingConfigurationShared = supavisorConfig?.find((x) => x.database_type === 'PRIMARY')
    const poolingConfigurationDedicated = allowPgBouncerSelection ? pgbouncerConfig : undefined

    const connectionStringsShared = getConnectionStrings({
      connectionInfo,
      poolingInfo: {
        connectionString: poolingConfigurationShared?.connection_string ?? '',
        db_host: poolingConfigurationShared?.db_host ?? '',
        db_name: poolingConfigurationShared?.db_name ?? '',
        db_port: poolingConfigurationShared?.db_port ?? 0,
        db_user: poolingConfigurationShared?.db_user ?? '',
      },
      metadata: { projectRef },
    })

    const connectionStringsDedicated =
      poolingConfigurationDedicated !== undefined
        ? getConnectionStrings({
            connectionInfo,
            poolingInfo: {
              connectionString: poolingConfigurationDedicated.connection_string,
              db_host: poolingConfigurationDedicated.db_host,
              db_name: poolingConfigurationDedicated.db_name,
              db_port: poolingConfigurationDedicated.db_port,
              db_user: poolingConfigurationDedicated.db_user,
            },
            metadata: { projectRef },
          })
        : undefined

    const ContentFile = useMemo(() => {
      return dynamic<ConnectContentTabProps>(() => import(`./content/${filePath}/content`), {
        loading: () => (
          <div className="p-4 min-h-[331px]">
            <GenericSkeletonLoader />
          </div>
        ),
      })
    }, [filePath])

    return (
      <div ref={ref} {...props} className={cn('border rounded-lg', props.className)}>
        <CopyCallbackContext.Provider value={handleCopy}>
          <ContentFile
            projectKeys={projectKeys}
            filePath={filePath}
            connectionTab={connectionTab}
            selectedFrameworkOrTool={selectedFrameworkOrTool}
            connectionStringPooler={{
              transactionShared: connectionStringsShared.pooler.uri,
              sessionShared: connectionStringsShared.pooler.uri.replace('6543', '5432'),
              transactionDedicated: connectionStringsDedicated?.pooler.uri,
              sessionDedicated: connectionStringsDedicated?.pooler.uri.replace('6543', '5432'),
              ipv4SupportedForDedicatedPooler: !!ipv4Addon,
              direct: connectionStringsShared.direct.uri,
            }}
            onCopy={handleCopy}
          />
        </CopyCallbackContext.Provider>
      </div>
    )
  }

Subdomains

Frequently Asked Questions

What does ConnectTabContent() do?
ConnectTabContent() is a function in the supabase codebase.
What does ConnectTabContent() call?
ConnectTabContent() calls 2 function(s): getAddons, getConnectionStrings.

Analyze Your Own Codebase

Get architecture documentation, dependency graphs, and domain analysis for your codebase in minutes.

Try Supermodel Free