1
1
import { useQuery , useQueryClient } from "react-query" ;
2
- import {
3
- exchangeExternalAuthDevice ,
4
- getExternalAuthDevice ,
5
- getExternalAuthProvider ,
6
- } from "api/api" ;
7
2
import { usePermissions } from "hooks" ;
8
3
import { type FC } from "react" ;
9
4
import { useParams , useSearchParams } from "react-router-dom" ;
@@ -13,56 +8,44 @@ import { isAxiosError } from "axios";
13
8
import Button from "@mui/material/Button" ;
14
9
import { SignInLayout } from "components/SignInLayout/SignInLayout" ;
15
10
import { Welcome } from "components/Welcome/Welcome" ;
11
+ import {
12
+ externalAuthDevice ,
13
+ externalAuthProvider ,
14
+ exchangeExternalAuthDevice ,
15
+ } from "api/queries/externalAuth" ;
16
16
17
17
const ExternalAuthPage : FC = ( ) => {
18
- const { provider } = useParams ( ) ;
19
- if ( ! provider ) {
20
- throw new Error ( "provider must exist" ) ;
21
- }
18
+ const { provider } = useParams ( ) as { provider : string } ;
22
19
const [ searchParams ] = useSearchParams ( ) ;
23
20
const permissions = usePermissions ( ) ;
24
21
const queryClient = useQueryClient ( ) ;
25
- const getExternalAuthProviderQuery = useQuery ( {
26
- queryKey : [ "externalauth" , provider ] ,
27
- queryFn : ( ) => getExternalAuthProvider ( provider ) ,
22
+ const externalAuthProviderOpts = externalAuthProvider ( provider ) ;
23
+ const externalAuthProviderQuery = useQuery ( {
24
+ ... externalAuthProviderOpts ,
28
25
refetchOnWindowFocus : true ,
29
26
} ) ;
30
27
31
- const getExternalAuthDeviceQuery = useQuery ( {
28
+ const externalAuthDeviceQuery = useQuery ( {
29
+ ...externalAuthDevice ( provider ) ,
32
30
enabled :
33
- Boolean ( ! getExternalAuthProviderQuery . data ?. authenticated ) &&
34
- Boolean ( getExternalAuthProviderQuery . data ?. device ) ,
35
- queryFn : ( ) => getExternalAuthDevice ( provider ) ,
36
- queryKey : [ "externalauth" , provider , "device" ] ,
31
+ Boolean ( ! externalAuthProviderQuery . data ?. authenticated ) &&
32
+ Boolean ( externalAuthProviderQuery . data ?. device ) ,
37
33
refetchOnMount : false ,
38
34
} ) ;
39
35
const exchangeExternalAuthDeviceQuery = useQuery ( {
40
- queryFn : ( ) =>
41
- exchangeExternalAuthDevice ( provider , {
42
- device_code : getExternalAuthDeviceQuery . data ?. device_code || "" ,
43
- } ) ,
44
- queryKey : [
45
- "externalauth" ,
36
+ ...exchangeExternalAuthDevice (
46
37
provider ,
47
- getExternalAuthDeviceQuery . data ?. device_code ,
48
- ] ,
49
- enabled : Boolean ( getExternalAuthDeviceQuery . data ) ,
50
- onSuccess : ( ) => {
51
- // Force a refresh of the Git auth status.
52
- queryClient . invalidateQueries ( [ "externalauth" , provider ] ) . catch ( ( ex ) => {
53
- console . error ( "invalidate queries" , ex ) ;
54
- } ) ;
55
- } ,
38
+ externalAuthDeviceQuery . data ?. device_code ?? "" ,
39
+ queryClient ,
40
+ ) ,
41
+ enabled : Boolean ( externalAuthDeviceQuery . data ) ,
56
42
retry : true ,
57
- retryDelay : ( getExternalAuthDeviceQuery . data ?. interval || 5 ) * 1000 ,
43
+ retryDelay : ( externalAuthDeviceQuery . data ?. interval || 5 ) * 1000 ,
58
44
refetchOnWindowFocus : ( query ) =>
59
45
query . state . status === "success" ? false : "always" ,
60
46
} ) ;
61
47
62
- if (
63
- getExternalAuthProviderQuery . isLoading ||
64
- ! getExternalAuthProviderQuery . data
65
- ) {
48
+ if ( externalAuthProviderQuery . isLoading || ! externalAuthProviderQuery . data ) {
66
49
return null ;
67
50
}
68
51
@@ -73,8 +56,8 @@ const ExternalAuthPage: FC = () => {
73
56
}
74
57
75
58
if (
76
- ! getExternalAuthProviderQuery . data . authenticated &&
77
- ! getExternalAuthProviderQuery . data . device
59
+ ! externalAuthProviderQuery . data . authenticated &&
60
+ ! externalAuthProviderQuery . data . device
78
61
) {
79
62
const redirectedParam = searchParams ?. get ( "redirected" ) ;
80
63
if ( redirectedParam && redirectedParam . toLowerCase ( ) === "true" ) {
@@ -111,16 +94,16 @@ const ExternalAuthPage: FC = () => {
111
94
112
95
return (
113
96
< ExternalAuthPageView
114
- externalAuth = { getExternalAuthProviderQuery . data }
97
+ externalAuth = { externalAuthProviderQuery . data }
115
98
onReauthenticate = { ( ) => {
116
- queryClient . setQueryData ( [ "externalauth" , provider ] , {
117
- ...getExternalAuthProviderQuery . data ,
99
+ queryClient . setQueryData ( externalAuthProviderOpts . queryKey , {
100
+ ...externalAuthProviderQuery . data ,
118
101
authenticated : false ,
119
102
} ) ;
120
103
} }
121
104
viewExternalAuthConfig = { permissions . viewExternalAuthConfig }
122
105
deviceExchangeError = { deviceExchangeError }
123
- externalAuthDevice = { getExternalAuthDeviceQuery . data }
106
+ externalAuthDevice = { externalAuthDeviceQuery . data }
124
107
/>
125
108
) ;
126
109
} ;
0 commit comments