Skip to content

Commit ad21bb4

Browse files
authored
Merge pull request #88431 from callstack-internal/feat/86338-broken-card-reconnection-eliran
Broken personal card reconnection
2 parents 470dab6 + ed69907 commit ad21bb4

15 files changed

Lines changed: 613 additions & 6 deletions

File tree

src/ROUTES.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -814,6 +814,10 @@ const ROUTES = {
814814
route: 'settings/wallet/add-personal-card/:feed/bank-connection',
815815
getRoute: (feed: PersonalCardFeed) => `settings/wallet/add-personal-card/${feed}/bank-connection` as const,
816816
},
817+
SETTINGS_WALLET_PERSONAL_CARD_FIX_CONNECTION: {
818+
route: 'settings/wallet/personal-card/:cardID/fix-connection',
819+
getRoute: (cardID: string) => `settings/wallet/personal-card/${cardID}/fix-connection` as const,
820+
},
817821
SETTINGS_WALLET_PERSONAL_CARD_UPGRADE: 'settings/wallet/add-personal-card/upgrade',
818822
SETTINGS_WALLET_PERSONAL_CARD_WARNING: 'settings/wallet/add-personal-card/warning',
819823
SETTINGS_WALLET_CARD_DIGITAL_DETAILS_UPDATE_ADDRESS: {

src/SCREENS.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -228,6 +228,7 @@ const SCREENS = {
228228
PERSONAL_CARD_EDIT_NAME: 'Settings_Wallet_Personal_Card_Edit_Name',
229229
PERSONAL_CARD_EDIT_TRANSACTION_START_DATE: 'Settings_Wallet_Personal_Card_Edit_Transaction_Start_Date',
230230
PERSONAL_CARD_BANK_CONNECTION: 'Settings_Wallet_PersonalCard_BankConnection',
231+
PERSONAL_CARD_FIX_CONNECTION: 'Settings_Wallet_PersonalCard_FixConnection',
231232
PERSONAL_CARD_ADD_NEW: 'Settings_Wallet_PersonalCard_New',
232233
PERSONAL_CARD_WARNING: 'Settings_Wallet_PersonalCard_Warning',
233234
PERSONAL_CARD_UPGRADE: 'Settings_Wallet_PersonalCard_Upgrade',

src/libs/API/parameters/OpenPlaidCompanyCardLoginParams.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ type OpenPlaidCompanyCardLoginParams = {
55
domain?: string;
66
feed?: string;
77
isPersonal?: boolean;
8+
cardID?: string;
89
};
910

1011
export default OpenPlaidCompanyCardLoginParams;

src/libs/Navigation/AppNavigator/ModalStackNavigators/index.tsx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -453,6 +453,7 @@ const SettingsModalStackNavigator = createModalStackNavigator<SettingsNavigatorP
453453
[SCREENS.SETTINGS.WALLET.TRAVEL_CVV]: () => require<ReactComponentModule>('../../../../pages/settings/Wallet/TravelCVVPage/TravelCVVPage').default,
454454
[SCREENS.SETTINGS.WALLET.TRAVEL_CVV_VERIFY_ACCOUNT]: () => require<ReactComponentModule>('../../../../pages/settings/Wallet/TravelCVVPage/TravelCVVVerifyAccountPage').default,
455455
[SCREENS.SETTINGS.WALLET.PERSONAL_CARD_BANK_CONNECTION]: () => require<ReactComponentModule>('@pages/settings/Wallet/PersonalCards/steps/BankConnection').default,
456+
[SCREENS.SETTINGS.WALLET.PERSONAL_CARD_FIX_CONNECTION]: () => require<ReactComponentModule>('@pages/settings/Wallet/PersonalCards/FixPersonalCardConnectionPage').default,
456457
[SCREENS.SETTINGS.WALLET.PERSONAL_CARD_ADD_NEW]: () => require<ReactComponentModule>('../../../../pages/settings/Wallet/PersonalCards/AddNewCardPage').default,
457458
[SCREENS.SETTINGS.WALLET.PERSONAL_CARD_WARNING]: () => require<ReactComponentModule>('../../../../pages/settings/Wallet/PersonalCards/PersonalCardWarning').default,
458459
[SCREENS.SETTINGS.WALLET.PERSONAL_CARD_UPGRADE]: () => require<ReactComponentModule>('../../../../pages/settings/Wallet/PersonalCards/upgrade/PersonalCardUpgradePage').default,

src/libs/Navigation/linkingConfig/RELATIONS/SETTINGS_TO_RHP.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,7 @@ const SETTINGS_TO_RHP: Partial<Record<keyof SettingsSplitNavigatorParamList, str
6464
SCREENS.SETTINGS.UPDATE_PERSONAL_BANK_ACCOUNT,
6565
SCREENS.SETTINGS.WALLET.PERSONAL_CARD_ADD_NEW,
6666
SCREENS.SETTINGS.WALLET.PERSONAL_CARD_BANK_CONNECTION,
67+
SCREENS.SETTINGS.WALLET.PERSONAL_CARD_FIX_CONNECTION,
6768
SCREENS.SETTINGS.WALLET.PERSONAL_CARD_WARNING,
6869
SCREENS.SETTINGS.WALLET.PERSONAL_CARD_UPGRADE,
6970
SCREENS.SETTINGS.WALLET.CARD_CHANGE_PIN,

src/libs/Navigation/linkingConfig/config.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -274,6 +274,10 @@ const config: LinkingOptions<RootNavigatorParamList>['config'] = {
274274
path: ROUTES.SETTINGS_WALLET_PERSONAL_CARD_BANK_CONNECTION.route,
275275
exact: true,
276276
},
277+
[SCREENS.SETTINGS.WALLET.PERSONAL_CARD_FIX_CONNECTION]: {
278+
path: ROUTES.SETTINGS_WALLET_PERSONAL_CARD_FIX_CONNECTION.route,
279+
exact: true,
280+
},
277281
[SCREENS.SETTINGS.WALLET.PERSONAL_CARD_WARNING]: {
278282
path: ROUTES.SETTINGS_WALLET_PERSONAL_CARD_WARNING,
279283
exact: true,

src/libs/Navigation/types.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -237,6 +237,9 @@ type SettingsNavigatorParamList = {
237237
[SCREENS.SETTINGS.WALLET.PERSONAL_CARD_BANK_CONNECTION]: {
238238
feed: PersonalCardFeed;
239239
};
240+
[SCREENS.SETTINGS.WALLET.PERSONAL_CARD_FIX_CONNECTION]: {
241+
cardID: string;
242+
};
240243
[SCREENS.SETTINGS.WALLET.PERSONAL_CARD_WARNING]: undefined;
241244
[SCREENS.SETTINGS.WALLET.PERSONAL_CARD_UPGRADE]: undefined;
242245
[SCREENS.SETTINGS.ADD_DEBIT_CARD]: undefined;

src/libs/ReportPrimaryActionUtils.ts

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -381,7 +381,7 @@ function isMarkAsCashAction(
381381
currentUserAccountID,
382382
);
383383
const userControlsReport = isReportSubmitter || isReportApprover || isAdmin;
384-
return userControlsReport && shouldShowBrokenConnectionViolation;
384+
return userControlsReport && shouldShowBrokenConnectionViolation && !isReportApprovedUtils({report}) && !isSettled(report);
385385
}
386386

387387
function isMarkAsResolvedAction(report?: Report, violations?: TransactionViolation[], policy?: Policy) {
@@ -543,6 +543,10 @@ function isMarkAsCashActionForTransaction(currentUserLogin: string, parentReport
543543
return false;
544544
}
545545

546+
if (isReportApprovedUtils({report: parentReport}) || isSettled(parentReport)) {
547+
return false;
548+
}
549+
546550
const isReportSubmitter = isCurrentUserSubmitter(parentReport);
547551
const isReportApprover = isPolicyApprover(policy, currentUserLogin);
548552
const isAdmin = policy?.role === CONST.POLICY.ROLE.ADMIN;

src/libs/actions/PersonalCards.ts

Lines changed: 67 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,9 @@
1-
import type {NullishDeep} from 'react-native-onyx';
1+
import type {NullishDeep, OnyxUpdate} from 'react-native-onyx';
22
import Onyx from 'react-native-onyx';
3+
import {write} from '@libs/API';
4+
import {WRITE_COMMANDS} from '@libs/API/types';
5+
import {getMicroSecondOnyxErrorWithTranslationKey} from '@libs/ErrorUtils';
6+
import CONST from '@src/CONST';
37
import ONYXKEYS from '@src/ONYXKEYS';
48
import type {AddNewPersonalCard, AddNewPersonalCardFeedData, AddNewPersonalCardFeedStep} from '@src/types/onyx/PersonalCard';
59

@@ -29,4 +33,65 @@ function clearAddNewPersonalCardErrors() {
2933
Onyx.merge(ONYXKEYS.ADD_NEW_PERSONAL_CARD, {errors: null});
3034
}
3135

32-
export {clearAddNewPersonalCardErrors, clearAddNewPersonalCardFlow, setAddNewPersonalCardStepAndData};
36+
function updatePersonalCardConnection(cardID: string, lastScrapeResult?: number) {
37+
const optimisticData: Array<OnyxUpdate<typeof ONYXKEYS.COLLECTION.WORKSPACE_CARDS_LIST | typeof ONYXKEYS.CARD_LIST>> = [
38+
{
39+
onyxMethod: Onyx.METHOD.MERGE,
40+
key: ONYXKEYS.CARD_LIST,
41+
value: {
42+
[cardID]: {
43+
lastScrapeResult: CONST.JSON_CODE.SUCCESS,
44+
isLoadingLastUpdated: true,
45+
pendingFields: {
46+
lastScrape: CONST.RED_BRICK_ROAD_PENDING_ACTION.UPDATE,
47+
},
48+
errorFields: {
49+
lastScrape: null,
50+
},
51+
},
52+
},
53+
},
54+
];
55+
56+
const finallyData: Array<OnyxUpdate<typeof ONYXKEYS.COLLECTION.WORKSPACE_CARDS_LIST | typeof ONYXKEYS.CARD_LIST>> = [
57+
{
58+
onyxMethod: Onyx.METHOD.MERGE,
59+
key: ONYXKEYS.CARD_LIST,
60+
value: {
61+
[cardID]: {
62+
isLoadingLastUpdated: false,
63+
pendingFields: {
64+
lastScrape: null,
65+
},
66+
},
67+
},
68+
},
69+
];
70+
71+
const failureData: Array<OnyxUpdate<typeof ONYXKEYS.COLLECTION.WORKSPACE_CARDS_LIST | typeof ONYXKEYS.CARD_LIST>> = [
72+
{
73+
onyxMethod: Onyx.METHOD.MERGE,
74+
key: ONYXKEYS.CARD_LIST,
75+
value: {
76+
[cardID]: {
77+
lastScrapeResult,
78+
isLoadingLastUpdated: false,
79+
pendingFields: {
80+
lastScrape: null,
81+
},
82+
errorFields: {
83+
lastScrape: getMicroSecondOnyxErrorWithTranslationKey('common.genericErrorMessage'),
84+
},
85+
},
86+
},
87+
},
88+
];
89+
90+
const parameters = {
91+
cardID: Number(cardID),
92+
};
93+
94+
write(WRITE_COMMANDS.SYNC_CARD, parameters, {optimisticData, finallyData, failureData});
95+
}
96+
97+
export {clearAddNewPersonalCardErrors, clearAddNewPersonalCardFlow, setAddNewPersonalCardStepAndData, updatePersonalCardConnection};

src/libs/actions/Plaid.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@ function openPlaidBankLogin(allowDebit: boolean, bankAccountID: number) {
5959
/**
6060
* Gets the Plaid Link token used to initialize the Plaid SDK for Company card
6161
*/
62-
function openPlaidCompanyCardLogin(country: string, domain?: string, feed?: CardFeedWithNumber | CompanyCardFeedWithDomainID, isPersonal?: boolean) {
62+
function openPlaidCompanyCardLogin(country: string, domain?: string, feed?: CardFeedWithNumber | CompanyCardFeedWithDomainID, isPersonal?: boolean, cardID?: string) {
6363
const {redirectURI, androidPackage} = getPlaidLinkTokenParameters();
6464

6565
const params: OpenPlaidCompanyCardLoginParams = {
@@ -69,6 +69,7 @@ function openPlaidCompanyCardLogin(country: string, domain?: string, feed?: Card
6969
domain,
7070
isPersonal,
7171
feed: feed ? getCompanyCardFeed(feed) : undefined,
72+
cardID,
7273
};
7374

7475
const optimisticData = [

0 commit comments

Comments
 (0)