1
1
import { NativeModules } from 'react-native' ;
2
2
import Onyx from 'react-native-onyx' ;
3
- import type { OnyxUpdate } from 'react-native-onyx' ;
3
+ import type { OnyxEntry , OnyxUpdate } from 'react-native-onyx' ;
4
4
import * as API from '@libs/API' ;
5
5
import type { AddDelegateParams , RemoveDelegateParams , UpdateDelegateRoleParams } from '@libs/API/parameters' ;
6
6
import { SIDE_EFFECT_REQUEST_COMMANDS , WRITE_COMMANDS } from '@libs/API/types' ;
7
7
import * as ErrorUtils from '@libs/ErrorUtils' ;
8
8
import Log from '@libs/Log' ;
9
9
import * as NetworkStore from '@libs/Network/NetworkStore' ;
10
- import { getCurrentUserEmail } from '@libs/Network/NetworkStore' ;
11
10
import * as SequentialQueue from '@libs/Network/SequentialQueue' ;
12
11
import CONST from '@src/CONST' ;
13
12
import ONYXKEYS from '@src/ONYXKEYS' ;
@@ -16,6 +15,7 @@ import type Credentials from '@src/types/onyx/Credentials';
16
15
import type Response from '@src/types/onyx/Response' ;
17
16
import type Session from '@src/types/onyx/Session' ;
18
17
import { confirmReadyToOpenApp , openApp } from './App' ;
18
+ import { getCurrentUserAccountID } from './Report' ;
19
19
import updateSessionAuthTokens from './Session/updateSessionAuthTokens' ;
20
20
import updateSessionUser from './Session/updateSessionUser' ;
21
21
@@ -51,6 +51,14 @@ Onyx.connect({
51
51
callback : ( value ) => ( stashedSession = value ?? { } ) ,
52
52
} ) ;
53
53
54
+ let activePolicyID : OnyxEntry < string > ;
55
+ Onyx . connect ( {
56
+ key : ONYXKEYS . NVP_ACTIVE_POLICY_ID ,
57
+ callback : ( newActivePolicyID ) => {
58
+ activePolicyID = newActivePolicyID ;
59
+ } ,
60
+ } ) ;
61
+
54
62
const KEYS_TO_PRESERVE_DELEGATE_ACCESS = [
55
63
ONYXKEYS . NVP_TRY_FOCUS_MODE ,
56
64
ONYXKEYS . PREFERRED_THEME ,
@@ -73,6 +81,8 @@ function connect(email: string) {
73
81
Onyx . set ( ONYXKEYS . STASHED_CREDENTIALS , credentials ) ;
74
82
Onyx . set ( ONYXKEYS . STASHED_SESSION , session ) ;
75
83
84
+ const previousAccountID = getCurrentUserAccountID ( ) ;
85
+
76
86
const optimisticData : OnyxUpdate [ ] = [
77
87
{
78
88
onyxMethod : Onyx . METHOD . MERGE ,
@@ -130,6 +140,14 @@ function connect(email: string) {
130
140
Onyx . update ( failureData ) ;
131
141
return ;
132
142
}
143
+ if ( ! activePolicyID ) {
144
+ Log . alert ( '[Delegate] Unable to access activePolicyID' ) ;
145
+ Onyx . update ( failureData ) ;
146
+ return ;
147
+ }
148
+ const restrictedToken = response . restrictedToken ;
149
+ const policyID = activePolicyID ;
150
+
133
151
return SequentialQueue . waitForIdle ( )
134
152
. then ( ( ) => Onyx . clear ( KEYS_TO_PRESERVE_DELEGATE_ACCESS ) )
135
153
. then ( ( ) => {
@@ -138,9 +156,7 @@ function connect(email: string) {
138
156
139
157
NetworkStore . setAuthToken ( response ?. restrictedToken ?? null ) ;
140
158
confirmReadyToOpenApp ( ) ;
141
- openApp ( ) ;
142
-
143
- NativeModules . HybridAppModule . switchAccount ( email ) ;
159
+ openApp ( ) . then ( ( ) => NativeModules . HybridAppModule . switchAccount ( email , restrictedToken , policyID , String ( previousAccountID ) ) ) ;
144
160
} ) ;
145
161
} )
146
162
. catch ( ( error ) => {
@@ -195,22 +211,34 @@ function disconnect() {
195
211
return ;
196
212
}
197
213
214
+ if ( ! response ?. requesterID || ! response ?. requesterEmail ) {
215
+ Log . alert ( '[Delegate] No requester data returned while disconnecting as a delegate' ) ;
216
+ return ;
217
+ }
218
+
219
+ const requesterEmail = response . requesterEmail ;
220
+ const authToken = response . authToken ;
198
221
return SequentialQueue . waitForIdle ( )
199
222
. then ( ( ) => Onyx . clear ( KEYS_TO_PRESERVE_DELEGATE_ACCESS ) )
200
223
. then ( ( ) => {
201
- // Update authToken in Onyx and in our local variables so that API requests will use the new authToken
202
- updateSessionAuthTokens ( response ?. authToken , response ?. encryptedAuthToken ) ;
224
+ Onyx . set ( ONYXKEYS . CREDENTIALS , {
225
+ ...stashedCredentials ,
226
+ accountID : response . requesterID ,
227
+ } ) ;
228
+ Onyx . set ( ONYXKEYS . SESSION , {
229
+ ...stashedSession ,
230
+ accountID : response . requesterID ,
231
+ email : requesterEmail ,
232
+ authToken,
233
+ encryptedAuthToken : response . encryptedAuthToken ,
234
+ } ) ;
235
+ Onyx . set ( ONYXKEYS . STASHED_CREDENTIALS , { } ) ;
236
+ Onyx . set ( ONYXKEYS . STASHED_SESSION , { } ) ;
203
237
204
238
NetworkStore . setAuthToken ( response ?. authToken ?? null ) ;
205
239
206
- Onyx . set ( ONYXKEYS . CREDENTIALS , stashedCredentials ) ;
207
- Onyx . set ( ONYXKEYS . SESSION , stashedSession ) ;
208
- Onyx . set ( ONYXKEYS . STASHED_CREDENTIALS , { } ) ;
209
- Onyx . set ( ONYXKEYS . STASHED_SESSION , { } ) ;
210
240
confirmReadyToOpenApp ( ) ;
211
- openApp ( ) ;
212
-
213
- NativeModules . HybridAppModule . switchAccount ( getCurrentUserEmail ( ) ?? '' ) ;
241
+ openApp ( ) . then ( ( ) => NativeModules . HybridAppModule . switchAccount ( requesterEmail , authToken , '' , '' ) ) ;
214
242
} ) ;
215
243
} )
216
244
. catch ( ( error ) => {
0 commit comments