From 84a793000c3ae4138c597e6fb98e58db973d289f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lucien=20Akchot=C3=A9?= Date: Wed, 29 Apr 2026 19:05:53 +0200 Subject: [PATCH 01/17] remove add-new close date step constants --- src/CONST/index.ts | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/CONST/index.ts b/src/CONST/index.ts index 6bc392a224c0..0893306e9729 100644 --- a/src/CONST/index.ts +++ b/src/CONST/index.ts @@ -4127,8 +4127,6 @@ const CONST = { AMEX_CUSTOM_FEED: 'AmexCustomFeed', SELECT_COUNTRY: 'SelectCountry', PLAID_CONNECTION: 'PlaidConnection', - SELECT_STATEMENT_CLOSE_DATE: 'SelectStatementCloseDate', - SELECT_DIRECT_STATEMENT_CLOSE_DATE: 'SelectDirectStatementCloseDate', IMPORT_FROM_FILE: 'ImportFromFile', }, CARD_TYPE: { From 99925e038cd02d376a588b4b55924fc01a5d7575 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lucien=20Akchot=C3=A9?= Date: Wed, 29 Apr 2026 19:05:54 +0200 Subject: [PATCH 02/17] update plaid assign import call --- src/hooks/useAssignCard.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/hooks/useAssignCard.ts b/src/hooks/useAssignCard.ts index 62448f225f3f..5a9061725293 100644 --- a/src/hooks/useAssignCard.ts +++ b/src/hooks/useAssignCard.ts @@ -175,7 +175,7 @@ function useInitialAssignCardStep({policyID, selectedFeed}: UseInitialAssignCard // Refetch plaid card list if (!isFeedExpired && plaidAccessToken && !hasImportedPlaidAccounts.current) { const country = feedData?.country ?? ''; - importPlaidAccounts('', selectedFeed, '', country, getDomainNameForPolicy(policyID), '', undefined, undefined, plaidAccessToken); + importPlaidAccounts('', selectedFeed, '', country, getDomainNameForPolicy(policyID), '', plaidAccessToken); hasImportedPlaidAccounts.current = true; } From 2f45cc1610dd19f7a7bae5b77ffb2c5c2b2f12f5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lucien=20Akchot=C3=A9?= Date: Wed, 29 Apr 2026 19:05:54 +0200 Subject: [PATCH 03/17] update `useCardFeeds()` return data --- src/hooks/useCardFeeds.tsx | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/hooks/useCardFeeds.tsx b/src/hooks/useCardFeeds.tsx index 6596f80851ce..dee8752f0562 100644 --- a/src/hooks/useCardFeeds.tsx +++ b/src/hooks/useCardFeeds.tsx @@ -20,8 +20,10 @@ import useWorkspaceAccountID from './useWorkspaceAccountID'; * 1. Combined workspace and domain card feeds specific to the given policyID (or `undefined` if unavailable). * 2. The result metadata from the Onyx collection fetch. * 3. Card feeds specific to the given policyID (or `undefined` if unavailable). + * 4. Card feed status by domain ID. + * 5. Workspace account ID for the policy. */ -const useCardFeeds = (policyID: string | undefined): [CombinedCardFeeds | undefined, ResultMetadata>, CardFeeds | undefined, CardFeedsStatusByDomainID] => { +const useCardFeeds = (policyID: string | undefined): [CombinedCardFeeds | undefined, ResultMetadata>, CardFeeds | undefined, CardFeedsStatusByDomainID, number] => { const workspaceAccountID = useWorkspaceAccountID(policyID); const [allFeeds, allFeedsResult] = useOnyx(ONYXKEYS.COLLECTION.SHARED_NVP_PRIVATE_DOMAIN_MEMBER); const feedKeysWithCards = useFeedKeysWithAssignedCards(); @@ -61,7 +63,7 @@ const useCardFeeds = (policyID: string | undefined): [CombinedCardFeeds | undefi const workspaceCardFeedsStatus = getWorkspaceCardFeedsStatus(allFeeds); - return [workspaceFeeds, allFeedsResult, defaultFeed, workspaceCardFeedsStatus]; + return [workspaceFeeds, allFeedsResult, defaultFeed, workspaceCardFeedsStatus, workspaceAccountID]; }; export default useCardFeeds; From 6b408a09e7258cae7ea56c1fee5045196739a457 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lucien=20Akchot=C3=A9?= Date: Wed, 29 Apr 2026 19:05:55 +0200 Subject: [PATCH 04/17] update plaid import hook params --- src/hooks/useImportPlaidAccounts.ts | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/src/hooks/useImportPlaidAccounts.ts b/src/hooks/useImportPlaidAccounts.ts index 02b223a31206..94b6840db761 100644 --- a/src/hooks/useImportPlaidAccounts.ts +++ b/src/hooks/useImportPlaidAccounts.ts @@ -13,13 +13,11 @@ export default function useImportPlaidAccounts(policyID?: string) { const plaidFeedName = addNewCard?.data?.plaidConnectedFeedName ?? assignCard?.cardToAssign?.plaidConnectedFeedName; const plaidAccounts = addNewCard?.data?.plaidAccounts ?? assignCard?.cardToAssign?.plaidAccounts; const country = addNewCard?.data?.selectedCountry; - const statementPeriodEnd = addNewCard?.data?.statementPeriodEnd; - const statementPeriodEndDay = addNewCard?.data?.statementPeriodEndDay; return useCallback(() => { if (!policyID || !plaidToken || !plaidFeed || !plaidFeedName || !country || !plaidAccounts?.length) { return; } - importPlaidAccounts(plaidToken, plaidFeed, plaidFeedName, country, getDomainNameForPolicy(policyID), JSON.stringify(plaidAccounts), statementPeriodEnd, statementPeriodEndDay, ''); - }, [statementPeriodEnd, statementPeriodEndDay, country, plaidAccounts, plaidFeed, plaidFeedName, plaidToken, policyID]); + importPlaidAccounts(plaidToken, plaidFeed, plaidFeedName, country, getDomainNameForPolicy(policyID), JSON.stringify(plaidAccounts), ''); + }, [country, plaidAccounts, plaidFeed, plaidFeedName, plaidToken, policyID]); } From c304bc18a2c347a94509cc07756baaf9699f4262 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lucien=20Akchot=C3=A9?= Date: Wed, 29 Apr 2026 19:05:55 +0200 Subject: [PATCH 05/17] update add-feed guard return data --- src/hooks/useIsBlockedToAddFeed.ts | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/hooks/useIsBlockedToAddFeed.ts b/src/hooks/useIsBlockedToAddFeed.ts index 88a52a9bb356..036afcb11267 100644 --- a/src/hooks/useIsBlockedToAddFeed.ts +++ b/src/hooks/useIsBlockedToAddFeed.ts @@ -19,7 +19,7 @@ import usePolicy from './usePolicy'; */ function useIsBlockedToAddFeed(policyID?: string) { const policy = usePolicy(policyID); - const [cardFeeds, allFeedsResult, defaultFeed] = useCardFeeds(policyID); + const [cardFeeds, allFeedsResult, defaultFeed, , workspaceAccountID] = useCardFeeds(policyID); const companyFeeds = getCompanyFeeds(cardFeeds, true); const isCollect = isCollectPolicy(policy); const isAllFeedsResultLoading = isLoadingOnyxValue(allFeedsResult); @@ -39,6 +39,8 @@ function useIsBlockedToAddFeed(policyID?: string) { return { isBlockedToAddNewFeeds: isCollect && !isLoading && prevCompanyFeedsLength >= 1, isAllFeedsResultLoading: isCollect && (isLoading || isAllFeedsResultLoading), + cardFeeds, + workspaceAccountID, }; } From 1ea1338900f5dd1acb0504459616e4636811d1b7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lucien=20Akchot=C3=A9?= Date: Wed, 29 Apr 2026 19:05:55 +0200 Subject: [PATCH 06/17] remove plaid close date params --- src/libs/API/parameters/ImportPlaidAccountsParams.ts | 4 ---- 1 file changed, 4 deletions(-) diff --git a/src/libs/API/parameters/ImportPlaidAccountsParams.ts b/src/libs/API/parameters/ImportPlaidAccountsParams.ts index bc13b5b0dfee..12a1c231bca1 100644 --- a/src/libs/API/parameters/ImportPlaidAccountsParams.ts +++ b/src/libs/API/parameters/ImportPlaidAccountsParams.ts @@ -1,5 +1,3 @@ -import type {StatementPeriodEnd, StatementPeriodEndDay} from '@src/types/onyx/CardFeeds'; - type ImportPlaidAccountsParams = { publicToken: string; feed: string; @@ -7,8 +5,6 @@ type ImportPlaidAccountsParams = { country: string; domainName: string; plaidAccounts: string; - statementPeriodEnd?: StatementPeriodEnd; - statementPeriodEndDay?: StatementPeriodEndDay; plaidAccessToken?: string; }; From 197b80f57a617635be3246a9784816259ac13659 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lucien=20Akchot=C3=A9?= Date: Wed, 29 Apr 2026 19:05:55 +0200 Subject: [PATCH 07/17] remove feed setup close date params --- src/libs/API/parameters/RequestFeedSetupParams.ts | 4 ---- 1 file changed, 4 deletions(-) diff --git a/src/libs/API/parameters/RequestFeedSetupParams.ts b/src/libs/API/parameters/RequestFeedSetupParams.ts index 1b505f195826..59a6dd4e237c 100644 --- a/src/libs/API/parameters/RequestFeedSetupParams.ts +++ b/src/libs/API/parameters/RequestFeedSetupParams.ts @@ -1,11 +1,7 @@ -import type {StatementPeriodEnd, StatementPeriodEndDay} from '@src/types/onyx/CardFeeds'; - type RequestFeedSetupParams = { policyID: string; feedDetails: string; feedType: string; - statementPeriodEnd?: StatementPeriodEnd; - statementPeriodEndDay?: StatementPeriodEndDay; }; export default RequestFeedSetupParams; From 61c8353c414774980a58fc291ac01588139667f6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lucien=20Akchot=C3=A9?= Date: Wed, 29 Apr 2026 19:05:56 +0200 Subject: [PATCH 08/17] remove close date params from feed setup --- src/libs/actions/CompanyCards.ts | 5 ----- 1 file changed, 5 deletions(-) diff --git a/src/libs/actions/CompanyCards.ts b/src/libs/actions/CompanyCards.ts index 01b4e0996252..b2be393975e7 100644 --- a/src/libs/actions/CompanyCards.ts +++ b/src/libs/actions/CompanyCards.ts @@ -180,8 +180,6 @@ function addNewCompanyCardsFeed( cardFeed: CompanyCardFeed, feedDetails: CardFeedDetails, cardFeeds: OnyxEntry, - statementPeriodEnd: StatementPeriodEnd | undefined, - statementPeriodEndDay: StatementPeriodEndDay | undefined, lastSelectedFeed?: CompanyCardFeedWithDomainID, ) { if (!policyID) { @@ -205,7 +203,6 @@ function addNewCompanyCardsFeed( settings: { companyCards: { [feedType]: { - statementPeriodEndDay: statementPeriodEndDay ?? statementPeriodEnd ?? null, errors: null, }, }, @@ -252,8 +249,6 @@ function addNewCompanyCardsFeed( .map(([key, value]) => `${key}: ${value}`) .join(', ') : '', - statementPeriodEnd, - statementPeriodEndDay, }; API.write(WRITE_COMMANDS.REQUEST_FEED_SETUP, parameters, {optimisticData, failureData, finallyData}); From e7e736e62e0abe9113e481264fd577b1130071b6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lucien=20Akchot=C3=A9?= Date: Wed, 29 Apr 2026 19:05:56 +0200 Subject: [PATCH 09/17] remove close date params from plaid import --- src/libs/actions/Plaid.ts | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/src/libs/actions/Plaid.ts b/src/libs/actions/Plaid.ts index eb0d6f59ff54..b6ae3c7433ec 100644 --- a/src/libs/actions/Plaid.ts +++ b/src/libs/actions/Plaid.ts @@ -7,7 +7,7 @@ import {getCompanyCardFeed} from '@libs/CardUtils'; import getPlaidLinkTokenParameters from '@libs/getPlaidLinkTokenParameters'; import CONST from '@src/CONST'; import ONYXKEYS from '@src/ONYXKEYS'; -import type {CardFeedWithDomainID, CardFeedWithNumber, CompanyCardFeedWithDomainID, StatementPeriodEnd, StatementPeriodEndDay} from '@src/types/onyx/CardFeeds'; +import type {CardFeedWithDomainID, CardFeedWithNumber, CompanyCardFeedWithDomainID} from '@src/types/onyx/CardFeeds'; /** * Gets the Plaid Link token used to initialize the Plaid SDK @@ -146,8 +146,6 @@ function importPlaidAccounts( country: string, domainName: string, plaidAccounts: string, - statementPeriodEnd: StatementPeriodEnd | undefined, - statementPeriodEndDay: StatementPeriodEndDay | undefined, plaidAccessToken: string | undefined, ) { const parameters: ImportPlaidAccountsParams = { @@ -157,8 +155,6 @@ function importPlaidAccounts( country, domainName, plaidAccounts, - statementPeriodEnd, - statementPeriodEndDay, plaidAccessToken, }; From 5e910852a195cc91e99313286d492922746cf8b4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lucien=20Akchot=C3=A9?= Date: Wed, 29 Apr 2026 19:05:56 +0200 Subject: [PATCH 10/17] skip close date after native bank connect --- .../companyCards/BankConnection/index.native.tsx | 12 +++--------- 1 file changed, 3 insertions(+), 9 deletions(-) diff --git a/src/pages/workspace/companyCards/BankConnection/index.native.tsx b/src/pages/workspace/companyCards/BankConnection/index.native.tsx index db09f8aa7a0c..324fb3d80da7 100644 --- a/src/pages/workspace/companyCards/BankConnection/index.native.tsx +++ b/src/pages/workspace/companyCards/BankConnection/index.native.tsx @@ -143,15 +143,9 @@ function BankConnection({policyID: policyIDFromProps, feed, route, title}: BankC updateSelectedFeed(newFeed, policyID); } - // Direct feeds (except those added via Plaid) are created with default statement period end date. - // Redirect the user to set a custom date. - if (policyID && !isPlaid) { - setAddNewCompanyCardStepAndData({ - step: CONST.COMPANY_CARDS.STEP.SELECT_DIRECT_STATEMENT_CLOSE_DATE, - }); - } else { - Navigation.goBack(ROUTES.WORKSPACE_COMPANY_CARDS.getRoute(policyID)); - } + Navigation.closeRHPFlow(); + Navigation.navigate(ROUTES.WORKSPACE_COMPANY_CARDS.getRoute(policyID), {forceReplace: true}); + return; } if (isPlaid) { onImportPlaidAccounts(); From e0531a7322830a940c76608f4481a9b70ce50964 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lucien=20Akchot=C3=A9?= Date: Wed, 29 Apr 2026 19:05:57 +0200 Subject: [PATCH 11/17] skip close date after bank connect --- .../workspace/companyCards/BankConnection/index.tsx | 12 ++---------- 1 file changed, 2 insertions(+), 10 deletions(-) diff --git a/src/pages/workspace/companyCards/BankConnection/index.tsx b/src/pages/workspace/companyCards/BankConnection/index.tsx index 91aea689d9ae..a0f6c335d18b 100644 --- a/src/pages/workspace/companyCards/BankConnection/index.tsx +++ b/src/pages/workspace/companyCards/BankConnection/index.tsx @@ -156,16 +156,8 @@ function BankConnection({policyID: policyIDFromProps, feed, route, title}: BankC updateSelectedFeed(newFeed, policyID); } - // Direct feeds (except those added via Plaid) are created with default statement period end date. - // Redirect the user to set a custom date. - if (policyID && !isPlaid) { - setAddNewCompanyCardStepAndData({ - step: CONST.COMPANY_CARDS.STEP.SELECT_DIRECT_STATEMENT_CLOSE_DATE, - }); - } else { - Navigation.closeRHPFlow(); - Navigation.navigate(ROUTES.WORKSPACE_COMPANY_CARDS.getRoute(policyID), {forceReplace: true}); - } + Navigation.closeRHPFlow(); + Navigation.navigate(ROUTES.WORKSPACE_COMPANY_CARDS.getRoute(policyID), {forceReplace: true}); return; } if (!shouldBlockWindowOpen) { From e5626501b87f12195a58104fda9d7b94d465f551 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lucien=20Akchot=C3=A9?= Date: Wed, 29 Apr 2026 19:05:57 +0200 Subject: [PATCH 12/17] remove add-new close date steps --- .../companyCards/addNew/AddNewCardPage.tsx | 25 ++++++------------- 1 file changed, 8 insertions(+), 17 deletions(-) diff --git a/src/pages/workspace/companyCards/addNew/AddNewCardPage.tsx b/src/pages/workspace/companyCards/addNew/AddNewCardPage.tsx index 7ef73276f4e1..afc190033fe0 100644 --- a/src/pages/workspace/companyCards/addNew/AddNewCardPage.tsx +++ b/src/pages/workspace/companyCards/addNew/AddNewCardPage.tsx @@ -11,7 +11,6 @@ import useIsBlockedToAddFeed from '@hooks/useIsBlockedToAddFeed'; import useLocalize from '@hooks/useLocalize'; import useOnyx from '@hooks/useOnyx'; import useThemeStyles from '@hooks/useThemeStyles'; -import useWorkspaceAccountID from '@hooks/useWorkspaceAccountID'; import {navigateToConciergeChat} from '@libs/actions/Report'; import type {SkeletonSpanReasonAttributes} from '@libs/telemetry/useSkeletonSpan'; import Navigation from '@navigation/Navigation'; @@ -29,21 +28,18 @@ import CardInstructionsStep from './CardInstructionsStep'; import CardNameStep from './CardNameStep'; import CardTypeStep from './CardTypeStep'; import DetailsStep from './DetailsStep'; -import DirectStatementCloseDateStep from './DirectStatementCloseDatePage'; import ImportFromFileStep from './ImportFromFileStep'; import PlaidConnectionStep from './PlaidConnectionStep'; import SelectBankStep from './SelectBankStep'; import SelectCountryStep from './SelectCountryStep'; import SelectFeedType from './SelectFeedType'; -import StatementCloseDateStep from './StatementCloseDateStep'; function AddNewCardPage({policy}: WithPolicyAndFullscreenLoadingProps) { const policyID = policy?.id; const styles = useThemeStyles(); - const workspaceAccountID = useWorkspaceAccountID(policyID); const [addNewCardFeed, addNewCardFeedMetadata] = useOnyx(ONYXKEYS.ADD_NEW_COMPANY_CARD); const {currentStep} = addNewCardFeed ?? {}; - const {isBlockedToAddNewFeeds, isAllFeedsResultLoading} = useIsBlockedToAddFeed(policyID); + const {isBlockedToAddNewFeeds, isAllFeedsResultLoading, cardFeeds, workspaceAccountID} = useIsBlockedToAddFeed(policyID); const [isModalVisible, setIsModalVisible] = useState(false); const {translate} = useLocalize(); const [conciergeReportID] = useOnyx(ONYXKEYS.CONCIERGE_REPORT_ID); @@ -121,24 +117,19 @@ function AddNewCardPage({policy}: WithPolicyAndFullscreenLoadingProps) { CurrentStep = ; break; case CONST.COMPANY_CARDS.STEP.CARD_DETAILS: - CurrentStep = ; - break; - case CONST.COMPANY_CARDS.STEP.AMEX_CUSTOM_FEED: - CurrentStep = ; - break; - case CONST.COMPANY_CARDS.STEP.PLAID_CONNECTION: - CurrentStep = setIsModalVisible(true)} />; - break; - case CONST.COMPANY_CARDS.STEP.SELECT_STATEMENT_CLOSE_DATE: CurrentStep = ( - ); break; - case CONST.COMPANY_CARDS.STEP.SELECT_DIRECT_STATEMENT_CLOSE_DATE: - CurrentStep = ; + case CONST.COMPANY_CARDS.STEP.AMEX_CUSTOM_FEED: + CurrentStep = ; + break; + case CONST.COMPANY_CARDS.STEP.PLAID_CONNECTION: + CurrentStep = setIsModalVisible(true)} />; break; case CONST.COMPANY_CARDS.STEP.IMPORT_FROM_FILE: CurrentStep = ; From 620184b36a1e294e6da52594cfe84638a0499d03 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lucien=20Akchot=C3=A9?= Date: Wed, 29 Apr 2026 19:05:57 +0200 Subject: [PATCH 13/17] update details step feed submit --- .../companyCards/addNew/DetailsStep.tsx | 26 ++++++++++++++++--- 1 file changed, 22 insertions(+), 4 deletions(-) diff --git a/src/pages/workspace/companyCards/addNew/DetailsStep.tsx b/src/pages/workspace/companyCards/addNew/DetailsStep.tsx index 96da65053319..dd8a7419948e 100644 --- a/src/pages/workspace/companyCards/addNew/DetailsStep.tsx +++ b/src/pages/workspace/companyCards/addNew/DetailsStep.tsx @@ -10,19 +10,35 @@ import Text from '@components/Text'; import TextInput from '@components/TextInput'; import TextLink from '@components/TextLink'; import useAutoFocusInput from '@hooks/useAutoFocusInput'; +import type {CombinedCardFeeds} from '@hooks/useCardFeeds'; import {useMemoizedLazyExpensifyIcons} from '@hooks/useLazyAsset'; import useLocalize from '@hooks/useLocalize'; import useOnyx from '@hooks/useOnyx'; import useTheme from '@hooks/useTheme'; import useThemeStyles from '@hooks/useThemeStyles'; +import {addNewCompanyCardsFeed} from '@libs/actions/CompanyCards'; +import {getBankName} from '@libs/CardUtils'; +import Navigation from '@libs/Navigation/Navigation'; import {getFieldRequiredErrors} from '@libs/ValidationUtils'; import variables from '@styles/variables'; import {setAddNewCompanyCardStepAndData} from '@userActions/CompanyCards'; import CONST from '@src/CONST'; import ONYXKEYS from '@src/ONYXKEYS'; +import ROUTES from '@src/ROUTES'; import INPUT_IDS from '@src/types/form/AddNewCardFeedForm'; -function DetailsStep() { +type DetailsStepProps = { + /** ID of the current policy */ + policyID?: string; + + /** Existing card feeds for the current policy */ + cardFeeds?: CombinedCardFeeds; + + /** Workspace account ID of the current policy */ + workspaceAccountID: number; +}; + +function DetailsStep({policyID, cardFeeds, workspaceAccountID}: DetailsStepProps) { const {translate} = useLocalize(); const theme = useTheme(); const styles = useThemeStyles(); @@ -30,6 +46,7 @@ function DetailsStep() { const icons = useMemoizedLazyExpensifyIcons(['QuestionMark']); const [addNewCard] = useOnyx(ONYXKEYS.ADD_NEW_COMPANY_CARD); + const [lastSelectedFeed] = useOnyx(`${ONYXKEYS.COLLECTION.LAST_SELECTED_FEED}${policyID}`); const feedProvider = addNewCard?.data?.feedType; const isStripeFeedProvider = feedProvider === CONST.COMPANY_CARD.FEED_BANK_NAME.STRIPE; @@ -37,16 +54,17 @@ function DetailsStep() { const isOtherBankSelected = bank === CONST.COMPANY_CARDS.BANKS.OTHER; const submit = (values: FormOnyxValues) => { - if (!addNewCard?.data) { + if (!addNewCard?.data?.feedType) { return; } const feedDetails = { ...values, - bankName: addNewCard.data.bankName ?? 'Amex', + bankName: addNewCard.data.bankName ?? getBankName(addNewCard.data.feedType), }; - setAddNewCompanyCardStepAndData({step: CONST.COMPANY_CARDS.STEP.SELECT_STATEMENT_CLOSE_DATE, data: {feedDetails}}); + addNewCompanyCardsFeed(policyID, workspaceAccountID, addNewCard.data.feedType, feedDetails, cardFeeds, lastSelectedFeed); + Navigation.goBack(ROUTES.WORKSPACE_COMPANY_CARDS.getRoute(policyID)); }; const handleBackButtonPress = () => { From 6ba324768f74c6b1af0e68f30a588fa5de21240c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lucien=20Akchot=C3=A9?= Date: Wed, 29 Apr 2026 19:05:57 +0200 Subject: [PATCH 14/17] remove direct close date step --- .../addNew/DirectStatementCloseDatePage.tsx | 97 ------------------- 1 file changed, 97 deletions(-) delete mode 100644 src/pages/workspace/companyCards/addNew/DirectStatementCloseDatePage.tsx diff --git a/src/pages/workspace/companyCards/addNew/DirectStatementCloseDatePage.tsx b/src/pages/workspace/companyCards/addNew/DirectStatementCloseDatePage.tsx deleted file mode 100644 index f53dfa794473..000000000000 --- a/src/pages/workspace/companyCards/addNew/DirectStatementCloseDatePage.tsx +++ /dev/null @@ -1,97 +0,0 @@ -import React, {useCallback, useMemo} from 'react'; -import FullScreenLoadingIndicator from '@components/FullscreenLoadingIndicator'; -import useCardFeeds from '@hooks/useCardFeeds'; -import useLocalize from '@hooks/useLocalize'; -import useOnyx from '@hooks/useOnyx'; -import useWorkspaceAccountID from '@hooks/useWorkspaceAccountID'; -import {clearErrorField, setFeedStatementPeriodEndDay} from '@libs/actions/CompanyCards'; -import {getCompanyCardFeed, getCompanyFeeds, getDomainOrWorkspaceAccountID, getSelectedFeed} from '@libs/CardUtils'; -import Navigation from '@libs/Navigation/Navigation'; -import type {SkeletonSpanReasonAttributes} from '@libs/telemetry/useSkeletonSpan'; -import WorkspaceCompanyCardStatementCloseDateSelectionList from '@pages/workspace/companyCards/WorkspaceCompanyCardStatementCloseDateSelectionList'; -import ONYXKEYS from '@src/ONYXKEYS'; -import ROUTES from '@src/ROUTES'; -import type {StatementPeriodEnd, StatementPeriodEndDay} from '@src/types/onyx/CardFeeds'; -import isLoadingOnyxValue from '@src/types/utils/isLoadingOnyxValue'; - -type DirectStatementCloseDateStepProps = { - /** ID of the current policy */ - policyID?: string; -}; -function DirectStatementCloseDateStep({policyID}: DirectStatementCloseDateStepProps) { - const {translate} = useLocalize(); - const [lastSelectedFeed, lastSelectedFeedResult] = useOnyx(`${ONYXKEYS.COLLECTION.LAST_SELECTED_FEED}${policyID}`); - const [cardFeeds, cardFeedsResult] = useCardFeeds(policyID); - const selectedFeed = getSelectedFeed(lastSelectedFeed, cardFeeds); - const feed = selectedFeed ? getCompanyCardFeed(selectedFeed) : undefined; - const workspaceAccountID = useWorkspaceAccountID(policyID); - const companyFeeds = getCompanyFeeds(cardFeeds); - const selectedFeedData = selectedFeed ? companyFeeds[selectedFeed] : undefined; - const domainOrWorkspaceAccountID = getDomainOrWorkspaceAccountID(workspaceAccountID, selectedFeedData); - const statementPeriodEndDay = selectedFeedData?.statementPeriodEndDay; - - const [defaultStatementPeriodEnd, defaultStatementPeriodEndDay] = useMemo(() => { - if (!statementPeriodEndDay) { - return [undefined, undefined]; - } - - if (typeof statementPeriodEndDay === 'number') { - return [undefined, statementPeriodEndDay]; - } - - return [statementPeriodEndDay, undefined]; - }, [statementPeriodEndDay]); - - const goBack = useCallback(() => { - Navigation.closeRHPFlow(); - Navigation.navigate(ROUTES.WORKSPACE_COMPANY_CARDS.getRoute(policyID), {forceReplace: true}); - }, [policyID]); - - const submit = useCallback( - (newStatementPeriodEnd: StatementPeriodEnd | undefined, newStatementPeriodEndDay: StatementPeriodEndDay | undefined) => { - if (!policyID) { - return; - } - const isChangedValue = (newStatementPeriodEndDay ?? newStatementPeriodEnd) !== statementPeriodEndDay; - if (feed && isChangedValue) { - setFeedStatementPeriodEndDay(policyID, feed, domainOrWorkspaceAccountID, newStatementPeriodEnd, newStatementPeriodEndDay, statementPeriodEndDay); - } - - goBack(); - }, - [policyID, statementPeriodEndDay, goBack, feed, domainOrWorkspaceAccountID], - ); - - const clearError = useCallback(() => { - if (!feed) { - return; - } - - clearErrorField(feed, domainOrWorkspaceAccountID, 'statementPeriodEndDay'); - }, [feed, domainOrWorkspaceAccountID]); - - if (isLoadingOnyxValue(cardFeedsResult) || isLoadingOnyxValue(lastSelectedFeedResult)) { - const reasonAttributes: SkeletonSpanReasonAttributes = { - context: 'DirectStatementCloseDatePage', - isCardFeedsLoading: isLoadingOnyxValue(cardFeedsResult), - isLastSelectedFeedLoading: isLoadingOnyxValue(lastSelectedFeedResult), - }; - return ; - } - - return ( - - ); -} - -export default DirectStatementCloseDateStep; From 15802342a2c6ff766797da90fe9d2f1f975c95ab Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lucien=20Akchot=C3=A9?= Date: Wed, 29 Apr 2026 19:05:58 +0200 Subject: [PATCH 15/17] send plaid setup to bank connection --- .../workspace/companyCards/addNew/PlaidConnectionStep.tsx | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/pages/workspace/companyCards/addNew/PlaidConnectionStep.tsx b/src/pages/workspace/companyCards/addNew/PlaidConnectionStep.tsx index aa1c300880ee..ee7ceff0be49 100644 --- a/src/pages/workspace/companyCards/addNew/PlaidConnectionStep.tsx +++ b/src/pages/workspace/companyCards/addNew/PlaidConnectionStep.tsx @@ -142,8 +142,6 @@ function PlaidConnectionStep({feed, policyID, onExit, title}: PlaidConnectionSte addNewCard.data.selectedCountry, getDomainNameForPolicy(policyID), JSON.stringify(metadata?.accounts), - addNewCard.data.statementPeriodEnd, - addNewCard.data.statementPeriodEndDay, '', ); // eslint-disable-next-line @typescript-eslint/no-deprecated @@ -173,7 +171,7 @@ function PlaidConnectionStep({feed, policyID, onExit, title}: PlaidConnectionSte } setAddNewCompanyCardStepAndData({ - step: CONST.COMPANY_CARDS.STEP.SELECT_STATEMENT_CLOSE_DATE, + step: CONST.COMPANY_CARDS.STEP.BANK_CONNECTION, data: { publicToken, plaidConnectedFeed, From 92644756f880882e4302f140c28efca6b5694c1d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lucien=20Akchot=C3=A9?= Date: Wed, 29 Apr 2026 19:05:58 +0200 Subject: [PATCH 16/17] remove add-new close date step --- .../addNew/StatementCloseDateStep.tsx | 69 ------------------- 1 file changed, 69 deletions(-) delete mode 100644 src/pages/workspace/companyCards/addNew/StatementCloseDateStep.tsx diff --git a/src/pages/workspace/companyCards/addNew/StatementCloseDateStep.tsx b/src/pages/workspace/companyCards/addNew/StatementCloseDateStep.tsx deleted file mode 100644 index 09d3d3be799b..000000000000 --- a/src/pages/workspace/companyCards/addNew/StatementCloseDateStep.tsx +++ /dev/null @@ -1,69 +0,0 @@ -import React from 'react'; -import useOnyx from 'react-native-onyx/dist/useOnyx'; -import useCardFeeds from '@hooks/useCardFeeds'; -import useLocalize from '@hooks/useLocalize'; -import {addNewCompanyCardsFeed, setAddNewCompanyCardStepAndData} from '@libs/actions/CompanyCards'; -import Navigation from '@libs/Navigation/Navigation'; -import WorkspaceCompanyCardStatementCloseDateSelectionList from '@pages/workspace/companyCards/WorkspaceCompanyCardStatementCloseDateSelectionList'; -import CONST from '@src/CONST'; -import ONYXKEYS from '@src/ONYXKEYS'; -import ROUTES from '@src/ROUTES'; -import type {StatementPeriodEnd, StatementPeriodEndDay} from '@src/types/onyx/CardFeeds'; - -type StatementCloseDateStepProps = { - /** ID of the current policy */ - policyID: string | undefined; - - /** Workspace account ID of the current policy */ - workspaceAccountID: number; -}; - -function StatementCloseDateStep({policyID, workspaceAccountID}: StatementCloseDateStepProps) { - const {translate} = useLocalize(); - const [addNewCard] = useOnyx(ONYXKEYS.ADD_NEW_COMPANY_CARD); - const [lastSelectedFeed] = useOnyx(`${ONYXKEYS.COLLECTION.LAST_SELECTED_FEED}${policyID}`); - const [cardFeeds] = useCardFeeds(policyID); - - const isPlaid = !!addNewCard?.data?.publicToken; - - const submit = (statementPeriodEnd: StatementPeriodEnd | undefined, statementPeriodEndDay: StatementPeriodEndDay | undefined) => { - if (isPlaid) { - setAddNewCompanyCardStepAndData({ - step: CONST.COMPANY_CARDS.STEP.BANK_CONNECTION, - // Fallback to null to clear old value (if any) because `undefined` is a no-op in Onyx.merge - data: {statementPeriodEnd: statementPeriodEnd ?? null, statementPeriodEndDay: statementPeriodEndDay ?? null}, - }); - return; - } - - if (addNewCard?.data.feedDetails) { - addNewCompanyCardsFeed( - policyID, - workspaceAccountID, - addNewCard.data.feedType, - addNewCard.data.feedDetails, - cardFeeds, - statementPeriodEnd, - statementPeriodEndDay, - lastSelectedFeed, - ); - Navigation.goBack(ROUTES.WORKSPACE_COMPANY_CARDS.getRoute(policyID)); - } - }; - - const goBack = () => { - setAddNewCompanyCardStepAndData({step: isPlaid ? CONST.COMPANY_CARDS.STEP.PLAID_CONNECTION : CONST.COMPANY_CARDS.STEP.CARD_DETAILS}); - }; - - return ( - - ); -} - -export default StatementCloseDateStep; From 93dbcfe5269837e4ff4bc1902e6045c9e5ad1c31 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lucien=20Akchot=C3=A9?= Date: Wed, 29 Apr 2026 19:05:58 +0200 Subject: [PATCH 17/17] remove add-new close date fields --- src/types/onyx/CardFeeds.ts | 6 ------ 1 file changed, 6 deletions(-) diff --git a/src/types/onyx/CardFeeds.ts b/src/types/onyx/CardFeeds.ts index 318aaedd8009..22240a94d603 100644 --- a/src/types/onyx/CardFeeds.ts +++ b/src/types/onyx/CardFeeds.ts @@ -273,12 +273,6 @@ type AddNewCardFeedData = { /** Name of the card */ cardTitle: string; - /** Indicates the day (preset value) when the statement period for this card ends */ - statementPeriodEnd?: StatementPeriodEnd; - - /** Indicates the day (custom day) when the statement period for this card ends */ - statementPeriodEndDay?: StatementPeriodEndDay; - /** Selected bank */ selectedBank: ValueOf | null;