Skip to content

Commit 085d974

Browse files
committed
add plaid import accounts when feed broken connection
1 parent 5c0bed6 commit 085d974

5 files changed

Lines changed: 41 additions & 9 deletions

File tree

src/libs/API/parameters/OpenPlaidCompanyCardLoginParams.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@ type OpenPlaidCompanyCardLoginParams = {
22
redirectURI: string | undefined;
33
androidPackage?: string;
44
country: string;
5+
domain?: string;
6+
feed?: string;
57
};
68

79
export default OpenPlaidCompanyCardLoginParams;

src/libs/actions/Plaid.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,13 +47,15 @@ function openPlaidBankLogin(allowDebit: boolean, bankAccountID: number) {
4747
/**
4848
* Gets the Plaid Link token used to initialize the Plaid SDK for Company card
4949
*/
50-
function openPlaidCompanyCardLogin(country: string) {
50+
function openPlaidCompanyCardLogin(country: string, domain?: string, feed?: string) {
5151
const {redirectURI, androidPackage} = getPlaidLinkTokenParameters();
5252

5353
const params: OpenPlaidCompanyCardLoginParams = {
5454
redirectURI,
5555
androidPackage,
5656
country,
57+
domain,
58+
feed,
5759
};
5860

5961
const optimisticData = [

src/pages/workspace/companyCards/BankConnection/index.tsx

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -130,7 +130,6 @@ function BankConnection({policyID: policyIDFromProps, feed, route}: BankConnecti
130130
return;
131131
}
132132
if (isPlaid) {
133-
onImportPlaidAccounts();
134133
return;
135134
}
136135
if (url) {

src/pages/workspace/companyCards/addNew/PlaidConnectionStep.tsx

Lines changed: 30 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import React, {useCallback, useEffect, useRef} from 'react';
2-
import {ActivityIndicator, View} from 'react-native';
2+
import {ActivityIndicator, InteractionManager, View} from 'react-native';
33
import type {LinkSuccessMetadata} from 'react-native-plaid-link-sdk';
44
import type {PlaidLinkOnSuccessMetadata} from 'react-plaid-link/src/types';
55
import FullPageOfflineBlockingView from '@components/BlockingViews/FullPageOfflineBlockingView';
@@ -15,16 +15,17 @@ import useThemeStyles from '@hooks/useThemeStyles';
1515
import {setAddNewCompanyCardStepAndData, setAssignCardStepAndData} from '@libs/actions/CompanyCards';
1616
import KeyboardShortcut from '@libs/KeyboardShortcut';
1717
import Log from '@libs/Log';
18+
import {getDomainNameForPolicy} from '@libs/PolicyUtils';
1819
import Navigation from '@navigation/Navigation';
1920
import {handleRestrictedEvent} from '@userActions/App';
2021
import {setPlaidEvent} from '@userActions/BankAccounts';
21-
import {openPlaidCompanyCardLogin} from '@userActions/Plaid';
22+
import {importPlaidAccounts, openPlaidCompanyCardLogin} from '@userActions/Plaid';
2223
import CONST from '@src/CONST';
2324
import ONYXKEYS from '@src/ONYXKEYS';
2425
import type {CompanyCardFeed} from '@src/types/onyx';
2526
import {isEmptyObject} from '@src/types/utils/EmptyObject';
2627

27-
function PlaidConnectionStep({feed}: {feed?: CompanyCardFeed}) {
28+
function PlaidConnectionStep({feed, policyID}: {feed?: CompanyCardFeed; policyID?: string}) {
2829
const {translate} = useLocalize();
2930
const styles = useThemeStyles();
3031
const theme = useTheme();
@@ -39,6 +40,7 @@ function PlaidConnectionStep({feed}: {feed?: CompanyCardFeed}) {
3940
// eslint-disable-next-line @typescript-eslint/non-nullable-type-assertion-style
4041
const plaidDataErrorMessage = !isEmptyObject(plaidErrors) ? (Object.values(plaidErrors).at(0) as string) : '';
4142
const {isOffline} = useNetwork();
43+
const domain = getDomainNameForPolicy(policyID);
4244

4345
const isAuthenticatedWithPlaid = useCallback(() => !!plaidData?.bankAccounts?.length || !isEmptyObject(plaidData?.errors), [plaidData]);
4446

@@ -76,7 +78,7 @@ function PlaidConnectionStep({feed}: {feed?: CompanyCardFeed}) {
7678
return unsubscribeToNavigationShortcuts;
7779
}
7880
if (addNewCard?.data?.selectedCountry) {
79-
openPlaidCompanyCardLogin(addNewCard.data.selectedCountry);
81+
openPlaidCompanyCardLogin(addNewCard.data.selectedCountry, domain, feed);
8082
return unsubscribeToNavigationShortcuts;
8183
}
8284

@@ -88,10 +90,10 @@ function PlaidConnectionStep({feed}: {feed?: CompanyCardFeed}) {
8890
// If we are coming back from offline and we haven't authenticated with Plaid yet, we need to re-run our call to kick off Plaid
8991
// previousNetworkState.current also makes sure that this doesn't run on the first render.
9092
if (previousNetworkState.current && !isOffline && !isAuthenticatedWithPlaid() && addNewCard?.data?.selectedCountry) {
91-
openPlaidCompanyCardLogin(addNewCard.data.selectedCountry);
93+
openPlaidCompanyCardLogin(addNewCard.data.selectedCountry, domain, feed);
9294
}
9395
previousNetworkState.current = isOffline;
94-
}, [addNewCard?.data?.selectedCountry, isAuthenticatedWithPlaid, isOffline]);
96+
}, [addNewCard?.data?.selectedCountry, domain, feed, isAuthenticatedWithPlaid, isOffline]);
9597

9698
const handleBackButtonPress = () => {
9799
if (feed) {
@@ -119,6 +121,28 @@ function PlaidConnectionStep({feed}: {feed?: CompanyCardFeed}) {
119121
(metadata?.institution as PlaidLinkOnSuccessMetadata['institution'])?.name ?? (metadata?.institution as LinkSuccessMetadata['institution'])?.name;
120122

121123
if (feed) {
124+
if (plaidConnectedFeed && addNewCard?.data?.selectedCountry && plaidConnectedFeedName) {
125+
importPlaidAccounts(
126+
publicToken,
127+
plaidConnectedFeed,
128+
plaidConnectedFeedName,
129+
addNewCard.data.selectedCountry,
130+
getDomainNameForPolicy(policyID),
131+
JSON.stringify(metadata?.accounts),
132+
);
133+
InteractionManager.runAfterInteractions(() => {
134+
setAssignCardStepAndData({
135+
data: {
136+
plaidAccessToken: publicToken,
137+
institutionId: plaidConnectedFeed,
138+
plaidConnectedFeedName,
139+
plaidAccounts: metadata?.accounts,
140+
},
141+
currentStep: CONST.COMPANY_CARD.STEP.BANK_CONNECTION,
142+
});
143+
});
144+
return;
145+
}
122146
setAssignCardStepAndData({
123147
data: {
124148
plaidAccessToken: publicToken,

src/pages/workspace/companyCards/assignCard/AssignCardFeedPage.tsx

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,12 @@ function AssignCardFeedPage({route, policy}: AssignCardFeedPageProps) {
6060
/>
6161
);
6262
case CONST.COMPANY_CARD.STEP.PLAID_CONNECTION:
63-
return <PlaidConnectionStep feed={feed} />;
63+
return (
64+
<PlaidConnectionStep
65+
feed={feed}
66+
policyID={policyID}
67+
/>
68+
);
6469
case CONST.COMPANY_CARD.STEP.ASSIGNEE:
6570
return (
6671
<AssigneeStep

0 commit comments

Comments
 (0)