Skip to content

Commit d7cdde1

Browse files
authored
Merge pull request Expensify#88445 from Expensify/lucien/fix-netsuite-intacct-broken-connections
Exclude broken reusable connections for NetSuite/Sage Intacct
2 parents e4324fe + 1615da9 commit d7cdde1

17 files changed

Lines changed: 236 additions & 121 deletions

src/components/ConnectToNetSuiteFlow/index.tsx

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import React, {useEffect, useState} from 'react';
22
import PopoverMenu from '@components/PopoverMenu';
3+
import useHasReusablePoliciesConnectedTo from '@hooks/useHasReusablePoliciesConnectedTo';
34
import {useMemoizedLazyExpensifyIcons} from '@hooks/useLazyAsset';
45
import useLocalize from '@hooks/useLocalize';
56
import useOnyx from '@hooks/useOnyx';
@@ -12,13 +13,12 @@ import type {AnchorPosition} from '@styles/index';
1213
import CONST from '@src/CONST';
1314
import ONYXKEYS from '@src/ONYXKEYS';
1415
import ROUTES from '@src/ROUTES';
15-
import {hasPoliciesConnectedToNetSuiteSelector} from '@src/selectors/Policy';
1616
import type {ConnectToNetSuiteFlowProps} from './types';
1717

1818
function ConnectToNetSuiteFlow({policyID}: ConnectToNetSuiteFlowProps) {
1919
const {translate} = useLocalize();
2020

21-
const [hasPoliciesConnectedToNetSuite] = useOnyx(ONYXKEYS.COLLECTION.POLICY, {selector: hasPoliciesConnectedToNetSuiteSelector});
21+
const hasReusablePoliciesConnectedToNetSuite = useHasReusablePoliciesConnectedTo(CONST.POLICY.CONNECTIONS.NAME.NETSUITE, policyID);
2222

2323
// We need to use isSmallScreenWidth instead of shouldUseNarrowLayout to use the correct modal type
2424
// eslint-disable-next-line rulesdir/prefer-shouldUseNarrowLayout-instead-of-isSmallScreenWidth
@@ -54,7 +54,7 @@ function ConnectToNetSuiteFlow({policyID}: ConnectToNetSuiteFlowProps) {
5454
];
5555

5656
useEffect(() => {
57-
if (shouldGoToCredentialsPage || !hasPoliciesConnectedToNetSuite) {
57+
if (shouldGoToCredentialsPage || !hasReusablePoliciesConnectedToNetSuite) {
5858
Navigation.navigate(ROUTES.POLICY_ACCOUNTING_NETSUITE_TOKEN_INPUT.getRoute(policyID, getInitialSubPageForNetsuiteTokenInput(policy)));
5959
return;
6060
}

src/components/ConnectToQuickbooksDesktopFlow/index.tsx

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,13 @@
11
import {useEffect} from 'react';
2-
import useReusablePoliciesConnectedToQBD from '@hooks/useReusablePoliciesConnectedToQBD';
2+
import useHasReusablePoliciesConnectedTo from '@hooks/useHasReusablePoliciesConnectedTo';
33
import Navigation from '@libs/Navigation/Navigation';
44
import getQuickbooksDesktopSetupEntryRoute from '@pages/workspace/accounting/qbd/utils';
5+
import CONST from '@src/CONST';
56
import ROUTES from '@src/ROUTES';
67
import type {ConnectToQuickbooksDesktopFlowProps} from './types';
78

89
function ConnectToQuickbooksDesktopFlow({policyID}: ConnectToQuickbooksDesktopFlowProps) {
9-
const {hasReusablePoliciesConnectedToQBD} = useReusablePoliciesConnectedToQBD(policyID);
10+
const hasReusablePoliciesConnectedToQBD = useHasReusablePoliciesConnectedTo(CONST.POLICY.CONNECTIONS.NAME.QBD, policyID);
1011

1112
useEffect(() => {
1213
if (hasReusablePoliciesConnectedToQBD) {

src/components/ConnectToSageIntacctFlow/index.tsx

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import {useEffect} from 'react';
2-
import useHasPoliciesConnectedToSageIntacct from '@hooks/useHasPoliciesConnectedToSageIntacct';
2+
import useHasReusablePoliciesConnectedTo from '@hooks/useHasReusablePoliciesConnectedTo';
33
import useOnyx from '@hooks/useOnyx';
44
import {isAuthenticationError} from '@libs/actions/connections';
55
import Navigation from '@libs/Navigation/Navigation';
@@ -12,7 +12,7 @@ type ConnectToSageIntacctFlowProps = {
1212
};
1313

1414
function ConnectToSageIntacctFlow({policyID}: ConnectToSageIntacctFlowProps) {
15-
const hasPoliciesConnectedToSageIntacct = useHasPoliciesConnectedToSageIntacct();
15+
const hasReusablePoliciesConnectedToSageIntacct = useHasReusablePoliciesConnectedTo(CONST.POLICY.CONNECTIONS.NAME.SAGE_INTACCT, policyID);
1616
const [policy] = useOnyx(`${ONYXKEYS.COLLECTION.POLICY}${policyID}`);
1717
const shouldGoToEnterCredentials = isAuthenticationError(policy, CONST.POLICY.CONNECTIONS.NAME.SAGE_INTACCT);
1818

@@ -21,7 +21,7 @@ function ConnectToSageIntacctFlow({policyID}: ConnectToSageIntacctFlowProps) {
2121
Navigation.navigate(ROUTES.POLICY_ACCOUNTING_SAGE_INTACCT_ENTER_CREDENTIALS.getRoute(policyID));
2222
return;
2323
}
24-
if (!hasPoliciesConnectedToSageIntacct) {
24+
if (!hasReusablePoliciesConnectedToSageIntacct) {
2525
Navigation.navigate(`${ROUTES.POLICY_ACCOUNTING.getRoute(policyID)}/${DYNAMIC_ROUTES.SAGE_INTACCT_PREREQUISITES.path}`);
2626
return;
2727
}

src/hooks/useAdminPoliciesConnectedToNetSuite.ts

Lines changed: 0 additions & 10 deletions
This file was deleted.

src/hooks/useAdminPoliciesConnectedToSageIntacct.ts

Lines changed: 0 additions & 10 deletions
This file was deleted.

src/hooks/useHasPoliciesConnectedToSageIntacct.ts

Lines changed: 0 additions & 10 deletions
This file was deleted.
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
import type {OnyxCollection} from 'react-native-onyx';
2+
import ONYXKEYS from '@src/ONYXKEYS';
3+
import {hasReusablePoliciesConnectedToSelector} from '@src/selectors/Policy';
4+
import type {ReusablePolicyConnectionName} from '@src/selectors/Policy';
5+
import type {Policy} from '@src/types/onyx';
6+
import useOnyx from './useOnyx';
7+
8+
function useHasReusablePoliciesConnectedTo(connectionName: ReusablePolicyConnectionName, policyID: string | undefined) {
9+
const selector = (policies: OnyxCollection<Policy>) => hasReusablePoliciesConnectedToSelector(policies, connectionName, policyID);
10+
const [hasReusablePoliciesConnectedTo] = useOnyx(ONYXKEYS.COLLECTION.POLICY, {selector});
11+
return !!hasReusablePoliciesConnectedTo;
12+
}
13+
14+
export default useHasReusablePoliciesConnectedTo;
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
import ONYXKEYS from '@src/ONYXKEYS';
2+
import {reusablePoliciesConnectedToSelector} from '@src/selectors/Policy';
3+
import type {ReusablePolicyConnectionName} from '@src/selectors/Policy';
4+
import useOnyx from './useOnyx';
5+
6+
function useReusablePoliciesConnectedTo(connectionName: ReusablePolicyConnectionName, policyID: string | undefined) {
7+
const [policies] = useOnyx(ONYXKEYS.COLLECTION.POLICY);
8+
const reusablePoliciesConnectedTo = reusablePoliciesConnectedToSelector(policies, connectionName, policyID);
9+
10+
return {
11+
hasReusablePoliciesConnectedTo: reusablePoliciesConnectedTo.length > 0,
12+
reusablePoliciesConnectedTo,
13+
};
14+
}
15+
16+
export default useReusablePoliciesConnectedTo;

src/hooks/useReusablePoliciesConnectedToQBD.ts

Lines changed: 0 additions & 17 deletions
This file was deleted.

src/pages/workspace/accounting/AccountingContext/index.tsx

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -3,14 +3,14 @@ import type {RefObject} from 'react';
33
import type {View} from 'react-native';
44
import type {OnyxEntry} from 'react-native-onyx';
55
import AccountingConnectionConfirmationModal from '@components/AccountingConnectionConfirmationModal';
6-
import useHasPoliciesConnectedToSageIntacct from '@hooks/useHasPoliciesConnectedToSageIntacct';
6+
import useHasReusablePoliciesConnectedTo from '@hooks/useHasReusablePoliciesConnectedTo';
77
import {useMemoizedLazyExpensifyIcons} from '@hooks/useLazyAsset';
88
import useLocalize from '@hooks/useLocalize';
9-
import useReusablePoliciesConnectedToQBD from '@hooks/useReusablePoliciesConnectedToQBD';
109
import {removePolicyConnection} from '@libs/actions/connections';
1110
import Navigation from '@libs/Navigation/Navigation';
1211
import {isControlPolicy} from '@libs/PolicyUtils';
1312
import {getAccountingIntegrationData} from '@pages/workspace/accounting/utils';
13+
import CONST from '@src/CONST';
1414
import ROUTES from '@src/ROUTES';
1515
import type Policy from '@src/types/onyx/Policy';
1616
import type ChildrenProps from '@src/types/utils/ChildrenProps';
@@ -30,8 +30,8 @@ function AccountingContextProvider({children, policy}: AccountingContextProvider
3030
const {translate} = useLocalize();
3131
const policyID = policy?.id;
3232
const accountingIcons = useMemoizedLazyExpensifyIcons(['IntacctSquare', 'QBOSquare', 'XeroSquare', 'NetSuiteSquare', 'QBDSquare']);
33-
const hasPoliciesConnectedToSageIntacct = useHasPoliciesConnectedToSageIntacct();
34-
const {hasReusablePoliciesConnectedToQBD} = useReusablePoliciesConnectedToQBD(policyID);
33+
const hasReusablePoliciesConnectedToSageIntacct = useHasReusablePoliciesConnectedTo(CONST.POLICY.CONNECTIONS.NAME.SAGE_INTACCT, policyID);
34+
const hasReusablePoliciesConnectedToQBD = useHasReusablePoliciesConnectedTo(CONST.POLICY.CONNECTIONS.NAME.QBD, policyID);
3535

3636
const startIntegrationFlow = useCallback(
3737
(newActiveIntegration: ActiveIntegration) => {
@@ -43,7 +43,7 @@ function AccountingContextProvider({children, policy}: AccountingContextProvider
4343
newActiveIntegration.name,
4444
policyID,
4545
translate,
46-
{sageIntacct: hasPoliciesConnectedToSageIntacct, qbd: hasReusablePoliciesConnectedToQBD},
46+
{sageIntacct: hasReusablePoliciesConnectedToSageIntacct, qbd: hasReusablePoliciesConnectedToQBD},
4747
undefined,
4848
undefined,
4949
newActiveIntegration.integrationToDisconnect,
@@ -63,7 +63,7 @@ function AccountingContextProvider({children, policy}: AccountingContextProvider
6363
key: Math.random(),
6464
});
6565
},
66-
[policy, policyID, translate, hasPoliciesConnectedToSageIntacct, hasReusablePoliciesConnectedToQBD, accountingIcons],
66+
[policy, policyID, translate, hasReusablePoliciesConnectedToSageIntacct, hasReusablePoliciesConnectedToQBD, accountingIcons],
6767
);
6868

6969
const closeConfirmationModal = () => {
@@ -103,7 +103,7 @@ function AccountingContextProvider({children, policy}: AccountingContextProvider
103103
activeIntegration.name,
104104
policyID,
105105
translate,
106-
{sageIntacct: hasPoliciesConnectedToSageIntacct, qbd: hasReusablePoliciesConnectedToQBD},
106+
{sageIntacct: hasReusablePoliciesConnectedToSageIntacct, qbd: hasReusablePoliciesConnectedToQBD},
107107
policy,
108108
activeIntegration.key,
109109
undefined,

0 commit comments

Comments
 (0)