From 0a5a5f8d76458e4990e689c3c53e1ba588a590fc Mon Sep 17 00:00:00 2001 From: Max Topolsky <30879163+mtopo27@users.noreply.github.com> Date: Tue, 7 Apr 2026 11:27:08 -0400 Subject: [PATCH 1/2] fix(notifications): Handle null provider in organization integrations filter The organization integrations filter crashes when an entry has a null provider, causing the notification settings page to error. Add optional chaining to match the pattern already used for identity filtering. Co-Authored-By: Claude Opus 4.6 --- .../account/notifications/notificationSettingsByType.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/static/app/views/settings/account/notifications/notificationSettingsByType.tsx b/static/app/views/settings/account/notifications/notificationSettingsByType.tsx index 9d55ec256598b6..6062a71ca3e8f8 100644 --- a/static/app/views/settings/account/notifications/notificationSettingsByType.tsx +++ b/static/app/views/settings/account/notifications/notificationSettingsByType.tsx @@ -103,7 +103,7 @@ export function NotificationSettingsByType({notificationType}: Props) { {staleTime: 30_000} ); const organizationIntegrations = allOrgIntegrations.filter(orgIntegration => - ALLOWED_PROVIDERS.has(orgIntegration.provider.key as SupportedProviders) + ALLOWED_PROVIDERS.has(orgIntegration?.provider?.key as SupportedProviders) ); const {data: defaultSettings, status: defaultSettingsStatus} = useApiQuery([getApiUrl('/notification-defaults/')], { From cf686aa28287126bf772f39f4be4a0cfdaa4b6f7 Mon Sep 17 00:00:00 2001 From: Max Topolsky <30879163+mtopo27@users.noreply.github.com> Date: Tue, 7 Apr 2026 12:23:19 -0400 Subject: [PATCH 2/2] fix(notifications): Fix types for nullable organization integrations Update the useApiQuery type parameter to Array to reflect that entries can be null. Add a type guard on the filter so downstream code retains the narrowed OrganizationIntegration type. Remove unnecessary optional chaining on provider.key since a non-null integration should always have a provider. Co-Authored-By: Claude Opus 4.6 --- .../account/notifications/notificationSettingsByType.tsx | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/static/app/views/settings/account/notifications/notificationSettingsByType.tsx b/static/app/views/settings/account/notifications/notificationSettingsByType.tsx index 6062a71ca3e8f8..217e5ecf464635 100644 --- a/static/app/views/settings/account/notifications/notificationSettingsByType.tsx +++ b/static/app/views/settings/account/notifications/notificationSettingsByType.tsx @@ -98,12 +98,13 @@ export function NotificationSettingsByType({notificationType}: Props) { ); const {data: allOrgIntegrations = [], status: organizationIntegrationStatus} = - useApiQuery( + useApiQuery>( [getApiUrl('/users/$userId/organization-integrations/', {path: {userId: 'me'}})], {staleTime: 30_000} ); - const organizationIntegrations = allOrgIntegrations.filter(orgIntegration => - ALLOWED_PROVIDERS.has(orgIntegration?.provider?.key as SupportedProviders) + const organizationIntegrations = allOrgIntegrations.filter( + (orgIntegration): orgIntegration is OrganizationIntegration => + ALLOWED_PROVIDERS.has(orgIntegration?.provider.key as SupportedProviders) ); const {data: defaultSettings, status: defaultSettingsStatus} = useApiQuery([getApiUrl('/notification-defaults/')], {