1
1
import { useClerk } from '@clerk/shared/react' ;
2
2
import { eventComponentMounted } from '@clerk/shared/telemetry' ;
3
3
import type { SessionTask } from '@clerk/types' ;
4
- import { useCallback , useEffect } from 'react' ;
4
+ import { useCallback , useContext , useEffect } from 'react' ;
5
5
6
6
import { SESSION_TASK_ROUTE_BY_KEY } from '../../../core/sessionTasks' ;
7
- import { SessionTaskContext as SessionTaskContext } from '../../contexts/components/SessionTask' ;
7
+ import { OrganizationListContext , SignInContext , SignUpContext } from '../../../ui/contexts' ;
8
+ import { Card , LoadingCardContainer , withCardStateProvider } from '../../../ui/elements' ;
9
+ import { SessionTasksContext as SessionTasksContext } from '../../contexts/components/SessionTasks' ;
8
10
import { Route , Switch , useRouter } from '../../router' ;
9
- import { LazyOrganizationSelectionTask } from './lazyTasks' ;
10
- import { usePreloadTasks } from './usePreloadTasks' ;
11
+ import { OrganizationList } from '../OrganizationList' ;
12
+
13
+ const SessionTasksStart = withCardStateProvider ( ( ) => {
14
+ const clerk = useClerk ( ) ;
15
+ const { navigate } = useRouter ( ) ;
16
+
17
+ useEffect ( ( ) => {
18
+ const timeoutId = setTimeout ( ( ) => {
19
+ void clerk . session ?. reload ( ) . then ( session => {
20
+ if ( ! session . currentTask ?. key ) {
21
+ void navigate ( clerk . buildAfterSignInUrl ( ) ) ;
22
+ return ;
23
+ }
24
+
25
+ void navigate ( SESSION_TASK_ROUTE_BY_KEY [ session . currentTask ?. key ] ) ;
26
+ } ) ;
27
+ } , 1000 ) ;
28
+ return ( ) => clearTimeout ( timeoutId ) ;
29
+ } , [ navigate , clerk ] ) ;
30
+
31
+ return (
32
+ < Card . Root >
33
+ < Card . Content >
34
+ < LoadingCardContainer />
35
+ </ Card . Content >
36
+ < Card . Footer />
37
+ </ Card . Root >
38
+ ) ;
39
+ } ) ;
11
40
12
41
function SessionTaskRoutes ( ) : JSX . Element {
13
42
return (
14
43
< Switch >
15
44
< Route path = { SESSION_TASK_ROUTE_BY_KEY [ 'org' ] } >
16
- < LazyOrganizationSelectionTask />
45
+ < OrganizationListContext . Provider
46
+ value = { {
47
+ componentName : 'OrganizationList' ,
48
+ skipInvitationScreen : true ,
49
+ } }
50
+ >
51
+ < OrganizationList />
52
+ </ OrganizationListContext . Provider >
53
+ </ Route >
54
+ < Route index >
55
+ < SessionTasksStart />
17
56
</ Route >
18
57
</ Switch >
19
58
) ;
@@ -22,31 +61,34 @@ function SessionTaskRoutes(): JSX.Element {
22
61
/**
23
62
* @internal
24
63
*/
25
- export function SessionTask ( { redirectUrlComplete } : { redirectUrlComplete : string } ) : JSX . Element {
26
- usePreloadTasks ( ) ;
27
-
28
- const { __experimental_nextTask, session, telemetry } = useClerk ( ) ;
64
+ export function SessionTask ( ) : JSX . Element {
65
+ const clerk = useClerk ( ) ;
29
66
const { navigate } = useRouter ( ) ;
67
+ const signInContext = useContext ( SignInContext ) ;
68
+ const signUpContext = useContext ( SignUpContext ) ;
30
69
31
- const task = session ?. currentTask ;
70
+ const redirectUrlComplete =
71
+ signInContext ?. afterSignInUrl ?? signUpContext ?. afterSignUpUrl ?? clerk ?. buildAfterSignInUrl ( ) ;
32
72
33
73
useEffect ( ( ) => {
34
- if ( task ) {
35
- telemetry ?. record ( eventComponentMounted ( 'SessionTask' , { task : task . key } ) ) ;
74
+ const task = clerk . session ?. currentTask ;
75
+
76
+ if ( ! task ) {
77
+ void navigate ( redirectUrlComplete ) ;
36
78
return ;
37
79
}
38
80
39
- void navigate ( redirectUrlComplete ) ;
40
- } , [ task , telemetry , navigate , redirectUrlComplete ] ) ;
81
+ clerk . telemetry ?. record ( eventComponentMounted ( 'SessionTask' , { task : task . key } ) ) ;
82
+ } , [ clerk , navigate , redirectUrlComplete ] ) ;
41
83
42
84
const nextTask = useCallback (
43
- ( ) => __experimental_nextTask ( { redirectUrlComplete } ) ,
44
- [ __experimental_nextTask , redirectUrlComplete ] ,
85
+ ( ) => clerk . __experimental_nextTask ( { redirectUrlComplete : redirectUrlComplete } ) ,
86
+ [ clerk , redirectUrlComplete ] ,
45
87
) ;
46
88
47
89
return (
48
- < SessionTaskContext . Provider value = { { nextTask } } >
90
+ < SessionTasksContext . Provider value = { { nextTask } } >
49
91
< SessionTaskRoutes />
50
- </ SessionTaskContext . Provider >
92
+ </ SessionTasksContext . Provider >
51
93
) ;
52
94
}
0 commit comments