Skip to content

Commit c003cda

Browse files
committed
ref(tsc): move releaseCommitFiles endpoint to apiOptions
1 parent d4ad198 commit c003cda

File tree

4 files changed

+79
-69
lines changed

4 files changed

+79
-69
lines changed

static/app/views/releases/detail/commitsAndFiles/filesChanged.tsx

Lines changed: 14 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import {Fragment, useContext} from 'react';
2+
import {useQuery} from '@tanstack/react-query';
23

34
import * as Layout from 'sentry/components/layouts/thirds';
45
import {LoadingError} from 'sentry/components/loadingError';
@@ -12,6 +13,7 @@ import {t, tn} from 'sentry/locale';
1213
import type {Repository} from 'sentry/types/integrations';
1314
import type {Organization} from 'sentry/types/organization';
1415
import type {Project} from 'sentry/types/project';
16+
import {selectJsonWithHeaders} from 'sentry/utils/api/apiOptions';
1517
import {routeTitleGen} from 'sentry/utils/routeTitle';
1618
import {useLocation} from 'sentry/utils/useLocation';
1719
import {useOrganization} from 'sentry/utils/useOrganization';
@@ -25,7 +27,7 @@ import {
2527
getQuery,
2628
getReposToRender,
2729
} from 'sentry/views/releases/detail/utils';
28-
import {useReleaseCommitFiles} from 'sentry/views/releases/utils/useReleaseCommitFiles';
30+
import {releaseCommitFilesApiOptions} from 'sentry/views/releases/utils/releaseCommitFilesApiOptions';
2931

3032
import {EmptyState, NoReleaseRepos, NoRepositories} from './emptyState';
3133
import {FileChange} from './fileChange';
@@ -45,20 +47,24 @@ function FilesChangedList({organization, releaseRepos, projectSlug}: FilesChange
4547

4648
const query = getQuery({location});
4749
const {
48-
data: fileList = [],
50+
data,
4951
isPending: isLoadingFileList,
5052
error: fileListError,
5153
refetch,
52-
getResponseHeader,
53-
} = useReleaseCommitFiles({
54-
release: params.release,
55-
activeRepository: activeReleaseRepo,
56-
...query,
54+
} = useQuery({
55+
...releaseCommitFilesApiOptions({
56+
organization,
57+
release: params.release,
58+
activeRepository: activeReleaseRepo,
59+
...query,
60+
}),
61+
select: selectJsonWithHeaders,
5762
});
63+
const fileList = data?.json ?? [];
5864

5965
const filesByRepository = getFilesByRepository(fileList);
6066
const reposToRender = getReposToRender(Object.keys(filesByRepository));
61-
const fileListPageLinks = getResponseHeader?.('Link');
67+
const fileListPageLinks = data?.headers.Link;
6268

6369
return (
6470
<Fragment>

static/app/views/releases/drawer/filesChangedList.tsx

Lines changed: 16 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import {Fragment} from 'react';
2+
import {useQuery} from '@tanstack/react-query';
23

34
import {Container} from '@sentry/scraps/layout';
45

@@ -10,15 +11,17 @@ import {PanelHeader} from 'sentry/components/panels/panelHeader';
1011
import {Placeholder} from 'sentry/components/placeholder';
1112
import {t, tn} from 'sentry/locale';
1213
import type {Repository} from 'sentry/types/integrations';
14+
import {selectJsonWithHeaders} from 'sentry/utils/api/apiOptions';
1315
import {decodeScalar} from 'sentry/utils/queryString';
1416
import {useLocationQuery} from 'sentry/utils/url/useLocationQuery';
1517
import {useNavigate} from 'sentry/utils/useNavigate';
18+
import {useOrganization} from 'sentry/utils/useOrganization';
1619
import {EmptyState} from 'sentry/views/releases/detail/commitsAndFiles/emptyState';
1720
import {FileChange} from 'sentry/views/releases/detail/commitsAndFiles/fileChange';
1821
import {RepositorySwitcher} from 'sentry/views/releases/detail/commitsAndFiles/repositorySwitcher';
1922
import {getFilesByRepository, getReposToRender} from 'sentry/views/releases/detail/utils';
2023
import {ReleasesDrawerFields} from 'sentry/views/releases/drawer/utils';
21-
import {useReleaseCommitFiles} from 'sentry/views/releases/utils/useReleaseCommitFiles';
24+
import {releaseCommitFilesApiOptions} from 'sentry/views/releases/utils/releaseCommitFilesApiOptions';
2225

2326
interface FilesChangedProps {
2427
release: string;
@@ -27,6 +30,7 @@ interface FilesChangedProps {
2730

2831
export function FilesChangedList({releaseRepos, release}: FilesChangedProps) {
2932
const navigate = useNavigate();
33+
const organization = useOrganization();
3034
const {
3135
[ReleasesDrawerFields.ACTIVE_REPO]: rdActiveRepo,
3236
[ReleasesDrawerFields.FILES_CURSOR]: rdFilesCursor,
@@ -40,20 +44,24 @@ export function FilesChangedList({releaseRepos, release}: FilesChangedProps) {
4044
releaseRepos.find(repo => repo.name === rdActiveRepo) ?? releaseRepos[0];
4145

4246
const {
43-
data: fileList = [],
47+
data,
4448
isPending: isLoadingFileList,
4549
error: fileListError,
4650
refetch,
47-
getResponseHeader,
48-
} = useReleaseCommitFiles({
49-
release,
50-
activeRepository: activeReleaseRepo,
51-
cursor: rdFilesCursor,
51+
} = useQuery({
52+
...releaseCommitFilesApiOptions({
53+
organization,
54+
release,
55+
activeRepository: activeReleaseRepo,
56+
cursor: rdFilesCursor,
57+
}),
58+
select: selectJsonWithHeaders,
5259
});
60+
const fileList = data?.json ?? [];
5361

5462
const filesByRepository = getFilesByRepository(fileList);
5563
const reposToRender = getReposToRender(Object.keys(filesByRepository));
56-
const fileListPageLinks = getResponseHeader?.('Link');
64+
const fileListPageLinks = data?.headers.Link;
5765

5866
return (
5967
<div>
Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
import type {CommitFile, Repository} from 'sentry/types/integrations';
2+
import type {Organization} from 'sentry/types/organization';
3+
import {apiOptions} from 'sentry/utils/api/apiOptions';
4+
5+
// These are the URL params that our project/date/env picker generates (+ cursor for pagination)
6+
type PageFilterUrlParams =
7+
| 'start'
8+
| 'end'
9+
| 'utc'
10+
| 'statsPeriod'
11+
| 'project'
12+
| 'environment';
13+
type OtherUrlParams = 'cursor' | 'perPage';
14+
15+
interface Params extends Partial<
16+
Record<
17+
PageFilterUrlParams | OtherUrlParams,
18+
string | string[] | number | null | undefined
19+
>
20+
> {
21+
organization: Organization;
22+
release: string;
23+
activeRepository?: Repository;
24+
}
25+
export function releaseCommitFilesApiOptions({
26+
release,
27+
organization,
28+
activeRepository,
29+
perPage = 40,
30+
...query
31+
}: Params) {
32+
return apiOptions.as<CommitFile[]>()(
33+
'/organizations/$organizationIdOrSlug/releases/$version/commitfiles/',
34+
{
35+
path: {organizationIdOrSlug: organization.slug, version: release},
36+
query: {
37+
...query,
38+
per_page: perPage,
39+
...(activeRepository
40+
? {
41+
repo_id: activeRepository.externalId,
42+
repo_name: activeRepository.name,
43+
}
44+
: {}),
45+
},
46+
staleTime: Infinity,
47+
}
48+
);
49+
}

static/app/views/releases/utils/useReleaseCommitFiles.tsx

Lines changed: 0 additions & 53 deletions
This file was deleted.

0 commit comments

Comments
 (0)