diff --git a/src/pages/workspace/companyCards/WorkspaceCompanyCardFeedSelectorPage.tsx b/src/pages/workspace/companyCards/WorkspaceCompanyCardFeedSelectorPage.tsx index 1823ab32331c..70340ff42cc0 100644 --- a/src/pages/workspace/companyCards/WorkspaceCompanyCardFeedSelectorPage.tsx +++ b/src/pages/workspace/companyCards/WorkspaceCompanyCardFeedSelectorPage.tsx @@ -81,6 +81,9 @@ function WorkspaceCompanyCardFeedSelectorPage({route}: WorkspaceCompanyCardFeedS const otherFeeds = useOtherFeedsForFeedSelector(policyID); const primaryContactMethod = usePrimaryContactMethod(); + const [draftFeed, setDraftFeed] = useState(); + const currentSelectedFeed = draftFeed ?? selectedFeedName; + const isUserFromPublicDomain = isEmailPublicDomain(primaryContactMethod); const feeds: CardFeedListItem[] = (Object.entries(companyCardFeeds ?? {}) as Array<[CompanyCardFeedWithDomainID, CombinedCardFeed]>).map(([feedName, feedSettings]) => { @@ -98,7 +101,7 @@ function WorkspaceCompanyCardFeedSelectorPage({route}: WorkspaceCompanyCardFeedS alternateText: domainName ?? policyName, text: getCustomOrFormattedFeedName(translate, feedSettings.feed, feedSettings.customFeedName), keyForList: feedName, - isSelected: feedName === selectedFeedName, + isSelected: feedName === currentSelectedFeed, isDisabled: feedSettings.pendingAction === CONST.RED_BRICK_ROAD_PENDING_ACTION.DELETE, pendingAction: feedSettings.pendingAction, brickRoadIndicator: shouldShowRBR ? CONST.BRICK_ROAD_INDICATOR_STATUS.ERROR : undefined, @@ -137,10 +140,24 @@ function WorkspaceCompanyCardFeedSelectorPage({route}: WorkspaceCompanyCardFeedS const goBack = () => Navigation.goBack(ROUTES.WORKSPACE_COMPANY_CARDS.getRoute(policyID)); const selectFeed = (feed: CardFeedListItem) => { - updateSelectedFeed(feed.value, policyID); + setDraftFeed(feed.value); + }; + + const saveFeed = () => { + if (!currentSelectedFeed) { + return; + } + updateSelectedFeed(currentSelectedFeed, policyID); goBack(); }; + const confirmButtonOptions = { + showButton: true, + text: translate('common.save'), + onConfirm: saveFeed, + isDisabled: !currentSelectedFeed || currentSelectedFeed === selectedFeedName, + }; + const selectOtherFeed = (feed: CardFeedListItem) => { if (isUserFromPublicDomain) { Navigation.navigate(ROUTES.WORKSPACE_COMPANY_CARD_ADD_WORK_EMAIL.getRoute(policyID, feed.value)); @@ -233,6 +250,7 @@ function WorkspaceCompanyCardFeedSelectorPage({route}: WorkspaceCompanyCardFeedS data={feeds} alternateNumberOfSupportedLines={2} initiallyFocusedItemKey={selectedFeedName} + confirmButtonOptions={confirmButtonOptions} addBottomSafeAreaPadding listFooterContent={otherMenuItemFeeds} /> diff --git a/src/pages/workspace/expensifyCard/WorkspaceExpensifyCardFeedSelectorPage.tsx b/src/pages/workspace/expensifyCard/WorkspaceExpensifyCardFeedSelectorPage.tsx index b44d0583279d..f2d9ef6b1262 100644 --- a/src/pages/workspace/expensifyCard/WorkspaceExpensifyCardFeedSelectorPage.tsx +++ b/src/pages/workspace/expensifyCard/WorkspaceExpensifyCardFeedSelectorPage.tsx @@ -74,6 +74,8 @@ function WorkspaceExpensifyCardFeedSelectorPage({route}: WorkspaceExpensifyCardF const primaryContactMethod = usePrimaryContactMethod(); const defaultFundID = useDefaultFundID(policyID); const lastSelectedExpensifyCardFeedID = lastSelectedExpensifyCardFeed ?? defaultFundID; + const [draftFundID, setDraftFundID] = useState(); + const currentSelectedFundID = draftFundID ?? lastSelectedExpensifyCardFeedID; const [feedWithError, setFeedWithError] = useState<{fundID?: number; error?: Errors} | undefined>(undefined); const {login: currentUserLogin = ''} = useCurrentUserPersonalDetails(); @@ -138,7 +140,7 @@ function WorkspaceExpensifyCardFeedSelectorPage({route}: WorkspaceExpensifyCardF value: entry.fundID, text: getExpensifyCardFeedDescription(entry.settings, policies, domains, entry.fundID, cardList), keyForList: entry.fundID.toString(), - isSelected: entry.fundID === lastSelectedExpensifyCardFeedID, + isSelected: entry.fundID === currentSelectedFundID, isDisabled: isFeedPendingDelete || (isOtherWorkspaceSection && isOffline), pendingAction: entry.settings.pendingAction, errors: feedWithError?.fundID === entry.fundID ? feedWithError.error : undefined, @@ -193,11 +195,25 @@ function WorkspaceExpensifyCardFeedSelectorPage({route}: WorkspaceExpensifyCardF }; const selectFeed = (feed: ExpensifyFeedListItem) => { + setDraftFundID(feed.value); + }; + + const saveFeed = () => { + if (!currentSelectedFundID) { + return; + } resetCardFlowState(); - updateSelectedExpensifyCardFeed(feed.value, policyID); + updateSelectedExpensifyCardFeed(currentSelectedFundID, policyID); goBack(); }; + const confirmButtonOptions = { + showButton: true, + text: translate('common.save'), + onConfirm: saveFeed, + isDisabled: !currentSelectedFundID || currentSelectedFundID === lastSelectedExpensifyCardFeedID, + }; + const primaryListData = primaryFeeds.map((entry) => toListItem(entry, false)); const issueNewCardAndOtherFeedsFooter = canWriteExpensifyCard ? ( @@ -258,6 +274,7 @@ function WorkspaceExpensifyCardFeedSelectorPage({route}: WorkspaceExpensifyCardF data={primaryListData} alternateNumberOfSupportedLines={2} initiallyFocusedItemKey={lastSelectedExpensifyCardFeedID.toString()} + confirmButtonOptions={confirmButtonOptions} addBottomSafeAreaPadding listFooterContent={issueNewCardAndOtherFeedsFooter} onDismissError={onDismissError}