Skip to content

Commit 19943b9

Browse files
authored
ref(tsc): uptime-checks endpoint to apiOptions (#112573)
1 parent d483d3e commit 19943b9

File tree

3 files changed

+40
-54
lines changed

3 files changed

+40
-54
lines changed

static/app/views/alerts/rules/uptime/uptimeChecksTable.tsx

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

34
import {LoadingError} from 'sentry/components/loadingError';
45
import {LoadingIndicator} from 'sentry/components/loadingIndicator';
56
import {Pagination} from 'sentry/components/pagination';
67
import {t} from 'sentry/locale';
78
import type {Project} from 'sentry/types/project';
9+
import {selectJsonWithHeaders} from 'sentry/utils/api/apiOptions';
810
import {decodeScalar} from 'sentry/utils/queryString';
911
import {useLocation} from 'sentry/utils/useLocation';
1012
import {useOrganization} from 'sentry/utils/useOrganization';
11-
import {useUptimeChecks} from 'sentry/views/insights/uptime/utils/useUptimeChecks';
13+
import {uptimeChecksApiOptions} from 'sentry/views/insights/uptime/utils/uptimeChecksApiOptions';
1214

1315
import {UptimeChecksGrid} from './uptimeChecksGrid';
1416

@@ -32,26 +34,19 @@ export function UptimeChecksTable({
3234
statsPeriod: decodeScalar(location.query.statsPeriod),
3335
};
3436

35-
const {
36-
data: uptimeChecks,
37-
isError,
38-
isPending,
39-
getResponseHeader,
40-
refetch,
41-
} = useUptimeChecks(
42-
{
37+
const {data, isError, isPending, refetch} = useQuery({
38+
...uptimeChecksApiOptions({
4339
orgSlug: organization.slug,
4440
projectSlug: project.slug,
4541
detectorId,
4642
cursor: decodeScalar(location.query.cursor),
4743
...timeRange,
4844
limit: 10,
49-
},
50-
{
51-
refetchOnWindowFocus: true,
52-
refetchInterval: 60_000,
53-
}
54-
);
45+
}),
46+
refetchOnWindowFocus: true,
47+
refetchInterval: 60_000,
48+
select: selectJsonWithHeaders,
49+
});
5550

5651
if (isError) {
5752
return <LoadingError message={t('Failed to load uptime checks')} onRetry={refetch} />;
@@ -62,9 +57,9 @@ export function UptimeChecksTable({
6257
{isPending ? (
6358
<LoadingIndicator />
6459
) : (
65-
<UptimeChecksGrid traceSampling={traceSampling} uptimeChecks={uptimeChecks} />
60+
<UptimeChecksGrid traceSampling={traceSampling} uptimeChecks={data?.json ?? []} />
6661
)}
67-
<Pagination pageLinks={getResponseHeader?.('Link')} />
62+
<Pagination pageLinks={data?.headers.Link} />
6863
</Fragment>
6964
);
7065
}

static/app/views/insights/uptime/utils/useUptimeChecks.tsx renamed to static/app/views/insights/uptime/utils/uptimeChecksApiOptions.tsx

Lines changed: 16 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,6 @@
1-
import {getApiUrl} from 'sentry/utils/api/getApiUrl';
2-
import {
3-
useApiQuery,
4-
type ApiQueryKey,
5-
type UseApiQueryOptions,
6-
} from 'sentry/utils/queryClient';
1+
import {queryOptions} from '@tanstack/react-query';
2+
3+
import {apiOptions} from 'sentry/utils/api/apiOptions';
74
import type {UptimeCheck} from 'sentry/views/alerts/rules/uptime/types';
85

96
interface UptimeChecksParameters {
@@ -17,7 +14,7 @@ interface UptimeChecksParameters {
1714
statsPeriod?: string;
1815
}
1916

20-
function makeUptimeChecksQueryKey({
17+
export function uptimeChecksApiOptions({
2118
orgSlug,
2219
projectSlug,
2320
detectorId,
@@ -26,38 +23,27 @@ function makeUptimeChecksQueryKey({
2623
start,
2724
end,
2825
statsPeriod,
29-
}: UptimeChecksParameters): ApiQueryKey {
30-
return [
31-
getApiUrl(
26+
}: UptimeChecksParameters) {
27+
// TODO(Leander): Add querying and sorting, when the endpoint supports it
28+
return queryOptions({
29+
...apiOptions.as<UptimeCheck[]>()(
3230
'/projects/$organizationIdOrSlug/$projectIdOrSlug/uptime/$uptimeDetectorId/checks/',
3331
{
3432
path: {
3533
organizationIdOrSlug: orgSlug,
3634
projectIdOrSlug: projectSlug,
3735
uptimeDetectorId: detectorId,
3836
},
37+
query: {
38+
per_page: limit,
39+
cursor,
40+
start,
41+
end,
42+
statsPeriod,
43+
},
44+
staleTime: 10_000,
3945
}
4046
),
41-
{
42-
query: {
43-
per_page: limit,
44-
cursor,
45-
start,
46-
end,
47-
statsPeriod,
48-
},
49-
},
50-
];
51-
}
52-
53-
export function useUptimeChecks(
54-
params: UptimeChecksParameters,
55-
options: Partial<UseApiQueryOptions<UptimeCheck[]>> = {}
56-
) {
57-
// TODO(Leander): Add querying and sorting, when the endpoint supports it
58-
return useApiQuery<UptimeCheck[]>(makeUptimeChecksQueryKey(params), {
59-
staleTime: 10_000,
6047
retry: true,
61-
...options,
6248
});
6349
}

static/app/views/issueDetails/groupUptimeChecks.tsx

Lines changed: 12 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,19 @@
1+
import {useQuery} from '@tanstack/react-query';
2+
13
import {usePageFilterDates} from 'sentry/components/checkInTimeline/hooks/useMonitorDates';
24
import {LoadingError} from 'sentry/components/loadingError';
35
import {LoadingIndicator} from 'sentry/components/loadingIndicator';
46
import {t} from 'sentry/locale';
57
import type {UptimeDetector} from 'sentry/types/workflowEngine/detectors';
8+
import {selectJsonWithHeaders} from 'sentry/utils/api/apiOptions';
69
import {parseLinkHeader} from 'sentry/utils/parseLinkHeader';
710
import {decodeScalar} from 'sentry/utils/queryString';
811
import {useLocation} from 'sentry/utils/useLocation';
912
import {useOrganization} from 'sentry/utils/useOrganization';
1013
import {useParams} from 'sentry/utils/useParams';
1114
import {UptimeChecksGrid} from 'sentry/views/alerts/rules/uptime/uptimeChecksGrid';
1215
import {useDetectorQuery} from 'sentry/views/detectors/hooks';
13-
import {useUptimeChecks} from 'sentry/views/insights/uptime/utils/useUptimeChecks';
16+
import {uptimeChecksApiOptions} from 'sentry/views/insights/uptime/utils/uptimeChecksApiOptions';
1417
import {EventListTable} from 'sentry/views/issueDetails/streamline/eventListTable';
1518
import {useUptimeIssueDetectorId} from 'sentry/views/issueDetails/streamline/issueUptimeCheckTimeline';
1619
import {useGroup} from 'sentry/views/issueDetails/useGroup';
@@ -36,18 +39,20 @@ export default function GroupUptimeChecks() {
3639
enabled: canFetchUptimeChecks,
3740
});
3841

39-
const {data: uptimeChecks, getResponseHeader} = useUptimeChecks(
40-
{
42+
const {data} = useQuery({
43+
...uptimeChecksApiOptions({
4144
orgSlug: organization.slug,
4245
projectSlug: group?.project.slug ?? '',
4346
detectorId: detectorId ?? '',
4447
cursor: decodeScalar(location.query.cursor),
4548
limit: 50,
4649
start: since.toISOString(),
4750
end: until.toISOString(),
48-
},
49-
{enabled: canFetchUptimeChecks}
50-
);
51+
}),
52+
enabled: canFetchUptimeChecks,
53+
select: selectJsonWithHeaders,
54+
});
55+
const uptimeChecks = data?.json;
5156

5257
if (isGroupError) {
5358
return <LoadingError onRetry={refetchGroup} />;
@@ -57,7 +62,7 @@ export default function GroupUptimeChecks() {
5762
return <LoadingIndicator />;
5863
}
5964

60-
const links = parseLinkHeader(getResponseHeader?.('Link') ?? '');
65+
const links = parseLinkHeader(data?.headers.Link ?? '');
6166
const previousDisabled = links?.previous?.results === false;
6267
const nextDisabled = links?.next?.results === false;
6368
const pageCount = uptimeChecks.length;

0 commit comments

Comments
 (0)