From 474c125da46f042ee4b93c7b6dfe0c5ccdad8de9 Mon Sep 17 00:00:00 2001 From: Alaister Young Date: Tue, 7 Apr 2026 15:06:22 +0900 Subject: [PATCH] fix(studio): handle undefined connectionStringPooler in connect sheet (#44611) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Follow-up to #44471. Fixes Sentry error: `can't access property "ipv4SupportedForDedicatedPooler", g is undefined`. `connectionStringPooler` can be `undefined` when the databases query hasn't resolved yet (returns `[]` by default, so the lookup object is empty). Added optional chaining + explicit typing. ## To test - Open the connect sheet on any project — should render without errors - Check that IPv4 status panel still displays correctly once loaded ## Summary by CodeRabbit * **Refactor** * Improved type safety and robustness in connection pooler configuration handling for more reliable IPv4 capability detection. Co-authored-by: Alaister Young <10985857+alaister@users.noreply.github.com> Co-authored-by: Claude Opus 4.6 (1M context) --- .../content/steps/direct-connection/content.tsx | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/apps/studio/components/interfaces/ConnectSheet/content/steps/direct-connection/content.tsx b/apps/studio/components/interfaces/ConnectSheet/content/steps/direct-connection/content.tsx index af67c0bbfe7..2847e037999 100644 --- a/apps/studio/components/interfaces/ConnectSheet/content/steps/direct-connection/content.tsx +++ b/apps/studio/components/interfaces/ConnectSheet/content/steps/direct-connection/content.tsx @@ -14,7 +14,10 @@ import { type ConnectionStringMethod, type DatabaseConnectionType, } from '@/components/interfaces/ConnectSheet/Connect.constants' -import type { StepContentProps } from '@/components/interfaces/ConnectSheet/Connect.types' +import type { + ConnectionStringPooler, + StepContentProps, +} from '@/components/interfaces/ConnectSheet/Connect.types' import { ConnectionParameters } from '@/components/interfaces/ConnectSheet/ConnectionParameters' import { buildConnectionParameters, @@ -134,9 +137,9 @@ function DirectConnectionContent({ state }: StepContentProps) { const useSharedPooler = Boolean(state.useSharedPooler) const connectionStrings = useConnectionStringDatabases() - const connectionStringPooler = + const connectionStringPooler: ConnectionStringPooler | undefined = connectionStrings[connectionSource as keyof typeof connectionStrings] - const hasIPv4Addon = connectionStringPooler.ipv4SupportedForDedicatedPooler + const hasIPv4Addon = connectionStringPooler?.ipv4SupportedForDedicatedPooler ?? false // Determine which connection string to use const resolvedConnectionString = useMemo(