Skip to content

Commit b1daf84

Browse files
authored
feat(settings): Migrate configure integration from deprecatedRouteProps (#103128)
1 parent a67fb64 commit b1daf84

File tree

4 files changed

+30
-21
lines changed

4 files changed

+30
-21
lines changed

static/app/router/routes.tsx

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1088,7 +1088,6 @@ function buildRoutes(): RouteObject[] {
10881088
'sentry/views/settings/organizationIntegrations/configureIntegration'
10891089
)
10901090
),
1091-
deprecatedRouteProps: true,
10921091
},
10931092
],
10941093
},

static/app/utils/useParams.tsx

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,12 +29,14 @@ type ParamKeys =
2929
| 'groupId'
3030
| 'id'
3131
| 'installationId'
32+
| 'integrationId'
3233
| 'integrationSlug'
3334
| 'issueId'
3435
| 'memberId'
3536
| 'notificationSource'
3637
| 'orgId'
3738
| 'projectId'
39+
| 'providerKey'
3840
| 'regionName'
3941
| 'release'
4042
| 'relocationUuid'

static/app/views/settings/organizationIntegrations/configureIntegration.spec.tsx

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
import {OpsgenieIntegrationFixture} from 'sentry-fixture/opsgenieIntegration';
22
import {OpsgenieIntegrationProviderFixture} from 'sentry-fixture/opsgenieIntegrationProvider';
33
import {OrganizationFixture} from 'sentry-fixture/organization';
4-
import {RouteComponentPropsFixture} from 'sentry-fixture/routeComponentPropsFixture';
54

65
import {
76
render,
@@ -56,13 +55,16 @@ describe('OpsgenieMigrationButton', () => {
5655
method: 'PUT',
5756
});
5857

59-
render(
60-
<ConfigureIntegration
61-
{...RouteComponentPropsFixture()}
62-
params={{integrationId, providerKey: 'opsgenie'}}
63-
/>,
64-
{organization: org}
65-
);
58+
render(<ConfigureIntegration />, {
59+
organization: org,
60+
initialRouterConfig: {
61+
location: {
62+
pathname: `/settings/${org.slug}/integrations/opsgenie/${integrationId}/`,
63+
query: {},
64+
},
65+
route: '/settings/:orgId/integrations/:providerKey/:integrationId/',
66+
},
67+
});
6668
renderGlobalModal();
6769
expect(await screen.findByRole('button', {name: 'Migrate Plugin'})).toBeEnabled();
6870

static/app/views/settings/organizationIntegrations/configureIntegration.tsx

Lines changed: 18 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -23,18 +23,22 @@ import type {
2323
OrganizationIntegration,
2424
PluginWithProjectList,
2525
} from 'sentry/types/integrations';
26-
import type {RouteComponentProps} from 'sentry/types/legacyReactRouter';
2726
import type {Organization} from 'sentry/types/organization';
2827
import {isActiveSuperuser} from 'sentry/utils/isActiveSuperuser';
2928
import {singleLineRenderer} from 'sentry/utils/marked/marked';
3029
import type {ApiQueryKey} from 'sentry/utils/queryClient';
3130
import {setApiQueryData, useApiQuery, useQueryClient} from 'sentry/utils/queryClient';
31+
import {decodeScalar} from 'sentry/utils/queryString';
3232
import useRouteAnalyticsEventNames from 'sentry/utils/routeAnalytics/useRouteAnalyticsEventNames';
3333
import useRouteAnalyticsParams from 'sentry/utils/routeAnalytics/useRouteAnalyticsParams';
3434
import normalizeUrl from 'sentry/utils/url/normalizeUrl';
3535
import useApi from 'sentry/utils/useApi';
36+
import {useLocation} from 'sentry/utils/useLocation';
37+
import {useNavigate} from 'sentry/utils/useNavigate';
3638
import useOrganization from 'sentry/utils/useOrganization';
39+
import {useParams} from 'sentry/utils/useParams';
3740
import useProjects from 'sentry/utils/useProjects';
41+
import {useRoutes} from 'sentry/utils/useRoutes';
3842
import BreadcrumbTitle from 'sentry/views/settings/components/settingsBreadcrumb/breadcrumbTitle';
3943
import SettingsPageHeader from 'sentry/views/settings/components/settingsPageHeader';
4044

@@ -48,11 +52,6 @@ import IntegrationMainSettings from './integrationMainSettings';
4852
import IntegrationRepos from './integrationRepos';
4953
import {IntegrationServerlessFunctions} from './integrationServerlessFunctions';
5054

51-
type Props = RouteComponentProps<{
52-
integrationId: string;
53-
providerKey: string;
54-
}>;
55-
5655
const TABS = [
5756
'repos',
5857
'codeMappings',
@@ -73,12 +72,19 @@ const makePluginQuery = (organization: Organization): ApiQueryKey => {
7372
return [`/organizations/${organization.slug}/plugins/configs/`];
7473
};
7574

76-
function ConfigureIntegration({params, router, routes, location}: Props) {
75+
function ConfigureIntegration() {
76+
const routes = useRoutes();
77+
const location = useLocation();
78+
const navigate = useNavigate();
7779
const api = useApi();
7880
const queryClient = useQueryClient();
7981
const organization = useOrganization();
80-
const tab: Tab = TABS.includes(location.query.tab) ? location.query.tab : 'repos';
81-
const {integrationId, providerKey} = params;
82+
const tabParam = decodeScalar(location.query.tab) as Tab | undefined;
83+
const tab: Tab = tabParam && TABS.includes(tabParam) ? tabParam : 'repos';
84+
const {integrationId, providerKey} = useParams<{
85+
integrationId: string;
86+
providerKey: string;
87+
}>();
8288
const {
8389
data: config = {providers: []},
8490
isPending: isLoadingConfig,
@@ -133,13 +139,13 @@ function ConfigureIntegration({params, router, routes, location}: Props) {
133139
!organization.access.includes('org:integrations') &&
134140
!isActiveSuperuser()
135141
) {
136-
router.push(
142+
navigate(
137143
normalizeUrl({
138144
pathname: `/settings/${organization.slug}/integrations/${providerKey}/`,
139145
})
140146
);
141147
}
142-
}, [router, organization, providerKey]);
148+
}, [navigate, organization, providerKey]);
143149

144150
if (isLoadingConfig || isLoadingIntegration || isLoadingPlugins) {
145151
return <LoadingIndicator />;
@@ -156,7 +162,7 @@ function ConfigureIntegration({params, router, routes, location}: Props) {
156162
const onTabChange = (value: Tab) => {
157163
// XXX: Omit the cursor to prevent paginating the next tab's queries.
158164
const {cursor: _, ...query} = location.query;
159-
router.push({
165+
navigate({
160166
pathname: location.pathname,
161167
query: {...query, tab: value},
162168
});

0 commit comments

Comments
 (0)