diff --git a/src/ROUTES.ts b/src/ROUTES.ts index eb11261edd8e..85c1d212b40e 100644 --- a/src/ROUTES.ts +++ b/src/ROUTES.ts @@ -1971,6 +1971,10 @@ const ROUTES = { return getUrlWithBackToParam(`workspaces/${policyID}/accounting/quickbooks-desktop/export` as const, backTo, false); }, }, + POLICY_ACCOUNTING_QUICKBOOKS_DESKTOP_EXISTING_CONNECTIONS: { + route: 'workspaces/:policyID/accounting/quickbooks-desktop/existing-connections', + getRoute: (policyID: string) => `workspaces/${policyID}/accounting/quickbooks-desktop/existing-connections` as const, + }, POLICY_ACCOUNTING_QUICKBOOKS_DESKTOP_SETUP_MODAL: { route: 'workspaces/:policyID/accounting/quickbooks-desktop/setup-modal', getRoute: (policyID: string) => `workspaces/${policyID}/accounting/quickbooks-desktop/setup-modal` as const, diff --git a/src/SCREENS.ts b/src/SCREENS.ts index f03c1f37d738..9c55184e4f53 100644 --- a/src/SCREENS.ts +++ b/src/SCREENS.ts @@ -563,6 +563,7 @@ const SCREENS = { QUICKBOOKS_DESKTOP_EXPORT_OUT_OF_POCKET_EXPENSES_SELECT: 'Workspace_Accounting_Quickbooks_Desktop_Export_Out_Of_Pocket_Expenses_Select', QUICKBOOKS_DESKTOP_EXPORT_OUT_OF_POCKET_EXPENSES_ACCOUNT_SELECT: 'Workspace_Accounting_Quickbooks_Desktop_Export_Out_Of_Pocket_Expenses_Account_Select', QUICKBOOKS_DESKTOP_EXPORT: 'Workspace_Accounting_Quickbooks_Desktop_Export', + QUICKBOOKS_DESKTOP_REUSE_EXISTING_CONNECTIONS: 'Policy_Accounting_Quickbooks_Desktop_Reuse_Existing_Connections', QUICKBOOKS_DESKTOP_SETUP_MODAL: 'Policy_Accounting_Quickbooks_Desktop_Setup_Modal', QUICKBOOKS_DESKTOP_SETUP_REQUIRED_DEVICE_MODAL: 'Policy_Accounting_Quickbooks_Desktop_Setup_Required_Device_Modal', QUICKBOOKS_DESKTOP_TRIGGER_FIRST_SYNC: 'Policy_Accounting_Quickbooks_Desktop_Trigger_First_Sync', diff --git a/src/components/ConnectToQuickbooksDesktopFlow/index.native.tsx b/src/components/ConnectToQuickbooksDesktopFlow/index.native.tsx deleted file mode 100644 index 425bd35f9e8f..000000000000 --- a/src/components/ConnectToQuickbooksDesktopFlow/index.native.tsx +++ /dev/null @@ -1,15 +0,0 @@ -import {useEffect} from 'react'; -import Navigation from '@libs/Navigation/Navigation'; -import ROUTES from '@src/ROUTES'; -import type {ConnectToQuickbooksDesktopFlowProps} from './types'; - -function ConnectToQuickbooksDesktopFlow({policyID}: ConnectToQuickbooksDesktopFlowProps) { - useEffect(() => { - Navigation.navigate(ROUTES.POLICY_ACCOUNTING_QUICKBOOKS_DESKTOP_SETUP_REQUIRED_DEVICE_MODAL.getRoute(policyID)); - // eslint-disable-next-line react-hooks/exhaustive-deps - }, []); - - return null; -} - -export default ConnectToQuickbooksDesktopFlow; diff --git a/src/components/ConnectToQuickbooksDesktopFlow/index.tsx b/src/components/ConnectToQuickbooksDesktopFlow/index.tsx index 393d24198290..2fe8451028cb 100644 --- a/src/components/ConnectToQuickbooksDesktopFlow/index.tsx +++ b/src/components/ConnectToQuickbooksDesktopFlow/index.tsx @@ -1,19 +1,22 @@ import {useEffect} from 'react'; -import {isMobile} from '@libs/Browser'; +import useHasPoliciesConnectedToQBD from '@hooks/useHasPoliciesConnectedToQBD'; import Navigation from '@libs/Navigation/Navigation'; +import getQuickbooksDesktopSetupEntryRoute from '@pages/workspace/accounting/qbd/utils'; import ROUTES from '@src/ROUTES'; import type {ConnectToQuickbooksDesktopFlowProps} from './types'; -const isMobileWeb = isMobile(); - function ConnectToQuickbooksDesktopFlow({policyID}: ConnectToQuickbooksDesktopFlowProps) { + const hasPoliciesConnectedToQBD = useHasPoliciesConnectedToQBD(); + useEffect(() => { - if (isMobileWeb) { - Navigation.navigate(ROUTES.POLICY_ACCOUNTING_QUICKBOOKS_DESKTOP_SETUP_REQUIRED_DEVICE_MODAL.getRoute(policyID)); - } else { - Navigation.navigate(ROUTES.POLICY_ACCOUNTING_QUICKBOOKS_DESKTOP_SETUP_MODAL.getRoute(policyID)); + if (hasPoliciesConnectedToQBD) { + Navigation.navigate(ROUTES.POLICY_ACCOUNTING_QUICKBOOKS_DESKTOP_EXISTING_CONNECTIONS.getRoute(policyID)); + return; } - }, [policyID]); + Navigation.navigate(getQuickbooksDesktopSetupEntryRoute(policyID)); + // Runs once on mount — re-running when hasPoliciesConnectedToQBD changes mid-flow would interrupt an in-progress setup. + // eslint-disable-next-line react-hooks/exhaustive-deps + }, []); return null; } diff --git a/src/hooks/useAdminPoliciesConnectedToQBD.ts b/src/hooks/useAdminPoliciesConnectedToQBD.ts new file mode 100644 index 000000000000..df7114cd55f8 --- /dev/null +++ b/src/hooks/useAdminPoliciesConnectedToQBD.ts @@ -0,0 +1,10 @@ +import ONYXKEYS from '@src/ONYXKEYS'; +import {adminPoliciesConnectedToQBDSelector} from '@src/selectors/Policy'; +import useOnyx from './useOnyx'; + +function useAdminPoliciesConnectedToQBD() { + const [policies] = useOnyx(ONYXKEYS.COLLECTION.POLICY); + return adminPoliciesConnectedToQBDSelector(policies); +} + +export default useAdminPoliciesConnectedToQBD; diff --git a/src/hooks/useHasPoliciesConnectedToQBD.ts b/src/hooks/useHasPoliciesConnectedToQBD.ts new file mode 100644 index 000000000000..fd2ab393fd47 --- /dev/null +++ b/src/hooks/useHasPoliciesConnectedToQBD.ts @@ -0,0 +1,10 @@ +import ONYXKEYS from '@src/ONYXKEYS'; +import {hasPoliciesConnectedToQBDSelector} from '@src/selectors/Policy'; +import useOnyx from './useOnyx'; + +function useHasPoliciesConnectedToQBD() { + const [hasPolicies] = useOnyx(ONYXKEYS.COLLECTION.POLICY, {selector: hasPoliciesConnectedToQBDSelector}); + return hasPolicies ?? false; +} + +export default useHasPoliciesConnectedToQBD; diff --git a/src/libs/Navigation/AppNavigator/ModalStackNavigators/index.tsx b/src/libs/Navigation/AppNavigator/ModalStackNavigators/index.tsx index 851b5b30685c..24f18cd317f1 100644 --- a/src/libs/Navigation/AppNavigator/ModalStackNavigators/index.tsx +++ b/src/libs/Navigation/AppNavigator/ModalStackNavigators/index.tsx @@ -419,7 +419,7 @@ const SettingsModalStackNavigator = createModalStackNavigator require('../../../../pages/settings/Wallet/ReportVirtualCardFraudConfirmationPage').default, [SCREENS.SETTINGS.WALLET.CARD_ACTIVATE]: () => require('../../../../pages/settings/Wallet/ActivatePhysicalCardPage').default, [SCREENS.SETTINGS.WALLET.CARD_CHANGE_PIN]: () => require('../../../../pages/settings/Wallet/ExpensifyCardPage/ChangePINPage').default, - [SCREENS.SETTINGS.WALLET.CARD_CHANGE_PIN_ATM]: () => require('../../../../pages/settings/Wallet/ExpensifyCardPage/ChangePINATMPage').default, + [SCREENS.SETTINGS.WALLET.CARD_CHANGE_PIN_ATM]: () => require('../../../../pages/settings/Wallet/ExpensifyCardPage/ChangePINAtATMPage').default, [SCREENS.SETTINGS.WALLET.TRANSFER_BALANCE]: () => require('../../../../pages/settings/Wallet/TransferBalancePage').default, [SCREENS.SETTINGS.WALLET.CHOOSE_TRANSFER_ACCOUNT]: () => require('../../../../pages/settings/Wallet/ChooseTransferAccountPage').default, [SCREENS.SETTINGS.WALLET.IMPORT_TRANSACTIONS]: () => require('../../../../pages/settings/Wallet/ImportTransactionsPage').default, @@ -616,6 +616,8 @@ const SettingsModalStackNavigator = createModalStackNavigator('../../../../pages/workspace/accounting/qbd/advanced/QuickbooksDesktopAutoSyncPage').default, [SCREENS.WORKSPACE.ACCOUNTING.QUICKBOOKS_DESKTOP_ACCOUNTING_METHOD]: () => require('../../../../pages/workspace/accounting/qbd/advanced/QuickbooksDesktopAccountingMethodPage').default, + [SCREENS.WORKSPACE.ACCOUNTING.QUICKBOOKS_DESKTOP_REUSE_EXISTING_CONNECTIONS]: () => + require('../../../../pages/workspace/accounting/qbd/QuickbooksDesktopExistingConnectionsPage').default, [SCREENS.WORKSPACE.ACCOUNTING.QUICKBOOKS_DESKTOP_SETUP_MODAL]: () => require('../../../../pages/workspace/accounting/qbd/QuickBooksDesktopSetupPage').default, [SCREENS.WORKSPACE.ACCOUNTING.QUICKBOOKS_DESKTOP_SETUP_REQUIRED_DEVICE_MODAL]: () => require('../../../../pages/workspace/accounting/qbd/RequireQuickBooksDesktopPage').default, diff --git a/src/libs/Navigation/linkingConfig/RELATIONS/WORKSPACE_TO_RHP.ts b/src/libs/Navigation/linkingConfig/RELATIONS/WORKSPACE_TO_RHP.ts index 03d7f0957f7a..892ea0632511 100755 --- a/src/libs/Navigation/linkingConfig/RELATIONS/WORKSPACE_TO_RHP.ts +++ b/src/libs/Navigation/linkingConfig/RELATIONS/WORKSPACE_TO_RHP.ts @@ -84,6 +84,7 @@ const WORKSPACE_TO_RHP: Partial['config'] = { path: ROUTES.POLICY_ACCOUNTING_QUICKBOOKS_DESKTOP_EXPORT_OUT_OF_POCKET_EXPENSES_SELECT.route, }, [SCREENS.WORKSPACE.ACCOUNTING.QUICKBOOKS_DESKTOP_EXPORT]: {path: ROUTES.POLICY_ACCOUNTING_QUICKBOOKS_DESKTOP_EXPORT.route}, + [SCREENS.WORKSPACE.ACCOUNTING.QUICKBOOKS_DESKTOP_REUSE_EXISTING_CONNECTIONS]: { + path: ROUTES.POLICY_ACCOUNTING_QUICKBOOKS_DESKTOP_EXISTING_CONNECTIONS.route, + }, [SCREENS.WORKSPACE.ACCOUNTING.QUICKBOOKS_DESKTOP_SETUP_MODAL]: { path: ROUTES.POLICY_ACCOUNTING_QUICKBOOKS_DESKTOP_SETUP_MODAL.route, }, diff --git a/src/libs/Navigation/types.ts b/src/libs/Navigation/types.ts index 27648bd3ca95..5f139530c149 100644 --- a/src/libs/Navigation/types.ts +++ b/src/libs/Navigation/types.ts @@ -825,6 +825,9 @@ type SettingsNavigatorParamList = { // eslint-disable-next-line no-restricted-syntax -- `backTo` usages in this file are legacy. Do not add new `backTo` params to screens. See contributingGuides/NAVIGATION.md backTo?: Routes; }; + [SCREENS.WORKSPACE.ACCOUNTING.QUICKBOOKS_DESKTOP_REUSE_EXISTING_CONNECTIONS]: { + policyID: string; + }; [SCREENS.WORKSPACE.ACCOUNTING.QUICKBOOKS_DESKTOP_SETUP_MODAL]: { policyID: string; }; diff --git a/src/libs/actions/connections/index.ts b/src/libs/actions/connections/index.ts index 1d2a1865d044..45d7c5002bbf 100644 --- a/src/libs/actions/connections/index.ts +++ b/src/libs/actions/connections/index.ts @@ -312,6 +312,9 @@ function copyExistingPolicyConnection(connectedPolicyID: string, targetPolicyID: case CONST.POLICY.CONNECTIONS.NAME.SAGE_INTACCT: stageInProgress = CONST.POLICY.CONNECTIONS.SYNC_STAGE_NAME.SAGE_INTACCT_SYNC_CHECK_CONNECTION; break; + case CONST.POLICY.CONNECTIONS.NAME.QBD: + stageInProgress = CONST.POLICY.CONNECTIONS.SYNC_STAGE_NAME.STARTING_IMPORT_QBD; + break; default: stageInProgress = null; } diff --git a/src/pages/settings/Wallet/ExpensifyCardPage/ChangePINATMPage.tsx b/src/pages/settings/Wallet/ExpensifyCardPage/ChangePINAtATMPage.tsx similarity index 84% rename from src/pages/settings/Wallet/ExpensifyCardPage/ChangePINATMPage.tsx rename to src/pages/settings/Wallet/ExpensifyCardPage/ChangePINAtATMPage.tsx index 267301727598..8af61bc4ae9a 100644 --- a/src/pages/settings/Wallet/ExpensifyCardPage/ChangePINATMPage.tsx +++ b/src/pages/settings/Wallet/ExpensifyCardPage/ChangePINAtATMPage.tsx @@ -3,7 +3,7 @@ import OutcomeScreenBase from '@components/MultifactorAuthentication/components/ import useLocalize from '@hooks/useLocalize'; import variables from '@styles/variables'; -function ChangePINATMPage() { +function ChangePINAtATMPage() { const {translate} = useLocalize(); return ( @@ -18,6 +18,6 @@ function ChangePINATMPage() { ); } -ChangePINATMPage.displayName = 'ChangePINATMPage'; +ChangePINAtATMPage.displayName = 'ChangePINAtATMPage'; -export default ChangePINATMPage; +export default ChangePINAtATMPage; diff --git a/src/pages/workspace/accounting/AccountingContext/index.tsx b/src/pages/workspace/accounting/AccountingContext/index.tsx index e41e0d48c618..6304139abb5c 100644 --- a/src/pages/workspace/accounting/AccountingContext/index.tsx +++ b/src/pages/workspace/accounting/AccountingContext/index.tsx @@ -3,6 +3,7 @@ import type {RefObject} from 'react'; import type {View} from 'react-native'; import type {OnyxEntry} from 'react-native-onyx'; import AccountingConnectionConfirmationModal from '@components/AccountingConnectionConfirmationModal'; +import useHasPoliciesConnectedToQBD from '@hooks/useHasPoliciesConnectedToQBD'; import useHasPoliciesConnectedToSageIntacct from '@hooks/useHasPoliciesConnectedToSageIntacct'; import {useMemoizedLazyExpensifyIcons} from '@hooks/useLazyAsset'; import useLocalize from '@hooks/useLocalize'; @@ -30,6 +31,7 @@ function AccountingContextProvider({children, policy}: AccountingContextProvider const policyID = policy?.id; const accountingIcons = useMemoizedLazyExpensifyIcons(['IntacctSquare', 'QBOSquare', 'XeroSquare', 'NetSuiteSquare', 'QBDSquare']); const hasPoliciesConnectedToSageIntacct = useHasPoliciesConnectedToSageIntacct(); + const hasPoliciesConnectedToQBD = useHasPoliciesConnectedToQBD(); const startIntegrationFlow = useCallback( (newActiveIntegration: ActiveIntegration) => { @@ -41,7 +43,7 @@ function AccountingContextProvider({children, policy}: AccountingContextProvider newActiveIntegration.name, policyID, translate, - hasPoliciesConnectedToSageIntacct, + {sageIntacct: hasPoliciesConnectedToSageIntacct, qbd: hasPoliciesConnectedToQBD}, undefined, undefined, newActiveIntegration.integrationToDisconnect, @@ -61,7 +63,7 @@ function AccountingContextProvider({children, policy}: AccountingContextProvider key: Math.random(), }); }, - [policy, policyID, translate, hasPoliciesConnectedToSageIntacct, accountingIcons], + [policy, policyID, translate, hasPoliciesConnectedToSageIntacct, hasPoliciesConnectedToQBD, accountingIcons], ); const closeConfirmationModal = () => { @@ -101,7 +103,7 @@ function AccountingContextProvider({children, policy}: AccountingContextProvider activeIntegration.name, policyID, translate, - hasPoliciesConnectedToSageIntacct, + {sageIntacct: hasPoliciesConnectedToSageIntacct, qbd: hasPoliciesConnectedToQBD}, policy, activeIntegration.key, undefined, diff --git a/src/pages/workspace/accounting/PolicyAccountingPage.tsx b/src/pages/workspace/accounting/PolicyAccountingPage.tsx index 5438e6408501..c3cadbfd9131 100644 --- a/src/pages/workspace/accounting/PolicyAccountingPage.tsx +++ b/src/pages/workspace/accounting/PolicyAccountingPage.tsx @@ -21,6 +21,7 @@ import ThreeDotsMenu from '@components/ThreeDotsMenu'; import type ThreeDotsMenuProps from '@components/ThreeDotsMenu/types'; import useEnvironment from '@hooks/useEnvironment'; import useExpensifyCardFeeds from '@hooks/useExpensifyCardFeeds'; +import useHasPoliciesConnectedToQBD from '@hooks/useHasPoliciesConnectedToQBD'; import useHasPoliciesConnectedToSageIntacct from '@hooks/useHasPoliciesConnectedToSageIntacct'; import {useMemoizedLazyExpensifyIcons, useMemoizedLazyIllustrations} from '@hooks/useLazyAsset'; import useLocalize from '@hooks/useLocalize'; @@ -74,6 +75,7 @@ type RouteParams = { function PolicyAccountingPage({policy}: PolicyAccountingPageProps) { useWorkspaceDocumentTitle(policy?.name, 'workspace.common.accounting'); const hasPoliciesConnectedToSageIntacct = useHasPoliciesConnectedToSageIntacct(); + const hasPoliciesConnectedToQBD = useHasPoliciesConnectedToQBD(); const [connectionSyncProgress] = useOnyx(`${ONYXKEYS.COLLECTION.POLICY_CONNECTION_SYNC_PROGRESS}${policy?.id}`); const [conciergeReportID] = useOnyx(ONYXKEYS.CONCIERGE_REPORT_ID); const theme = useTheme(); @@ -301,7 +303,7 @@ function PolicyAccountingPage({policy}: PolicyAccountingPageProps) { integration, policyID, translate, - hasPoliciesConnectedToSageIntacct, + {sageIntacct: hasPoliciesConnectedToSageIntacct, qbd: hasPoliciesConnectedToQBD}, undefined, undefined, undefined, @@ -365,7 +367,7 @@ function PolicyAccountingPage({policy}: PolicyAccountingPageProps) { connectedIntegration, policyID, translate, - hasPoliciesConnectedToSageIntacct, + {sageIntacct: hasPoliciesConnectedToSageIntacct, qbd: hasPoliciesConnectedToQBD}, policy, undefined, undefined, @@ -499,6 +501,7 @@ function PolicyAccountingPage({policy}: PolicyAccountingPageProps) { popoverAnchorRefs, datetimeToRelative, hasPoliciesConnectedToSageIntacct, + hasPoliciesConnectedToQBD, ]); const otherIntegrationsItems = useMemo(() => { @@ -514,7 +517,7 @@ function PolicyAccountingPage({policy}: PolicyAccountingPageProps) { integration, policyID, translate, - hasPoliciesConnectedToSageIntacct, + {sageIntacct: hasPoliciesConnectedToSageIntacct, qbd: hasPoliciesConnectedToQBD}, undefined, undefined, undefined, @@ -568,6 +571,7 @@ function PolicyAccountingPage({policy}: PolicyAccountingPageProps) { policyID, translate, hasPoliciesConnectedToSageIntacct, + hasPoliciesConnectedToQBD, styles.justifyContentCenter, styles.sectionMenuItemTopDescription, isOffline, diff --git a/src/pages/workspace/accounting/qbd/QuickBooksDesktopSetupPage.tsx b/src/pages/workspace/accounting/qbd/QuickBooksDesktopSetupPage.tsx index 3f8ccdf51e3c..9015527f8850 100644 --- a/src/pages/workspace/accounting/qbd/QuickBooksDesktopSetupPage.tsx +++ b/src/pages/workspace/accounting/qbd/QuickBooksDesktopSetupPage.tsx @@ -140,7 +140,7 @@ function RequireQuickBooksDesktopModal({route}: RequireQuickBooksDesktopModalPro Navigation.dismissModal()} + onBackButtonPress={() => Navigation.goBack()} /> {hasResultOfFetchingSetupLink ? children : {children}} diff --git a/src/pages/workspace/accounting/qbd/QuickbooksDesktopExistingConnectionsPage.tsx b/src/pages/workspace/accounting/qbd/QuickbooksDesktopExistingConnectionsPage.tsx new file mode 100644 index 000000000000..4d3317618bf7 --- /dev/null +++ b/src/pages/workspace/accounting/qbd/QuickbooksDesktopExistingConnectionsPage.tsx @@ -0,0 +1,90 @@ +import React, {useMemo} from 'react'; +import HeaderWithBackButton from '@components/HeaderWithBackButton'; +import MenuItem from '@components/MenuItem'; +import MenuItemList from '@components/MenuItemList'; +import ScreenWrapper from '@components/ScreenWrapper'; +import ScrollView from '@components/ScrollView'; +import Text from '@components/Text'; +import useAdminPoliciesConnectedToQBD from '@hooks/useAdminPoliciesConnectedToQBD'; +import {useMemoizedLazyExpensifyIcons} from '@hooks/useLazyAsset'; +import useLocalize from '@hooks/useLocalize'; +import useOnyx from '@hooks/useOnyx'; +import useThemeStyles from '@hooks/useThemeStyles'; +import {copyExistingPolicyConnection} from '@libs/actions/connections'; +import Navigation from '@libs/Navigation/Navigation'; +import type {PlatformStackScreenProps} from '@libs/Navigation/PlatformStackNavigation/types'; +import type {SettingsNavigatorParamList} from '@libs/Navigation/types'; +import {getIntegrationLastSuccessfulDate} from '@libs/PolicyUtils'; +import {getDefaultWorkspaceAvatar} from '@libs/ReportUtils'; +import variables from '@styles/variables'; +import CONST from '@src/CONST'; +import ONYXKEYS from '@src/ONYXKEYS'; +import type SCREENS from '@src/SCREENS'; +import getQuickbooksDesktopSetupEntryRoute from './utils'; + +type QuickbooksDesktopExistingConnectionsPageProps = PlatformStackScreenProps; + +function QuickbooksDesktopExistingConnectionsPage({route}: QuickbooksDesktopExistingConnectionsPageProps) { + const {translate, datetimeToRelative, getLocalDateFromDatetime} = useLocalize(); + const styles = useThemeStyles(); + const icons = useMemoizedLazyExpensifyIcons(['LinkCopy']); + const policiesConnectedToQBD = useAdminPoliciesConnectedToQBD(); + const [connectionSyncProgressCollection] = useOnyx(ONYXKEYS.COLLECTION.POLICY_CONNECTION_SYNC_PROGRESS); + const policyID: string = route.params.policyID; + + const menuItems = useMemo( + () => + policiesConnectedToQBD.map((policy) => { + const syncProgress = connectionSyncProgressCollection?.[`${ONYXKEYS.COLLECTION.POLICY_CONNECTION_SYNC_PROGRESS}${policy.id}`]; + const lastSuccessfulSyncDate = getIntegrationLastSuccessfulDate(getLocalDateFromDatetime, policy.connections?.quickbooksDesktop, syncProgress); + const date = lastSuccessfulSyncDate ? datetimeToRelative(lastSuccessfulSyncDate) : undefined; + return { + title: policy.name, + key: policy.id, + avatarID: policy.id, + icon: policy.avatarURL ? policy.avatarURL : getDefaultWorkspaceAvatar(policy.name), + iconType: CONST.ICON_TYPE_WORKSPACE, + shouldShowRightIcon: true, + description: date + ? translate('workspace.common.lastSyncDate', CONST.POLICY.CONNECTIONS.NAME_USER_FRIENDLY.quickbooksDesktop, date) + : translate('workspace.accounting.qbd'), + onPress: () => { + copyExistingPolicyConnection(policy.id, policyID, CONST.POLICY.CONNECTIONS.NAME.QBD); + Navigation.dismissModal(); + }, + }; + }), + [policiesConnectedToQBD, connectionSyncProgressCollection, policyID, translate, datetimeToRelative, getLocalDateFromDatetime], + ); + + return ( + + Navigation.goBack()} + /> + + {translate('workspace.common.existingConnectionsDescription', {connectionName: CONST.POLICY.CONNECTIONS.NAME.QBD})} + Navigation.navigate(getQuickbooksDesktopSetupEntryRoute(policyID))} + /> + {translate('workspace.common.existingConnections')} + + + + ); +} + +export default QuickbooksDesktopExistingConnectionsPage; diff --git a/src/pages/workspace/accounting/qbd/RequireQuickBooksDesktopPage.tsx b/src/pages/workspace/accounting/qbd/RequireQuickBooksDesktopPage.tsx index 8e543bfefd5d..9dba59d285b9 100644 --- a/src/pages/workspace/accounting/qbd/RequireQuickBooksDesktopPage.tsx +++ b/src/pages/workspace/accounting/qbd/RequireQuickBooksDesktopPage.tsx @@ -26,7 +26,7 @@ function RequireQuickBooksDesktopModal() { Navigation.dismissModal()} + onBackButtonPress={() => Navigation.goBack()} /> @@ -42,7 +42,7 @@ function RequireQuickBooksDesktopModal() {