Skip to content

Commit 577d6c4

Browse files
ref(settings): Address PR review feedback
Remove explicit generics on useMutation, letting TypeScript infer types from mutationFn. Replace hasNewToken state with mutation.isSuccess. Use proper null filter instead of Boolean cast with type assertion. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
1 parent 938d777 commit 577d6c4

File tree

2 files changed

+7
-15
lines changed

2 files changed

+7
-15
lines changed

static/app/views/settings/account/apiNewToken.tsx

Lines changed: 5 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import {useCallback, useState} from 'react';
1+
import {useCallback} from 'react';
22
import {z} from 'zod';
33

44
import {Button} from '@sentry/scraps/button';
@@ -26,7 +26,6 @@ import type {NewInternalAppApiToken} from 'sentry/types/user';
2626
import {getApiUrl} from 'sentry/utils/api/getApiUrl';
2727
import {handleXhrErrorResponse} from 'sentry/utils/handleXhrErrorResponse';
2828
import {fetchMutation, useMutation, useQueryClient} from 'sentry/utils/queryClient';
29-
import type {RequestError} from 'sentry/utils/requestError/requestError';
3029
import {normalizeUrl} from 'sentry/utils/url/normalizeUrl';
3130
import {useNavigate} from 'sentry/utils/useNavigate';
3231
import {displayNewToken} from 'sentry/views/settings/components/newTokenHandler';
@@ -70,7 +69,6 @@ function getPermissionsPreview(permissions: Permissions): string {
7069

7170
export default function ApiNewToken() {
7271
const [permissions, setPermissions] = useState<Permissions>({...INITIAL_PERMISSIONS});
73-
const [hasNewToken, setHasNewToken] = useState(false);
7472
const navigate = useNavigate();
7573
const queryClient = useQueryClient();
7674

@@ -83,24 +81,19 @@ export default function ApiNewToken() {
8381
value => value === 'no-access'
8482
);
8583

86-
const mutation = useMutation<
87-
NewInternalAppApiToken,
88-
RequestError,
89-
z.infer<typeof schema>
90-
>({
91-
mutationFn: data =>
84+
const mutation = useMutation({
85+
mutationFn: (data: z.infer<typeof schema>) =>
9286
fetchMutation<NewInternalAppApiToken>({
9387
url: '/api-tokens/',
9488
method: 'POST',
9589
data: {
9690
...data,
97-
scopes: permissionStateToList(permissions).filter(Boolean) as string[],
91+
scopes: permissionStateToList(permissions).filter(v => v !== null),
9892
},
9993
}),
10094
onSuccess: token => {
10195
addSuccessMessage(t('Created personal token.'));
10296
queryClient.invalidateQueries({queryKey: [getApiUrl('/api-tokens/')]});
103-
setHasNewToken(true);
10497
displayNewToken(token.token, handleGoBack);
10598
},
10699
onError: error => {
@@ -171,7 +164,7 @@ export default function ApiNewToken() {
171164
</Panel>
172165
<Flex justify="end" gap="md" padding="md">
173166
<Button onClick={handleGoBack}>{t('Cancel')}</Button>
174-
<form.SubmitButton disabled={hasNewToken || allPermissionsNoAccess}>
167+
<form.SubmitButton disabled={mutation.isSuccess || allPermissionsNoAccess}>
175168
{t('Create Token')}
176169
</form.SubmitButton>
177170
</Flex>

static/app/views/settings/account/apiTokenDetails.tsx

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,6 @@ import {
2727
useMutation,
2828
useQueryClient,
2929
} from 'sentry/utils/queryClient';
30-
import type {RequestError} from 'sentry/utils/requestError/requestError';
3130
import {normalizeUrl} from 'sentry/utils/url/normalizeUrl';
3231
import {useNavigate} from 'sentry/utils/useNavigate';
3332
import {useParams} from 'sentry/utils/useParams';
@@ -60,8 +59,8 @@ function ApiTokenDetailsForm({token}: {token: InternalAppApiToken}) {
6059
[navigate]
6160
);
6261

63-
const mutation = useMutation<unknown, RequestError, z.infer<typeof schema>>({
64-
mutationFn: data =>
62+
const mutation = useMutation({
63+
mutationFn: (data: z.infer<typeof schema>) =>
6564
fetchMutation({
6665
url: `/api-tokens/${token.id}/`,
6766
method: 'PUT',

0 commit comments

Comments
 (0)