Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions src/components/ConnectToNetSuiteFlow/index.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -5,20 +5,20 @@ import useLocalize from '@hooks/useLocalize';
import useOnyx from '@hooks/useOnyx';
import useResponsiveLayout from '@hooks/useResponsiveLayout';
import {isAuthenticationError} from '@libs/actions/connections';
import {getAdminPoliciesConnectedToNetSuite} from '@libs/actions/Policy/Policy';
import Navigation from '@libs/Navigation/Navigation';
import {useAccountingState} from '@pages/workspace/accounting/AccountingContext';
import {getInitialSubPageForNetsuiteTokenInput} from '@pages/workspace/accounting/netsuite/utils';
import type {AnchorPosition} from '@styles/index';
import CONST from '@src/CONST';
import ONYXKEYS from '@src/ONYXKEYS';
import ROUTES from '@src/ROUTES';
import {hasPoliciesConnectedToNetSuiteSelector} from '@src/selectors/Policy';
import type {ConnectToNetSuiteFlowProps} from './types';

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

const hasPoliciesConnectedToNetSuite = !!getAdminPoliciesConnectedToNetSuite()?.length;
const [hasPoliciesConnectedToNetSuite] = useOnyx(ONYXKEYS.COLLECTION.POLICY, {selector: hasPoliciesConnectedToNetSuiteSelector});

// We need to use isSmallScreenWidth instead of shouldUseNarrowLayout to use the correct modal type
// eslint-disable-next-line rulesdir/prefer-shouldUseNarrowLayout-instead-of-isSmallScreenWidth
Expand Down
4 changes: 2 additions & 2 deletions src/components/ConnectToSageIntacctFlow/index.tsx
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import {useEffect} from 'react';
import useHasPoliciesConnectedToSageIntacct from '@hooks/useHasPoliciesConnectedToSageIntacct';
import useOnyx from '@hooks/useOnyx';
import {isAuthenticationError} from '@libs/actions/connections';
import {getAdminPoliciesConnectedToSageIntacct} from '@libs/actions/Policy/Policy';
import Navigation from '@libs/Navigation/Navigation';
import CONST from '@src/CONST';
import ONYXKEYS from '@src/ONYXKEYS';
Expand All @@ -12,7 +12,7 @@ type ConnectToSageIntacctFlowProps = {
};

function ConnectToSageIntacctFlow({policyID}: ConnectToSageIntacctFlowProps) {
const hasPoliciesConnectedToSageIntacct = !!getAdminPoliciesConnectedToSageIntacct().length;
const hasPoliciesConnectedToSageIntacct = useHasPoliciesConnectedToSageIntacct();
const [policy] = useOnyx(`${ONYXKEYS.COLLECTION.POLICY}${policyID}`);
const shouldGoToEnterCredentials = isAuthenticationError(policy, CONST.POLICY.CONNECTIONS.NAME.SAGE_INTACCT);

Expand Down
10 changes: 10 additions & 0 deletions src/hooks/useAdminPoliciesConnectedToNetSuite.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
import ONYXKEYS from '@src/ONYXKEYS';
import {adminPoliciesConnectedToNetSuiteSelector} from '@src/selectors/Policy';
import useOnyx from './useOnyx';

function useAdminPoliciesConnectedToNetSuite() {
const [policies] = useOnyx(ONYXKEYS.COLLECTION.POLICY);
return adminPoliciesConnectedToNetSuiteSelector(policies);
}

export default useAdminPoliciesConnectedToNetSuite;
10 changes: 10 additions & 0 deletions src/hooks/useAdminPoliciesConnectedToSageIntacct.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
import ONYXKEYS from '@src/ONYXKEYS';
import {adminPoliciesConnectedToSageIntacctSelector} from '@src/selectors/Policy';
import useOnyx from './useOnyx';

function useAdminPoliciesConnectedToSageIntacct() {
const [policies] = useOnyx(ONYXKEYS.COLLECTION.POLICY);
return adminPoliciesConnectedToSageIntacctSelector(policies);
}

export default useAdminPoliciesConnectedToSageIntacct;
10 changes: 10 additions & 0 deletions src/hooks/useHasPoliciesConnectedToSageIntacct.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
import ONYXKEYS from '@src/ONYXKEYS';
import {hasPoliciesConnectedToSageIntacctSelector} from '@src/selectors/Policy';
import useOnyx from './useOnyx';

function useHasPoliciesConnectedToSageIntacct() {
const [hasPolicies] = useOnyx(ONYXKEYS.COLLECTION.POLICY, {selector: hasPoliciesConnectedToSageIntacctSelector});
return hasPolicies ?? false;
}

export default useHasPoliciesConnectedToSageIntacct;
10 changes: 0 additions & 10 deletions src/libs/actions/Policy/Policy.ts
Original file line number Diff line number Diff line change
Expand Up @@ -236,7 +236,7 @@
};

const deprecatedAllPolicies: OnyxCollection<Policy> = {};
Onyx.connect({

Check warning on line 239 in src/libs/actions/Policy/Policy.ts

View workflow job for this annotation

GitHub Actions / Changed files ESLint check

Onyx.connect() is deprecated. Use useOnyx() hook instead and pass the data as parameters to a pure function
key: ONYXKEYS.COLLECTION.POLICY,
callback: (val, key) => {
if (!key) {
Expand All @@ -252,7 +252,7 @@
});

let deprecatedAllReportActions: OnyxCollection<ReportActions>;
Onyx.connect({

Check warning on line 255 in src/libs/actions/Policy/Policy.ts

View workflow job for this annotation

GitHub Actions / Changed files ESLint check

Onyx.connect() is deprecated. Use useOnyx() hook instead and pass the data as parameters to a pure function
key: ONYXKEYS.COLLECTION.REPORT_ACTIONS,
waitForCollectionCallback: true,
callback: (actions) => {
Expand All @@ -262,7 +262,7 @@

let deprecatedSessionEmail = '';
let deprecatedSessionAccountID = 0;
Onyx.connect({

Check warning on line 265 in src/libs/actions/Policy/Policy.ts

View workflow job for this annotation

GitHub Actions / Changed files ESLint check

Onyx.connect() is deprecated. Use useOnyx() hook instead and pass the data as parameters to a pure function
key: ONYXKEYS.SESSION,
callback: (val) => {
deprecatedSessionEmail = val?.email ?? '';
Expand All @@ -271,7 +271,7 @@
});

let deprecatedAllPersonalDetails: OnyxEntry<PersonalDetailsList>;
Onyx.connect({

Check warning on line 274 in src/libs/actions/Policy/Policy.ts

View workflow job for this annotation

GitHub Actions / Changed files ESLint check

Onyx.connect() is deprecated. Use useOnyx() hook instead and pass the data as parameters to a pure function
key: ONYXKEYS.PERSONAL_DETAILS_LIST,
callback: (val) => (deprecatedAllPersonalDetails = val),
});
Expand Down Expand Up @@ -6225,14 +6225,6 @@
);
}

function getAdminPoliciesConnectedToSageIntacct(): Policy[] {
return Object.values(deprecatedAllPolicies ?? {}).filter<Policy>((policy): policy is Policy => !!policy && policy.role === CONST.POLICY.ROLE.ADMIN && !!policy?.connections?.intacct);
}

function getAdminPoliciesConnectedToNetSuite(): Policy[] {
return Object.values(deprecatedAllPolicies ?? {}).filter<Policy>((policy): policy is Policy => !!policy && policy.role === CONST.POLICY.ROLE.ADMIN && !!policy?.connections?.netsuite);
}

/**
* Call the API to set default report title pattern for the given policy
* @param policyID - id of the policy to apply the naming pattern to
Expand Down Expand Up @@ -7170,8 +7162,6 @@
openPolicyEditCardLimitTypePage,
requestExpensifyCardLimitIncrease,
getAdminPolicies,
getAdminPoliciesConnectedToNetSuite,
getAdminPoliciesConnectedToSageIntacct,
hasInvoicingDetails,
Comment thread
bernhardoj marked this conversation as resolved.
clearAllPolicies,
enablePolicyRules,
Expand Down
19 changes: 16 additions & 3 deletions src/pages/workspace/accounting/AccountingContext/index.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -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 useHasPoliciesConnectedToSageIntacct from '@hooks/useHasPoliciesConnectedToSageIntacct';
import {useMemoizedLazyExpensifyIcons} from '@hooks/useLazyAsset';
import useLocalize from '@hooks/useLocalize';
import {removePolicyConnection} from '@libs/actions/connections';
Expand All @@ -28,6 +29,7 @@ function AccountingContextProvider({children, policy}: AccountingContextProvider
const {translate} = useLocalize();
const policyID = policy?.id;
const accountingIcons = useMemoizedLazyExpensifyIcons(['IntacctSquare', 'QBOSquare', 'XeroSquare', 'NetSuiteSquare', 'QBDSquare']);
const hasPoliciesConnectedToSageIntacct = useHasPoliciesConnectedToSageIntacct();

const startIntegrationFlow = useCallback(
(newActiveIntegration: ActiveIntegration) => {
Expand All @@ -39,6 +41,7 @@ function AccountingContextProvider({children, policy}: AccountingContextProvider
newActiveIntegration.name,
policyID,
translate,
hasPoliciesConnectedToSageIntacct,
undefined,
undefined,
newActiveIntegration.integrationToDisconnect,
Expand All @@ -58,7 +61,7 @@ function AccountingContextProvider({children, policy}: AccountingContextProvider
key: Math.random(),
});
},
[policy, policyID, translate, accountingIcons],
[policy, policyID, translate, hasPoliciesConnectedToSageIntacct, accountingIcons],
);

const closeConfirmationModal = () => {
Expand Down Expand Up @@ -94,8 +97,18 @@ function AccountingContextProvider({children, policy}: AccountingContextProvider
return null;
}

return getAccountingIntegrationData(activeIntegration.name, policyID, translate, policy, activeIntegration.key, undefined, undefined, undefined, accountingIcons)
?.setupConnectionFlow;
return getAccountingIntegrationData(
activeIntegration.name,
policyID,
translate,
hasPoliciesConnectedToSageIntacct,
policy,
activeIntegration.key,
undefined,
undefined,
undefined,
accountingIcons,
)?.setupConnectionFlow;
};

const shouldShowConfirmationModal = !!activeIntegration?.shouldDisconnectIntegrationBeforeConnecting && !!activeIntegration?.integrationToDisconnect;
Expand Down
31 changes: 29 additions & 2 deletions src/pages/workspace/accounting/PolicyAccountingPage.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -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 useHasPoliciesConnectedToSageIntacct from '@hooks/useHasPoliciesConnectedToSageIntacct';
import {useMemoizedLazyExpensifyIcons, useMemoizedLazyIllustrations} from '@hooks/useLazyAsset';
import useLocalize from '@hooks/useLocalize';
import useNetwork from '@hooks/useNetwork';
Expand Down Expand Up @@ -70,6 +71,7 @@ type RouteParams = {

function PolicyAccountingPage({policy}: PolicyAccountingPageProps) {
Comment thread
bernhardoj marked this conversation as resolved.
useWorkspaceDocumentTitle(policy?.name, 'workspace.common.accounting');
const hasPoliciesConnectedToSageIntacct = useHasPoliciesConnectedToSageIntacct();
const [connectionSyncProgress] = useOnyx(`${ONYXKEYS.COLLECTION.POLICY_CONNECTION_SYNC_PROGRESS}${policy?.id}`);
const [conciergeReportID] = useOnyx(ONYXKEYS.CONCIERGE_REPORT_ID);
const theme = useTheme();
Expand Down Expand Up @@ -297,7 +299,18 @@ function PolicyAccountingPage({policy}: PolicyAccountingPageProps) {
if (isEmptyObject(policy?.connections) && !isSyncInProgress && policyID) {
return accountingIntegrations
.map((integration) => {
const integrationData = getAccountingIntegrationData(integration, policyID, translate, undefined, undefined, undefined, undefined, undefined, accountingIcons);
const integrationData = getAccountingIntegrationData(
integration,
policyID,
translate,
hasPoliciesConnectedToSageIntacct,
undefined,
undefined,
undefined,
undefined,
undefined,
accountingIcons,
);
if (!integrationData) {
return undefined;
}
Expand Down Expand Up @@ -354,6 +367,7 @@ function PolicyAccountingPage({policy}: PolicyAccountingPageProps) {
connectedIntegration,
policyID,
translate,
hasPoliciesConnectedToSageIntacct,
policy,
undefined,
undefined,
Expand Down Expand Up @@ -486,6 +500,7 @@ function PolicyAccountingPage({policy}: PolicyAccountingPageProps) {
startIntegrationFlow,
popoverAnchorRefs,
datetimeToRelative,
hasPoliciesConnectedToSageIntacct,
]);

const otherIntegrationsItems = useMemo(() => {
Expand All @@ -497,7 +512,18 @@ function PolicyAccountingPage({policy}: PolicyAccountingPageProps) {
);
return otherIntegrations
.map((integration) => {
const integrationData = getAccountingIntegrationData(integration, policyID, translate, undefined, undefined, undefined, undefined, undefined, accountingIcons);
const integrationData = getAccountingIntegrationData(
integration,
policyID,
translate,
hasPoliciesConnectedToSageIntacct,
undefined,
undefined,
undefined,
undefined,
undefined,
accountingIcons,
);
if (!integrationData) {
return undefined;
}
Expand Down Expand Up @@ -543,6 +569,7 @@ function PolicyAccountingPage({policy}: PolicyAccountingPageProps) {
connectedIntegration,
policyID,
translate,
hasPoliciesConnectedToSageIntacct,
styles.justifyContentCenter,
styles.sectionMenuItemTopDescription,
isOffline,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,11 +5,11 @@ import MenuItemList from '@components/MenuItemList';
import ScreenWrapper from '@components/ScreenWrapper';
import ScrollView from '@components/ScrollView';
import Text from '@components/Text';
import useAdminPoliciesConnectedToSageIntacct from '@hooks/useAdminPoliciesConnectedToSageIntacct';
import {useMemoizedLazyExpensifyIcons} from '@hooks/useLazyAsset';
import useLocalize from '@hooks/useLocalize';
import useThemeStyles from '@hooks/useThemeStyles';
import {copyExistingPolicyConnection} from '@libs/actions/connections';
import {getAdminPoliciesConnectedToSageIntacct} from '@libs/actions/Policy/Policy';
import Navigation from '@libs/Navigation/Navigation';
import type {PlatformStackScreenProps} from '@libs/Navigation/PlatformStackNavigation/types';
import type {SettingsNavigatorParamList} from '@libs/Navigation/types';
Expand All @@ -25,7 +25,7 @@ function ExistingConnectionsPage({route}: ExistingConnectionsPageProps) {
const {translate, datetimeToRelative} = useLocalize();
const styles = useThemeStyles();
const icons = useMemoizedLazyExpensifyIcons(['LinkCopy'] as const);
const policiesConnectedToSageIntacct = getAdminPoliciesConnectedToSageIntacct();
const policiesConnectedToSageIntacct = useAdminPoliciesConnectedToSageIntacct();
const policyID: string = route.params.policyID;

const menuItems = policiesConnectedToSageIntacct.map((policy) => {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,10 @@ import React from 'react';
import {View} from 'react-native';
import ConnectionLayout from '@components/ConnectionLayout';
import MenuItemList from '@components/MenuItemList';
import useAdminPoliciesConnectedToNetSuite from '@hooks/useAdminPoliciesConnectedToNetSuite';
import useLocalize from '@hooks/useLocalize';
import useThemeStyles from '@hooks/useThemeStyles';
import {copyExistingPolicyConnection} from '@libs/actions/connections';
import {getAdminPoliciesConnectedToNetSuite} from '@libs/actions/Policy/Policy';
import Navigation from '@libs/Navigation/Navigation';
import type {PlatformStackScreenProps} from '@libs/Navigation/PlatformStackNavigation/types';
import type {SettingsNavigatorParamList} from '@libs/Navigation/types';
Expand All @@ -19,10 +19,10 @@ type ExistingConnectionsPageProps = PlatformStackScreenProps<SettingsNavigatorPa
function NetSuiteExistingConnectionsPage({route}: ExistingConnectionsPageProps) {
const {translate, datetimeToRelative} = useLocalize();
const styles = useThemeStyles();
const policiesConnectedToSageNetSuite = getAdminPoliciesConnectedToNetSuite();
const policiesConnectedToNetSuite = useAdminPoliciesConnectedToNetSuite();
const policyID: string = route.params.policyID;

const menuItems = policiesConnectedToSageNetSuite.map((policy) => {
const menuItems = policiesConnectedToNetSuite.map((policy) => {
const lastSuccessfulSyncDate = policy.connections?.netsuite.lastSyncDate;
const date = lastSuccessfulSyncDate ? datetimeToRelative(lastSuccessfulSyncDate) : undefined;
return {
Expand Down
3 changes: 1 addition & 2 deletions src/pages/workspace/accounting/utils.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,6 @@ import type {LocaleContextProps} from '@components/LocaleContextProvider';
import Text from '@components/Text';
import TextLink from '@components/TextLink';
import {isAuthenticationError} from '@libs/actions/connections';
import {getAdminPoliciesConnectedToSageIntacct} from '@libs/actions/Policy/Policy';
import getPlatform from '@libs/getPlatform';
import {canUseTaxNetSuite} from '@libs/PolicyUtils';
import Navigation from '@navigation/Navigation';
Expand Down Expand Up @@ -47,6 +46,7 @@ function getAccountingIntegrationData(
connectionName: PolicyConnectionName,
policyID: string,
translate: LocaleContextProps['translate'],
hasPoliciesConnectedToSageIntacct: boolean,
policy?: Policy,
key?: number,
integrationToDisconnect?: ConnectionName,
Expand All @@ -57,7 +57,6 @@ function getAccountingIntegrationData(
const qboConfig = policy?.connections?.quickbooksOnline?.config;
const netsuiteConfig = policy?.connections?.netsuite?.options?.config;
const netsuiteSelectedSubsidiary = (policy?.connections?.netsuite?.options?.data?.subsidiaryList ?? []).find((subsidiary) => subsidiary.internalID === netsuiteConfig?.subsidiaryID);
const hasPoliciesConnectedToSageIntacct = !!getAdminPoliciesConnectedToSageIntacct().length;
const getBackToAfterWorkspaceUpgradeRouteForIntacct = () => {
if (integrationToDisconnect) {
return ROUTES.POLICY_ACCOUNTING.getRoute(policyID, connectionName, integrationToDisconnect, shouldDisconnectIntegrationBeforeConnecting);
Expand Down
14 changes: 14 additions & 0 deletions src/selectors/Policy.ts
Original file line number Diff line number Diff line change
Expand Up @@ -122,6 +122,16 @@ const iouRequestPolicyCollectionSelector = (policies: OnyxCollection<Policy>): O
return result;
};

const adminPoliciesConnectedToSageIntacctSelector = (policies: OnyxCollection<Policy>) =>
Object.values(policies ?? {}).filter<Policy>((policy): policy is Policy => !!policy && policy.role === CONST.POLICY.ROLE.ADMIN && !!policy?.connections?.intacct);

const adminPoliciesConnectedToNetSuiteSelector = (policies: OnyxCollection<Policy>) =>
Object.values(policies ?? {}).filter<Policy>((policy): policy is Policy => !!policy && policy.role === CONST.POLICY.ROLE.ADMIN && !!policy?.connections?.netsuite);

const hasPoliciesConnectedToSageIntacctSelector = (policies: OnyxCollection<Policy>) => !!adminPoliciesConnectedToSageIntacctSelector(policies).length;

const hasPoliciesConnectedToNetSuiteSelector = (policies: OnyxCollection<Policy>) => !!adminPoliciesConnectedToNetSuiteSelector(policies).length;

export {
activePolicySelector,
createAllPolicyReportFieldsSelector,
Expand All @@ -133,4 +143,8 @@ export {
groupPaidPoliciesWithExpenseChatEnabledSelector,
iouRequestPolicyCollectionSelector,
shouldRedirectToExpensifyClassicSelector,
adminPoliciesConnectedToSageIntacctSelector,
adminPoliciesConnectedToNetSuiteSelector,
hasPoliciesConnectedToSageIntacctSelector,
hasPoliciesConnectedToNetSuiteSelector,
};
Loading