diff --git a/src/ONYXKEYS.ts b/src/ONYXKEYS.ts index 473f6b788460..ac62c060ff47 100755 --- a/src/ONYXKEYS.ts +++ b/src/ONYXKEYS.ts @@ -819,6 +819,9 @@ const ONYXKEYS = { /** The value that indicates whether Continuous Reconciliation should be used on the domain */ EXPENSIFY_CARD_USE_CONTINUOUS_RECONCILIATION: 'expensifyCard_useContinuousReconciliation_', + /** Pending action for continuous reconciliation enabled status */ + EXPENSIFY_CARD_USE_CONTINUOUS_RECONCILIATION_PENDING_ACTION: 'expensifyCard_useContinuousReconciliationPendingAction_', + /** The selected accounting integration bank account ID for card reconciliation */ EXPENSIFY_CARD_RECONCILIATION_BANK_ACCOUNT_ID: 'expensifyCard_bankAccount_', @@ -1322,7 +1325,8 @@ type OnyxCollectionValuesMapping = { [ONYXKEYS.COLLECTION.PRIVATE_EXPENSIFY_CARD_MANUAL_BILLING]: boolean; [ONYXKEYS.COLLECTION.WORKSPACE_CARDS_LIST]: OnyxTypes.WorkspaceCardsList; [ONYXKEYS.COLLECTION.EXPENSIFY_CARD_CONTINUOUS_RECONCILIATION_CONNECTION]: OnyxTypes.PolicyConnectionName; - [ONYXKEYS.COLLECTION.EXPENSIFY_CARD_USE_CONTINUOUS_RECONCILIATION]: OnyxTypes.CardContinuousReconciliation; + [ONYXKEYS.COLLECTION.EXPENSIFY_CARD_USE_CONTINUOUS_RECONCILIATION]: boolean; + [ONYXKEYS.COLLECTION.EXPENSIFY_CARD_USE_CONTINUOUS_RECONCILIATION_PENDING_ACTION]: OnyxTypes.CardContinuousReconciliation; [ONYXKEYS.COLLECTION.EXPENSIFY_CARD_RECONCILIATION_BANK_ACCOUNT_ID]: string; [ONYXKEYS.COLLECTION.LAST_SELECTED_FEED]: OnyxTypes.CompanyCardFeedWithDomainID; [ONYXKEYS.COLLECTION.LAST_SELECTED_EXPENSIFY_CARD_FEED]: OnyxTypes.FundID; diff --git a/src/libs/actions/Card.ts b/src/libs/actions/Card.ts index aa3384467e67..38f675eb6952 100644 --- a/src/libs/actions/Card.ts +++ b/src/libs/actions/Card.ts @@ -1512,13 +1512,21 @@ function toggleContinuousReconciliation(workspaceAccountID: number, shouldUseCon }; const optimisticData: Array< - OnyxUpdate + OnyxUpdate< + | typeof ONYXKEYS.COLLECTION.EXPENSIFY_CARD_USE_CONTINUOUS_RECONCILIATION + | typeof ONYXKEYS.COLLECTION.EXPENSIFY_CARD_USE_CONTINUOUS_RECONCILIATION_PENDING_ACTION + | typeof ONYXKEYS.COLLECTION.EXPENSIFY_CARD_CONTINUOUS_RECONCILIATION_CONNECTION + > > = [ { onyxMethod: Onyx.METHOD.MERGE, key: `${ONYXKEYS.COLLECTION.EXPENSIFY_CARD_USE_CONTINUOUS_RECONCILIATION}${workspaceAccountID}`, + value: shouldUseContinuousReconciliation, + }, + { + onyxMethod: Onyx.METHOD.MERGE, + key: `${ONYXKEYS.COLLECTION.EXPENSIFY_CARD_USE_CONTINUOUS_RECONCILIATION_PENDING_ACTION}${workspaceAccountID}`, value: { - value: shouldUseContinuousReconciliation, pendingAction: CONST.RED_BRICK_ROAD_PENDING_ACTION.UPDATE, }, }, @@ -1530,15 +1538,21 @@ function toggleContinuousReconciliation(workspaceAccountID: number, shouldUseCon ]; const successData: Array< - OnyxUpdate + OnyxUpdate< + | typeof ONYXKEYS.COLLECTION.EXPENSIFY_CARD_USE_CONTINUOUS_RECONCILIATION + | typeof ONYXKEYS.COLLECTION.EXPENSIFY_CARD_USE_CONTINUOUS_RECONCILIATION_PENDING_ACTION + | typeof ONYXKEYS.COLLECTION.EXPENSIFY_CARD_CONTINUOUS_RECONCILIATION_CONNECTION + > > = [ { onyxMethod: Onyx.METHOD.MERGE, key: `${ONYXKEYS.COLLECTION.EXPENSIFY_CARD_USE_CONTINUOUS_RECONCILIATION}${workspaceAccountID}`, - value: { - value: shouldUseContinuousReconciliation, - pendingAction: null, - }, + value: shouldUseContinuousReconciliation, + }, + { + onyxMethod: Onyx.METHOD.MERGE, + key: `${ONYXKEYS.COLLECTION.EXPENSIFY_CARD_USE_CONTINUOUS_RECONCILIATION_PENDING_ACTION}${workspaceAccountID}`, + value: null, }, { onyxMethod: Onyx.METHOD.MERGE, @@ -1548,15 +1562,21 @@ function toggleContinuousReconciliation(workspaceAccountID: number, shouldUseCon ]; const failureData: Array< - OnyxUpdate + OnyxUpdate< + | typeof ONYXKEYS.COLLECTION.EXPENSIFY_CARD_USE_CONTINUOUS_RECONCILIATION + | typeof ONYXKEYS.COLLECTION.EXPENSIFY_CARD_USE_CONTINUOUS_RECONCILIATION_PENDING_ACTION + | typeof ONYXKEYS.COLLECTION.EXPENSIFY_CARD_CONTINUOUS_RECONCILIATION_CONNECTION + > > = [ { onyxMethod: Onyx.METHOD.MERGE, key: `${ONYXKEYS.COLLECTION.EXPENSIFY_CARD_USE_CONTINUOUS_RECONCILIATION}${workspaceAccountID}`, - value: { - value: !shouldUseContinuousReconciliation, - pendingAction: null, - }, + value: !shouldUseContinuousReconciliation, + }, + { + onyxMethod: Onyx.METHOD.MERGE, + key: `${ONYXKEYS.COLLECTION.EXPENSIFY_CARD_USE_CONTINUOUS_RECONCILIATION_PENDING_ACTION}${workspaceAccountID}`, + value: null, }, { onyxMethod: Onyx.METHOD.MERGE, diff --git a/src/pages/workspace/accounting/reconciliation/CardReconciliationPage.tsx b/src/pages/workspace/accounting/reconciliation/CardReconciliationPage.tsx index 2d4d8dc42fd2..94eacc33c8d1 100644 --- a/src/pages/workspace/accounting/reconciliation/CardReconciliationPage.tsx +++ b/src/pages/workspace/accounting/reconciliation/CardReconciliationPage.tsx @@ -74,6 +74,7 @@ function CardReconciliationPage({policy, route}: CardReconciliationPageProps) { const effectiveDomainID = Number(domainID ?? workspaceAccountID); const [continuousReconciliation] = useOnyx(`${ONYXKEYS.COLLECTION.EXPENSIFY_CARD_USE_CONTINUOUS_RECONCILIATION}${effectiveDomainID}`); + const [continuousReconciliationPendingAction] = useOnyx(`${ONYXKEYS.COLLECTION.EXPENSIFY_CARD_USE_CONTINUOUS_RECONCILIATION_PENDING_ACTION}${effectiveDomainID}`); const [currentConnectionName] = useOnyx(`${ONYXKEYS.COLLECTION.EXPENSIFY_CARD_CONTINUOUS_RECONCILIATION_CONNECTION}${effectiveDomainID}`); const [reconciliationBankAccountID] = useOnyx(`${ONYXKEYS.COLLECTION.EXPENSIFY_CARD_RECONCILIATION_BANK_ACCOUNT_ID}${effectiveDomainID}`); @@ -124,11 +125,11 @@ function CardReconciliationPage({policy, route}: CardReconciliationPageProps) { }, [policyID]); useEffect(() => { - if (continuousReconciliation?.value !== undefined) { + if (continuousReconciliation !== undefined) { return; } fetchPolicyAccountingData(); - }, [continuousReconciliation?.value, fetchPolicyAccountingData]); + }, [continuousReconciliation, fetchPolicyAccountingData]); return ( {!autoSync && ( @@ -169,8 +170,8 @@ function CardReconciliationPage({policy, route}: CardReconciliationPageProps) { /> )} - - {!!paymentBankAccountID && !!continuousReconciliation?.value && ( + + {!!paymentBankAccountID && !!continuousReconciliation && ( { - if (!cardSettings || !hasActiveAccountingConnection || continuousReconciliation?.value !== undefined || reconciliationConnection !== undefined) { + if (!cardSettings || !hasActiveAccountingConnection || continuousReconciliation !== undefined || reconciliationConnection !== undefined) { return; } fetchPolicyAccountingData(); - }, [cardSettings, hasActiveAccountingConnection, continuousReconciliation?.value, reconciliationConnection, fetchPolicyAccountingData]); + }, [cardSettings, hasActiveAccountingConnection, continuousReconciliation, reconciliationConnection, fetchPolicyAccountingData]); const eligibleBankAccountsOptions: BankAccountListItem[] = eligibleBankAccounts.map((bankAccount) => { const bankName = (bankAccount.accountData?.addressName ?? '') as BankName; @@ -124,7 +124,7 @@ function WorkspaceSettlementAccountPage({route}: WorkspaceSettlementAccountPageP return ( <> {translate('workspace.expensifyCard.settlementAccountDescription')} - {!!continuousReconciliation?.value && !!connectionParam && hasActiveAccountingConnection && ( + {!!continuousReconciliation && !!connectionParam && hasActiveAccountingConnection && (