From ec976e8205230b2a7bc73331d25c44372884d2c9 Mon Sep 17 00:00:00 2001 From: Nicolay Arefyeu Date: Tue, 17 Jun 2025 14:12:53 +0300 Subject: [PATCH 1/2] add new prop for connection --- src/libs/actions/getCompanyCardBankConnection/index.tsx | 8 ++++++-- .../companyCards/BankConnection/index.native.tsx | 3 ++- src/pages/workspace/companyCards/BankConnection/index.tsx | 7 +++---- .../workspace/companyCards/addNew/PlaidConnectionStep.tsx | 2 ++ src/types/onyx/AssignCard.ts | 5 +++++ src/types/onyx/CardFeeds.ts | 5 +++++ 6 files changed, 23 insertions(+), 7 deletions(-) diff --git a/src/libs/actions/getCompanyCardBankConnection/index.tsx b/src/libs/actions/getCompanyCardBankConnection/index.tsx index a34865ce31f1..fbecc1a68106 100644 --- a/src/libs/actions/getCompanyCardBankConnection/index.tsx +++ b/src/libs/actions/getCompanyCardBankConnection/index.tsx @@ -1,3 +1,5 @@ +import type {LinkAccount} from 'react-native-plaid-link-sdk'; +import type {PlaidAccount} from 'react-plaid-link'; import {getApiRoot} from '@libs/ApiUtils'; import * as NetworkStore from '@libs/Network/NetworkStore'; import * as PolicyUtils from '@libs/PolicyUtils'; @@ -18,6 +20,7 @@ type CompanyCardPlaidConnection = { feedName: string; feed: string; country: string; + plaidAccounts: string; }; function getCompanyCardBankConnection(policyID?: string, bankName?: string) { @@ -48,8 +51,8 @@ function getCompanyCardBankConnection(policyID?: string, bankName?: string) { return `${commandURL}partners/banks/${bank}/oauth_callback.php?${new URLSearchParams(params).toString()}`; } -function getCompanyCardPlaidConnection(policyID?: string, publicToken?: string, feed?: string, feedName?: string, country?: string) { - if (!policyID || !publicToken || !feed || !feedName || !country) { +function getCompanyCardPlaidConnection(policyID?: string, publicToken?: string, feed?: string, feedName?: string, country?: string, plaidAccounts?: LinkAccount[] | PlaidAccount[]) { + if (!policyID || !publicToken || !feed || !feedName || !country || !plaidAccounts?.length) { return null; } const authToken = NetworkStore.getAuthToken(); @@ -60,6 +63,7 @@ function getCompanyCardPlaidConnection(policyID?: string, publicToken?: string, publicToken, country, domainName: PolicyUtils.getDomainNameForPolicy(policyID), + plaidAccounts: JSON.stringify(plaidAccounts), }; const commandURL = getApiRoot({ diff --git a/src/pages/workspace/companyCards/BankConnection/index.native.tsx b/src/pages/workspace/companyCards/BankConnection/index.native.tsx index f838acdf77c7..92935ed89373 100644 --- a/src/pages/workspace/companyCards/BankConnection/index.native.tsx +++ b/src/pages/workspace/companyCards/BankConnection/index.native.tsx @@ -56,11 +56,12 @@ function BankConnection({policyID: policyIDFromProps, feed, route}: BankConnecti const plaidToken = addNewCard?.data?.publicToken ?? assignCard?.data?.plaidAccessToken; const plaidFeed = addNewCard?.data?.plaidConnectedFeed ?? assignCard?.data?.institutionId; const plaidFeedName = addNewCard?.data?.plaidConnectedFeedName ?? assignCard?.data?.plaidConnectedFeedName; + const plaidAccounts = addNewCard?.data?.plaidAccounts ?? assignCard?.data?.plaidAccounts; const country = addNewCard?.data?.selectedCountry; const url = isBetaEnabled(CONST.BETAS.PLAID_COMPANY_CARDS) && plaidToken - ? getCompanyCardPlaidConnection(policyID, plaidToken, plaidFeed, plaidFeedName, country) + ? getCompanyCardPlaidConnection(policyID, plaidToken, plaidFeed, plaidFeedName, country, plaidAccounts) : getCompanyCardBankConnection(policyID, bankName); const [cardFeeds] = useCardFeeds(policyID); const [isConnectionCompleted, setConnectionCompleted] = useState(false); diff --git a/src/pages/workspace/companyCards/BankConnection/index.tsx b/src/pages/workspace/companyCards/BankConnection/index.tsx index 18faf890ecec..2edb35c3223a 100644 --- a/src/pages/workspace/companyCards/BankConnection/index.tsx +++ b/src/pages/workspace/companyCards/BankConnection/index.tsx @@ -60,14 +60,13 @@ function BankConnection({policyID: policyIDFromProps, feed, route}: BankConnecti const {isOffline} = useNetwork(); const plaidToken = addNewCard?.data?.publicToken ?? assignCard?.data?.plaidAccessToken; const plaidFeed = addNewCard?.data?.plaidConnectedFeed ?? assignCard?.data?.institutionId; + const plaidAccounts = addNewCard?.data?.plaidAccounts ?? assignCard?.data?.plaidAccounts; const plaidFeedName = addNewCard?.data?.plaidConnectedFeedName ?? assignCard?.data?.plaidConnectedFeedName; const country = addNewCard?.data?.selectedCountry; const {isBetaEnabled} = usePermissions(); + const isPlaid = isBetaEnabled(CONST.BETAS.PLAID_COMPANY_CARDS) && !!plaidToken; - const url = - isBetaEnabled(CONST.BETAS.PLAID_COMPANY_CARDS) && plaidToken - ? getCompanyCardPlaidConnection(policyID, plaidToken, plaidFeed, plaidFeedName, country) - : getCompanyCardBankConnection(policyID, bankName); + const url = isPlaid ? getCompanyCardPlaidConnection(policyID, plaidToken, plaidFeed, plaidFeedName, country, plaidAccounts) : getCompanyCardBankConnection(policyID, bankName); const isFeedExpired = feed ? isSelectedFeedExpired(cardFeeds?.settings?.oAuthAccountDetails?.[feed]) : false; const headerTitleAddCards = !backTo ? translate('workspace.companyCards.addCards') : undefined; const headerTitle = feed ? translate('workspace.companyCards.assignCard') : headerTitleAddCards; diff --git a/src/pages/workspace/companyCards/addNew/PlaidConnectionStep.tsx b/src/pages/workspace/companyCards/addNew/PlaidConnectionStep.tsx index a61d84c024e4..3268b78be699 100644 --- a/src/pages/workspace/companyCards/addNew/PlaidConnectionStep.tsx +++ b/src/pages/workspace/companyCards/addNew/PlaidConnectionStep.tsx @@ -124,6 +124,7 @@ function PlaidConnectionStep({feed}: {feed?: CompanyCardFeed}) { plaidAccessToken: publicToken, institutionId: plaidConnectedFeed, plaidConnectedFeedName, + plaidAccounts: metadata?.accounts }, currentStep: CONST.COMPANY_CARD.STEP.BANK_CONNECTION, }); @@ -135,6 +136,7 @@ function PlaidConnectionStep({feed}: {feed?: CompanyCardFeed}) { publicToken, plaidConnectedFeed, plaidConnectedFeedName, + plaidAccounts: metadata?.accounts }, }); }} diff --git a/src/types/onyx/AssignCard.ts b/src/types/onyx/AssignCard.ts index c810cd989c3c..dd0ba64f8683 100644 --- a/src/types/onyx/AssignCard.ts +++ b/src/types/onyx/AssignCard.ts @@ -1,3 +1,5 @@ +import type {LinkAccount} from 'react-native-plaid-link-sdk'; +import type {PlaidAccount} from 'react-plaid-link'; import type {ValueOf} from 'type-fest'; import type CONST from '@src/CONST'; @@ -35,6 +37,9 @@ type AssignCardData = { /** Plaid feed name */ plaidConnectedFeedName?: string; + + /** Plaid accounts */ + plaidAccounts?: LinkAccount[] | PlaidAccount[]; }; /** Model of assign card flow */ diff --git a/src/types/onyx/CardFeeds.ts b/src/types/onyx/CardFeeds.ts index 5c1479a0c0c6..7941e8fd1cc8 100644 --- a/src/types/onyx/CardFeeds.ts +++ b/src/types/onyx/CardFeeds.ts @@ -1,3 +1,5 @@ +import type {LinkAccount} from 'react-native-plaid-link-sdk'; +import type {PlaidAccount} from 'react-plaid-link'; import type {ValueOf} from 'type-fest'; import type CONST from '@src/CONST'; import type * as OnyxCommon from './OnyxCommon'; @@ -127,6 +129,9 @@ type AddNewCardFeedData = { /** Feed name from Plaid connection */ plaidConnectedFeedName?: string; + + /** Plaid accounts */ + plaidAccounts?: LinkAccount[] | PlaidAccount[]; }; /** Issue new card flow steps */ From 9cc38ac475a2f04117ddf7cb34c2503d0a43ae3d Mon Sep 17 00:00:00 2001 From: Nicolay Arefyeu Date: Tue, 17 Jun 2025 14:19:46 +0300 Subject: [PATCH 2/2] prettier --- .../workspace/companyCards/addNew/PlaidConnectionStep.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/pages/workspace/companyCards/addNew/PlaidConnectionStep.tsx b/src/pages/workspace/companyCards/addNew/PlaidConnectionStep.tsx index 3268b78be699..c67f7f81e5f0 100644 --- a/src/pages/workspace/companyCards/addNew/PlaidConnectionStep.tsx +++ b/src/pages/workspace/companyCards/addNew/PlaidConnectionStep.tsx @@ -124,7 +124,7 @@ function PlaidConnectionStep({feed}: {feed?: CompanyCardFeed}) { plaidAccessToken: publicToken, institutionId: plaidConnectedFeed, plaidConnectedFeedName, - plaidAccounts: metadata?.accounts + plaidAccounts: metadata?.accounts, }, currentStep: CONST.COMPANY_CARD.STEP.BANK_CONNECTION, }); @@ -136,7 +136,7 @@ function PlaidConnectionStep({feed}: {feed?: CompanyCardFeed}) { publicToken, plaidConnectedFeed, plaidConnectedFeedName, - plaidAccounts: metadata?.accounts + plaidAccounts: metadata?.accounts, }, }); }}