|
1 |
| -import {Str} from 'expensify-common'; |
2 |
| -import type {Dispatch, SetStateAction} from 'react'; |
3 |
| -import {Linking, NativeModules} from 'react-native'; |
4 |
| -import type {OnyxEntry, OnyxUpdate} from 'react-native-onyx'; |
| 1 | +import type {OnyxUpdate} from 'react-native-onyx'; |
5 | 2 | import Onyx from 'react-native-onyx';
|
6 |
| -import type {LocaleContextProps} from '@components/LocaleContextProvider'; |
7 | 3 | import * as API from '@libs/API';
|
8 | 4 | import type {AcceptSpotnanaTermsParams} from '@libs/API/parameters';
|
9 | 5 | import {WRITE_COMMANDS} from '@libs/API/types';
|
10 | 6 | import {getMicroSecondOnyxErrorWithTranslationKey} from '@libs/ErrorUtils';
|
11 |
| -import Log from '@libs/Log'; |
12 |
| -import Navigation from '@libs/Navigation/Navigation'; |
13 |
| -import {getAdminsPrivateEmailDomains, getPolicy} from '@libs/PolicyUtils'; |
14 |
| -import CONST from '@src/CONST'; |
15 | 7 | import ONYXKEYS from '@src/ONYXKEYS';
|
16 |
| -import ROUTES from '@src/ROUTES'; |
17 |
| -import type {TravelSettings} from '@src/types/onyx'; |
18 |
| -import {isEmptyObject} from '@src/types/utils/EmptyObject'; |
19 |
| -import {buildTravelDotURL, openTravelDotLink} from './Link'; |
20 |
| - |
21 |
| -let travelSettings: OnyxEntry<TravelSettings>; |
22 |
| -Onyx.connect({ |
23 |
| - key: ONYXKEYS.NVP_TRAVEL_SETTINGS, |
24 |
| - callback: (val) => { |
25 |
| - travelSettings = val; |
26 |
| - }, |
27 |
| -}); |
28 |
| - |
29 |
| -let activePolicyID: OnyxEntry<string>; |
30 |
| -Onyx.connect({ |
31 |
| - key: ONYXKEYS.NVP_ACTIVE_POLICY_ID, |
32 |
| - callback: (val) => { |
33 |
| - activePolicyID = val; |
34 |
| - }, |
35 |
| -}); |
36 |
| - |
37 |
| -let primaryLogin: string; |
38 |
| -Onyx.connect({ |
39 |
| - key: ONYXKEYS.ACCOUNT, |
40 |
| - callback: (val) => { |
41 |
| - primaryLogin = val?.primaryLogin ?? ''; |
42 |
| - }, |
43 |
| -}); |
44 |
| - |
45 |
| -let isSingleNewDotEntry: boolean | undefined; |
46 |
| -Onyx.connect({ |
47 |
| - key: ONYXKEYS.IS_SINGLE_NEW_DOT_ENTRY, |
48 |
| - callback: (val) => { |
49 |
| - isSingleNewDotEntry = val; |
50 |
| - }, |
51 |
| -}); |
52 | 8 |
|
53 | 9 | /**
|
54 | 10 | * Accept Spotnana terms and conditions to receive a proper token used for authenticating further actions
|
@@ -98,76 +54,9 @@ function acceptSpotnanaTerms(domain?: string) {
|
98 | 54 | API.write(WRITE_COMMANDS.ACCEPT_SPOTNANA_TERMS, params, {optimisticData, successData, failureData});
|
99 | 55 | }
|
100 | 56 |
|
101 |
| -function handleProvisioningPermissionDeniedError(domain: string) { |
102 |
| - Navigation.navigate(ROUTES.TRAVEL_DOMAIN_PERMISSION_INFO.getRoute(domain)); |
103 |
| - Onyx.merge(ONYXKEYS.TRAVEL_PROVISIONING, null); |
104 |
| -} |
105 |
| - |
106 |
| -function openTravelDotAfterProvisioning(spotnanaToken: string) { |
107 |
| - Navigation.closeRHPFlow(); |
| 57 | +function cleanupTravelProvisioningSession() { |
108 | 58 | Onyx.merge(ONYXKEYS.TRAVEL_PROVISIONING, null);
|
109 |
| - Linking.openURL(buildTravelDotURL(spotnanaToken)); |
110 |
| -} |
111 |
| - |
112 |
| -function provisionDomain(domain: string) { |
113 |
| - Onyx.merge(ONYXKEYS.TRAVEL_PROVISIONING, null); |
114 |
| - Navigation.navigate(ROUTES.TRAVEL_TCS.getRoute(domain)); |
115 |
| -} |
116 |
| - |
117 |
| -function bookATrip( |
118 |
| - translate: LocaleContextProps['translate'], |
119 |
| - setCtaErrorMessage: Dispatch<SetStateAction<string>>, |
120 |
| - setRootStatusBarEnabled: (isEnabled: boolean) => void, |
121 |
| - ctaErrorMessage = '', |
122 |
| -): void { |
123 |
| - if (!activePolicyID) { |
124 |
| - return; |
125 |
| - } |
126 |
| - if (Str.isSMSLogin(primaryLogin)) { |
127 |
| - setCtaErrorMessage(translate('travel.phoneError')); |
128 |
| - return; |
129 |
| - } |
130 |
| - const policy = getPolicy(activePolicyID); |
131 |
| - if (isEmptyObject(policy?.address)) { |
132 |
| - Navigation.navigate(ROUTES.WORKSPACE_PROFILE_ADDRESS.getRoute(activePolicyID, Navigation.getActiveRoute())); |
133 |
| - return; |
134 |
| - } |
135 |
| - |
136 |
| - const isPolicyProvisioned = policy?.travelSettings?.spotnanaCompanyID ?? policy?.travelSettings?.associatedTravelDomainAccountID; |
137 |
| - if (policy?.travelSettings?.hasAcceptedTerms ?? (travelSettings?.hasAcceptedTerms && isPolicyProvisioned)) { |
138 |
| - openTravelDotLink(activePolicyID) |
139 |
| - ?.then(() => { |
140 |
| - if (!NativeModules.HybridAppModule || !isSingleNewDotEntry) { |
141 |
| - return; |
142 |
| - } |
143 |
| - |
144 |
| - Log.info('[HybridApp] Returning to OldDot after opening TravelDot'); |
145 |
| - NativeModules.HybridAppModule.closeReactNativeApp(false, false); |
146 |
| - setRootStatusBarEnabled(false); |
147 |
| - }) |
148 |
| - ?.catch(() => { |
149 |
| - setCtaErrorMessage(translate('travel.errorMessage')); |
150 |
| - }); |
151 |
| - if (ctaErrorMessage) { |
152 |
| - setCtaErrorMessage(''); |
153 |
| - } |
154 |
| - } else if (isPolicyProvisioned) { |
155 |
| - Onyx.merge(ONYXKEYS.TRAVEL_PROVISIONING, null); |
156 |
| - Navigation.navigate(ROUTES.TRAVEL_TCS.getRoute(CONST.TRAVEL.DEFAULT_DOMAIN)); |
157 |
| - } else { |
158 |
| - const adminDomains = getAdminsPrivateEmailDomains(policy); |
159 |
| - let routeToNavigateTo; |
160 |
| - if (adminDomains.length === 0) { |
161 |
| - routeToNavigateTo = ROUTES.TRAVEL_PUBLIC_DOMAIN_ERROR; |
162 |
| - } else if (adminDomains.length === 1) { |
163 |
| - Onyx.merge(ONYXKEYS.TRAVEL_PROVISIONING, null); |
164 |
| - routeToNavigateTo = ROUTES.TRAVEL_TCS.getRoute(adminDomains.at(0) ?? CONST.TRAVEL.DEFAULT_DOMAIN); |
165 |
| - } else { |
166 |
| - routeToNavigateTo = ROUTES.TRAVEL_DOMAIN_SELECTOR; |
167 |
| - } |
168 |
| - Navigation.navigate(routeToNavigateTo); |
169 |
| - } |
170 | 59 | }
|
171 | 60 |
|
172 | 61 | // eslint-disable-next-line import/prefer-default-export
|
173 |
| -export {acceptSpotnanaTerms, handleProvisioningPermissionDeniedError, openTravelDotAfterProvisioning, provisionDomain, bookATrip}; |
| 62 | +export {acceptSpotnanaTerms, cleanupTravelProvisioningSession}; |
0 commit comments