From f5b1104f5eeda1296043a03d9992e99bfa92664e Mon Sep 17 00:00:00 2001 From: rodolfoBee <64906376+rodolfoBee@users.noreply.github.com> Date: Tue, 7 Apr 2026 11:01:57 +0200 Subject: [PATCH 01/10] change query to check all repos, not only the first page. --- .../integrationCodeMappings.tsx | 32 +++++++++++++------ 1 file changed, 22 insertions(+), 10 deletions(-) diff --git a/static/app/views/settings/organizationIntegrations/integrationCodeMappings.tsx b/static/app/views/settings/organizationIntegrations/integrationCodeMappings.tsx index b284a66fd14fcf..e0e8f249f42f83 100644 --- a/static/app/views/settings/organizationIntegrations/integrationCodeMappings.tsx +++ b/static/app/views/settings/organizationIntegrations/integrationCodeMappings.tsx @@ -23,10 +23,13 @@ import type { RepositoryProjectPathConfig, } from 'sentry/types/integrations'; import {trackAnalytics} from 'sentry/utils/analytics'; +import {useFetchAllPages} from 'sentry/utils/api/apiFetch'; +import {apiOptions} from 'sentry/utils/api/apiOptions'; import {getApiUrl} from 'sentry/utils/api/getApiUrl'; import {getIntegrationIcon} from 'sentry/utils/integrationUtil'; import { useApiQuery, + useInfiniteQuery, useMutation, useQueryClient, type ApiQueryKey, @@ -159,19 +162,28 @@ export function IntegrationCodeMappings({integration}: {integration: Integration {staleTime: 10_000} ); + const repositoriesQuery = useInfiniteQuery({ + ...apiOptions.asInfinite()( + '/organizations/$organizationIdOrSlug/repos/', + { + path: {organizationIdOrSlug: organization.slug}, + query: {status: 'active', per_page: 100}, + staleTime: 10_000, + } + ), + select: (data: InfiniteData>) => + data.pages.flatMap((page: ApiResponse) => page.json), + }); + useFetchAllPages({result: repositoriesQuery}); + const { data: fetchedRepos = [], - isPending: isPendingRepos, + isPending: isPendingReposQuery, isError: isErrorRepos, - } = useApiQuery( - [ - getApiUrl(`/organizations/$organizationIdOrSlug/repos/`, { - path: {organizationIdOrSlug: organization.slug}, - }), - {query: {status: 'active'}}, - ], - {staleTime: 10_000} - ); + isFetchingNextPage: isFetchingNextReposPage, +} = repositoriesQuery; + + const isPendingRepos = isPendingReposQuery || isFetchingNextReposPage; const pathConfigs = useMemo(() => { return sortBy(fetchedPathConfigs, [ From 2699072977db28afa0de6d4c135cd5133b7fa7d2 Mon Sep 17 00:00:00 2001 From: "getsantry[bot]" <66042841+getsantry[bot]@users.noreply.github.com> Date: Tue, 7 Apr 2026 09:05:33 +0000 Subject: [PATCH 02/10] :hammer_and_wrench: apply pre-commit fixes --- .../organizationIntegrations/integrationCodeMappings.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/static/app/views/settings/organizationIntegrations/integrationCodeMappings.tsx b/static/app/views/settings/organizationIntegrations/integrationCodeMappings.tsx index e0e8f249f42f83..58d028247708ca 100644 --- a/static/app/views/settings/organizationIntegrations/integrationCodeMappings.tsx +++ b/static/app/views/settings/organizationIntegrations/integrationCodeMappings.tsx @@ -181,7 +181,7 @@ export function IntegrationCodeMappings({integration}: {integration: Integration isPending: isPendingReposQuery, isError: isErrorRepos, isFetchingNextPage: isFetchingNextReposPage, -} = repositoriesQuery; + } = repositoriesQuery; const isPendingRepos = isPendingReposQuery || isFetchingNextReposPage; From f84c9a978d6be2311642c5d968c37c758050ef58 Mon Sep 17 00:00:00 2001 From: Cursor Agent Date: Tue, 7 Apr 2026 10:37:19 +0000 Subject: [PATCH 03/10] fix(integrations): keep repos loading until all pages fetched Co-authored-by: Armen Zambrano G. Applied via @cursor push command --- .../organizationIntegrations/integrationCodeMappings.tsx | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/static/app/views/settings/organizationIntegrations/integrationCodeMappings.tsx b/static/app/views/settings/organizationIntegrations/integrationCodeMappings.tsx index 58d028247708ca..e81da5c845ac3e 100644 --- a/static/app/views/settings/organizationIntegrations/integrationCodeMappings.tsx +++ b/static/app/views/settings/organizationIntegrations/integrationCodeMappings.tsx @@ -180,10 +180,14 @@ export function IntegrationCodeMappings({integration}: {integration: Integration data: fetchedRepos = [], isPending: isPendingReposQuery, isError: isErrorRepos, + hasNextPage: hasNextReposPage, isFetchingNextPage: isFetchingNextReposPage, } = repositoriesQuery; - const isPendingRepos = isPendingReposQuery || isFetchingNextReposPage; + const isPendingRepos = + isPendingReposQuery || + isFetchingNextReposPage || + (!!hasNextReposPage && !isErrorRepos); const pathConfigs = useMemo(() => { return sortBy(fetchedPathConfigs, [ From ce65c25bfba5efc56c0c173e7e88352f0bc79617 Mon Sep 17 00:00:00 2001 From: rodolfoBee <64906376+rodolfoBee@users.noreply.github.com> Date: Tue, 7 Apr 2026 13:03:21 +0200 Subject: [PATCH 04/10] add infiniteData import. --- .../organizationIntegrations/integrationCodeMappings.tsx | 1 + 1 file changed, 1 insertion(+) diff --git a/static/app/views/settings/organizationIntegrations/integrationCodeMappings.tsx b/static/app/views/settings/organizationIntegrations/integrationCodeMappings.tsx index e81da5c845ac3e..16ad4c6d18bbcf 100644 --- a/static/app/views/settings/organizationIntegrations/integrationCodeMappings.tsx +++ b/static/app/views/settings/organizationIntegrations/integrationCodeMappings.tsx @@ -1,4 +1,5 @@ import {Fragment, useCallback, useMemo} from 'react'; +import type {InfiniteData} from '@tanstack/react-query'; import styled from '@emotion/styled'; import sortBy from 'lodash/sortBy'; From dfaa22863d38000f0d5bf31a400731e6b26714ed Mon Sep 17 00:00:00 2001 From: "getsantry[bot]" <66042841+getsantry[bot]@users.noreply.github.com> Date: Tue, 7 Apr 2026 11:04:34 +0000 Subject: [PATCH 05/10] :hammer_and_wrench: apply pre-commit fixes --- .../organizationIntegrations/integrationCodeMappings.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/static/app/views/settings/organizationIntegrations/integrationCodeMappings.tsx b/static/app/views/settings/organizationIntegrations/integrationCodeMappings.tsx index 16ad4c6d18bbcf..f32d5ae2c81e7d 100644 --- a/static/app/views/settings/organizationIntegrations/integrationCodeMappings.tsx +++ b/static/app/views/settings/organizationIntegrations/integrationCodeMappings.tsx @@ -1,6 +1,6 @@ import {Fragment, useCallback, useMemo} from 'react'; -import type {InfiniteData} from '@tanstack/react-query'; import styled from '@emotion/styled'; +import type {InfiniteData} from '@tanstack/react-query'; import sortBy from 'lodash/sortBy'; import {Button, LinkButton} from '@sentry/scraps/button'; From c920d5b6707e66106b52e1ee03dbbad9ca327d2b Mon Sep 17 00:00:00 2001 From: rodolfoBee <64906376+rodolfoBee@users.noreply.github.com> Date: Tue, 7 Apr 2026 13:14:07 +0200 Subject: [PATCH 06/10] fix ApiResponse type import --- .../organizationIntegrations/integrationCodeMappings.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/static/app/views/settings/organizationIntegrations/integrationCodeMappings.tsx b/static/app/views/settings/organizationIntegrations/integrationCodeMappings.tsx index f32d5ae2c81e7d..b48d0bf9ba56aa 100644 --- a/static/app/views/settings/organizationIntegrations/integrationCodeMappings.tsx +++ b/static/app/views/settings/organizationIntegrations/integrationCodeMappings.tsx @@ -1,6 +1,6 @@ import {Fragment, useCallback, useMemo} from 'react'; -import styled from '@emotion/styled'; import type {InfiniteData} from '@tanstack/react-query'; +import styled from '@emotion/styled'; import sortBy from 'lodash/sortBy'; import {Button, LinkButton} from '@sentry/scraps/button'; @@ -24,7 +24,7 @@ import type { RepositoryProjectPathConfig, } from 'sentry/types/integrations'; import {trackAnalytics} from 'sentry/utils/analytics'; -import {useFetchAllPages} from 'sentry/utils/api/apiFetch'; +import {useFetchAllPages, type ApiResponse} from 'sentry/utils/api/apiFetch'; import {apiOptions} from 'sentry/utils/api/apiOptions'; import {getApiUrl} from 'sentry/utils/api/getApiUrl'; import {getIntegrationIcon} from 'sentry/utils/integrationUtil'; From b63919b746b8ec47303d6e1fbb2a06dc1480939b Mon Sep 17 00:00:00 2001 From: "getsantry[bot]" <66042841+getsantry[bot]@users.noreply.github.com> Date: Tue, 7 Apr 2026 11:15:18 +0000 Subject: [PATCH 07/10] :hammer_and_wrench: apply pre-commit fixes --- .../organizationIntegrations/integrationCodeMappings.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/static/app/views/settings/organizationIntegrations/integrationCodeMappings.tsx b/static/app/views/settings/organizationIntegrations/integrationCodeMappings.tsx index b48d0bf9ba56aa..c2cb7ce41ba384 100644 --- a/static/app/views/settings/organizationIntegrations/integrationCodeMappings.tsx +++ b/static/app/views/settings/organizationIntegrations/integrationCodeMappings.tsx @@ -1,6 +1,6 @@ import {Fragment, useCallback, useMemo} from 'react'; -import type {InfiniteData} from '@tanstack/react-query'; import styled from '@emotion/styled'; +import type {InfiniteData} from '@tanstack/react-query'; import sortBy from 'lodash/sortBy'; import {Button, LinkButton} from '@sentry/scraps/button'; From 6aa1371dfe63cb5cc953fb4309b37806aa0298bd Mon Sep 17 00:00:00 2001 From: rodolfoBee <64906376+rodolfoBee@users.noreply.github.com> Date: Tue, 7 Apr 2026 14:40:48 +0200 Subject: [PATCH 08/10] Update static/app/views/settings/organizationIntegrations/integrationCodeMappings.tsx MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Dominik Dorfmeister 🔮 --- .../organizationIntegrations/integrationCodeMappings.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/static/app/views/settings/organizationIntegrations/integrationCodeMappings.tsx b/static/app/views/settings/organizationIntegrations/integrationCodeMappings.tsx index c2cb7ce41ba384..d867e7d15c35dc 100644 --- a/static/app/views/settings/organizationIntegrations/integrationCodeMappings.tsx +++ b/static/app/views/settings/organizationIntegrations/integrationCodeMappings.tsx @@ -172,8 +172,8 @@ export function IntegrationCodeMappings({integration}: {integration: Integration staleTime: 10_000, } ), - select: (data: InfiniteData>) => - data.pages.flatMap((page: ApiResponse) => page.json), + select: (data) => + data.pages.flatMap((page) => page.json), }); useFetchAllPages({result: repositoriesQuery}); From 8b670a499795a3bbb918e32b9be0bdb9927e178d Mon Sep 17 00:00:00 2001 From: "getsantry[bot]" <66042841+getsantry[bot]@users.noreply.github.com> Date: Tue, 7 Apr 2026 12:42:12 +0000 Subject: [PATCH 09/10] :hammer_and_wrench: apply pre-commit fixes --- .../organizationIntegrations/integrationCodeMappings.tsx | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/static/app/views/settings/organizationIntegrations/integrationCodeMappings.tsx b/static/app/views/settings/organizationIntegrations/integrationCodeMappings.tsx index d867e7d15c35dc..13036a51bd01d3 100644 --- a/static/app/views/settings/organizationIntegrations/integrationCodeMappings.tsx +++ b/static/app/views/settings/organizationIntegrations/integrationCodeMappings.tsx @@ -172,8 +172,7 @@ export function IntegrationCodeMappings({integration}: {integration: Integration staleTime: 10_000, } ), - select: (data) => - data.pages.flatMap((page) => page.json), + select: data => data.pages.flatMap(page => page.json), }); useFetchAllPages({result: repositoriesQuery}); From d7eafada1f6894c9222752aabb278652bc184484 Mon Sep 17 00:00:00 2001 From: rodolfoBee <64906376+rodolfoBee@users.noreply.github.com> Date: Tue, 7 Apr 2026 15:08:06 +0200 Subject: [PATCH 10/10] remove unused imports after 6aa1371 change --- .../organizationIntegrations/integrationCodeMappings.tsx | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/static/app/views/settings/organizationIntegrations/integrationCodeMappings.tsx b/static/app/views/settings/organizationIntegrations/integrationCodeMappings.tsx index 13036a51bd01d3..20f277f839401d 100644 --- a/static/app/views/settings/organizationIntegrations/integrationCodeMappings.tsx +++ b/static/app/views/settings/organizationIntegrations/integrationCodeMappings.tsx @@ -1,6 +1,5 @@ import {Fragment, useCallback, useMemo} from 'react'; import styled from '@emotion/styled'; -import type {InfiniteData} from '@tanstack/react-query'; import sortBy from 'lodash/sortBy'; import {Button, LinkButton} from '@sentry/scraps/button'; @@ -24,7 +23,7 @@ import type { RepositoryProjectPathConfig, } from 'sentry/types/integrations'; import {trackAnalytics} from 'sentry/utils/analytics'; -import {useFetchAllPages, type ApiResponse} from 'sentry/utils/api/apiFetch'; +import {useFetchAllPages} from 'sentry/utils/api/apiFetch'; import {apiOptions} from 'sentry/utils/api/apiOptions'; import {getApiUrl} from 'sentry/utils/api/getApiUrl'; import {getIntegrationIcon} from 'sentry/utils/integrationUtil';