From 9afb1695b425684c558b4b43a151c6f67d8221c0 Mon Sep 17 00:00:00 2001 From: thelullabyy Date: Fri, 18 Apr 2025 16:05:29 +0700 Subject: [PATCH 01/10] fix: QBD display wrong messange without connection --- src/languages/en.ts | 1 + src/languages/es.ts | 1 + src/pages/workspace/accounting/PolicyAccountingPage.tsx | 2 ++ src/pages/workspace/categories/WorkspaceCategoriesPage.tsx | 6 ++++-- 4 files changed, 8 insertions(+), 2 deletions(-) diff --git a/src/languages/en.ts b/src/languages/en.ts index ed17381a6378..7d61cfffbde9 100755 --- a/src/languages/en.ts +++ b/src/languages/en.ts @@ -4320,6 +4320,7 @@ const translations = { goToODToSettings: 'Go to Expensify Classic to manage your settings.', setup: 'Connect', lastSync: ({relativeDate}: LastSyncAccountingParams) => `Last synced ${relativeDate}`, + notSync: 'Not synced', import: 'Import', export: 'Export', advanced: 'Advanced', diff --git a/src/languages/es.ts b/src/languages/es.ts index c08ebd3fdf06..0253e0f25a75 100644 --- a/src/languages/es.ts +++ b/src/languages/es.ts @@ -4330,6 +4330,7 @@ const translations = { goToODToSettings: 'Ve a Expensify Classic para gestionar tus configuraciones.', setup: 'Configurar', lastSync: ({relativeDate}: LastSyncAccountingParams) => `Recién sincronizado ${relativeDate}`, + notSync: 'Not synced', import: 'Importar', export: 'Exportar', advanced: 'Avanzado', diff --git a/src/pages/workspace/accounting/PolicyAccountingPage.tsx b/src/pages/workspace/accounting/PolicyAccountingPage.tsx index 4a2a066c3004..6cfb55ec6ef2 100644 --- a/src/pages/workspace/accounting/PolicyAccountingPage.tsx +++ b/src/pages/workspace/accounting/PolicyAccountingPage.tsx @@ -394,6 +394,8 @@ function PolicyAccountingPage({policy}: PolicyAccountingPageProps) { description: isSyncInProgress && connectionSyncProgress?.stageInProgress ? translate('workspace.accounting.connections.syncStageName', {stage: connectionSyncProgress.stageInProgress}) + : shouldHideConfigurationOptions + ? translate('workspace.accounting.notSync') : translate('workspace.accounting.lastSync', {relativeDate: datetimeToRelative}), rightComponent: isSyncInProgress ? ( 0; + const accountingIntegrations = Object.values(CONST.POLICY.CONNECTIONS.NAME); + const connectedIntegration = getConnectedIntegration(policy, accountingIntegrations) ?? connectionSyncProgress?.connectionName; const currentConnectionName = getCurrentConnectionName(policy); const isQuickSettingsFlow = !!backTo; const {canUseLeftHandBar} = usePermissions(); @@ -337,7 +339,7 @@ function WorkspaceCategoriesPage({route}: WorkspaceCategoriesPageProps) { const getHeaderText = () => ( - {!hasSyncError && isConnectedToAccounting ? ( + {!hasSyncError && isConnectedToAccounting && connectedIntegration ? ( {`${translate('workspace.categories.importedFromAccountingSoftware')} `} Date: Sat, 19 Apr 2025 09:25:32 +0700 Subject: [PATCH 02/10] fix: ESlint --- .../accounting/PolicyAccountingPage.tsx | 18 +++++------ src/pages/workspace/accounting/utils.tsx | 30 +++++++++++++++++-- .../categories/WorkspaceCategoriesPage.tsx | 4 +-- 3 files changed, 37 insertions(+), 15 deletions(-) diff --git a/src/pages/workspace/accounting/PolicyAccountingPage.tsx b/src/pages/workspace/accounting/PolicyAccountingPage.tsx index 6cfb55ec6ef2..b80b8600abb0 100644 --- a/src/pages/workspace/accounting/PolicyAccountingPage.tsx +++ b/src/pages/workspace/accounting/PolicyAccountingPage.tsx @@ -58,7 +58,7 @@ import type {ConnectionName} from '@src/types/onyx/Policy'; import {isEmptyObject} from '@src/types/utils/EmptyObject'; import {AccountingContextProvider, useAccountingContext} from './AccountingContext'; import type {MenuItemData, PolicyAccountingPageProps} from './types'; -import {getAccountingIntegrationData, getSynchronizationErrorMessage} from './utils'; +import {getAccountingIntegrationData, getConnectionMessage, getSynchronizationErrorMessage} from './utils'; type RouteParams = { newConnectionName?: ConnectionName; @@ -67,9 +67,9 @@ type RouteParams = { }; function PolicyAccountingPage({policy}: PolicyAccountingPageProps) { - const [connectionSyncProgress] = useOnyx(`${ONYXKEYS.COLLECTION.POLICY_CONNECTION_SYNC_PROGRESS}${policy?.id}`); - const [cardSettings] = useOnyx(`${ONYXKEYS.COLLECTION.PRIVATE_EXPENSIFY_CARD_SETTINGS}${policy?.workspaceAccountID ?? CONST.DEFAULT_NUMBER_ID}`); - const [conciergeChatReportID] = useOnyx(ONYXKEYS.DERIVED.CONCIERGE_CHAT_REPORT_ID); + const [connectionSyncProgress] = useOnyx(`${ONYXKEYS.COLLECTION.POLICY_CONNECTION_SYNC_PROGRESS}${policy?.id}`, {canBeMissing: false}); + const [cardSettings] = useOnyx(`${ONYXKEYS.COLLECTION.PRIVATE_EXPENSIFY_CARD_SETTINGS}${policy?.workspaceAccountID ?? CONST.DEFAULT_NUMBER_ID}`, {canBeMissing: false}); + const [conciergeChatReportID] = useOnyx(ONYXKEYS.DERIVED.CONCIERGE_CHAT_REPORT_ID, {canBeMissing: false}); const theme = useTheme(); const styles = useThemeStyles(); const {translate, datetimeToRelative: getDatetimeToRelative} = useLocalize(); @@ -81,7 +81,7 @@ function PolicyAccountingPage({policy}: PolicyAccountingPageProps) { const [datetimeToRelative, setDateTimeToRelative] = useState(''); const threeDotsMenuContainerRef = useRef(null); const {startIntegrationFlow, popoverAnchorRefs} = useAccountingContext(); - const [account] = useOnyx(ONYXKEYS.ACCOUNT); + const [account] = useOnyx(ONYXKEYS.ACCOUNT, {canBeMissing: false}); const {isLargeScreenWidth} = useResponsiveLayout(); const route = useRoute(); const params = route.params as RouteParams | undefined; @@ -332,6 +332,7 @@ function PolicyAccountingPage({policy}: PolicyAccountingPageProps) { const shouldHideConfigurationOptions = isConnectionUnverified(policy, connectedIntegration); const integrationData = getAccountingIntegrationData(connectedIntegration, policyID, translate, policy, undefined, undefined, undefined, canUseNetSuiteUSATax); const iconProps = integrationData?.icon ? {icon: integrationData.icon, iconType: CONST.ICON_TYPE_AVATAR} : {}; + const connectionMessage = getConnectionMessage(isSyncInProgress, connectionSyncProgress?.stageInProgress, datetimeToRelative, shouldHideConfigurationOptions, translate); const configurationOptions = [ { @@ -391,12 +392,7 @@ function PolicyAccountingPage({policy}: PolicyAccountingPageProps) { errorText: synchronizationError, errorTextStyle: [styles.mt5], shouldShowRedDotIndicator: true, - description: - isSyncInProgress && connectionSyncProgress?.stageInProgress - ? translate('workspace.accounting.connections.syncStageName', {stage: connectionSyncProgress.stageInProgress}) - : shouldHideConfigurationOptions - ? translate('workspace.accounting.notSync') - : translate('workspace.accounting.lastSync', {relativeDate: datetimeToRelative}), + description: connectionMessage, rightComponent: isSyncInProgress ? ( 0; From 66b0327ef3835505d5b8a1b106045cb1b947497b Mon Sep 17 00:00:00 2001 From: thelullabyy Date: Sat, 19 Apr 2025 09:34:00 +0700 Subject: [PATCH 03/10] fix EPSF lint rule --- src/pages/workspace/accounting/PolicyAccountingPage.tsx | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/pages/workspace/accounting/PolicyAccountingPage.tsx b/src/pages/workspace/accounting/PolicyAccountingPage.tsx index b80b8600abb0..c379a1ec820d 100644 --- a/src/pages/workspace/accounting/PolicyAccountingPage.tsx +++ b/src/pages/workspace/accounting/PolicyAccountingPage.tsx @@ -67,8 +67,9 @@ type RouteParams = { }; function PolicyAccountingPage({policy}: PolicyAccountingPageProps) { + const workspaceAccountID = policy?.workspaceAccountID ?? CONST.DEFAULT_NUMBER_ID; const [connectionSyncProgress] = useOnyx(`${ONYXKEYS.COLLECTION.POLICY_CONNECTION_SYNC_PROGRESS}${policy?.id}`, {canBeMissing: false}); - const [cardSettings] = useOnyx(`${ONYXKEYS.COLLECTION.PRIVATE_EXPENSIFY_CARD_SETTINGS}${policy?.workspaceAccountID ?? CONST.DEFAULT_NUMBER_ID}`, {canBeMissing: false}); + const [cardSettings] = useOnyx(`${ONYXKEYS.COLLECTION.PRIVATE_EXPENSIFY_CARD_SETTINGS}${workspaceAccountID}`, {canBeMissing: false}); const [conciergeChatReportID] = useOnyx(ONYXKEYS.DERIVED.CONCIERGE_CHAT_REPORT_ID, {canBeMissing: false}); const theme = useTheme(); const styles = useThemeStyles(); From a5dd634f1aacb3908777919594694817e16108d5 Mon Sep 17 00:00:00 2001 From: thelullabyy Date: Mon, 21 Apr 2025 16:53:43 +0700 Subject: [PATCH 04/10] update: refactor code, update es translate --- src/languages/es.ts | 2 +- .../accounting/PolicyAccountingPage.tsx | 18 +++++++---- src/pages/workspace/accounting/utils.tsx | 30 ++----------------- .../categories/WorkspaceCategoriesPage.tsx | 10 +++---- 4 files changed, 21 insertions(+), 39 deletions(-) diff --git a/src/languages/es.ts b/src/languages/es.ts index 0253e0f25a75..f426c4295fec 100644 --- a/src/languages/es.ts +++ b/src/languages/es.ts @@ -4330,7 +4330,7 @@ const translations = { goToODToSettings: 'Ve a Expensify Classic para gestionar tus configuraciones.', setup: 'Configurar', lastSync: ({relativeDate}: LastSyncAccountingParams) => `Recién sincronizado ${relativeDate}`, - notSync: 'Not synced', + notSync: 'No sincronizado', import: 'Importar', export: 'Exportar', advanced: 'Avanzado', diff --git a/src/pages/workspace/accounting/PolicyAccountingPage.tsx b/src/pages/workspace/accounting/PolicyAccountingPage.tsx index c379a1ec820d..bda997be9946 100644 --- a/src/pages/workspace/accounting/PolicyAccountingPage.tsx +++ b/src/pages/workspace/accounting/PolicyAccountingPage.tsx @@ -58,7 +58,7 @@ import type {ConnectionName} from '@src/types/onyx/Policy'; import {isEmptyObject} from '@src/types/utils/EmptyObject'; import {AccountingContextProvider, useAccountingContext} from './AccountingContext'; import type {MenuItemData, PolicyAccountingPageProps} from './types'; -import {getAccountingIntegrationData, getConnectionMessage, getSynchronizationErrorMessage} from './utils'; +import {getAccountingIntegrationData, getSynchronizationErrorMessage} from './utils'; type RouteParams = { newConnectionName?: ConnectionName; @@ -68,9 +68,9 @@ type RouteParams = { function PolicyAccountingPage({policy}: PolicyAccountingPageProps) { const workspaceAccountID = policy?.workspaceAccountID ?? CONST.DEFAULT_NUMBER_ID; - const [connectionSyncProgress] = useOnyx(`${ONYXKEYS.COLLECTION.POLICY_CONNECTION_SYNC_PROGRESS}${policy?.id}`, {canBeMissing: false}); - const [cardSettings] = useOnyx(`${ONYXKEYS.COLLECTION.PRIVATE_EXPENSIFY_CARD_SETTINGS}${workspaceAccountID}`, {canBeMissing: false}); - const [conciergeChatReportID] = useOnyx(ONYXKEYS.DERIVED.CONCIERGE_CHAT_REPORT_ID, {canBeMissing: false}); + const [connectionSyncProgress] = useOnyx(`${ONYXKEYS.COLLECTION.POLICY_CONNECTION_SYNC_PROGRESS}${policy?.id}`, {canBeMissing: true}); + const [cardSettings] = useOnyx(`${ONYXKEYS.COLLECTION.PRIVATE_EXPENSIFY_CARD_SETTINGS}${workspaceAccountID}`, {canBeMissing: true}); + const [conciergeChatReportID] = useOnyx(ONYXKEYS.DERIVED.CONCIERGE_CHAT_REPORT_ID, {canBeMissing: true}); const theme = useTheme(); const styles = useThemeStyles(); const {translate, datetimeToRelative: getDatetimeToRelative} = useLocalize(); @@ -333,7 +333,15 @@ function PolicyAccountingPage({policy}: PolicyAccountingPageProps) { const shouldHideConfigurationOptions = isConnectionUnverified(policy, connectedIntegration); const integrationData = getAccountingIntegrationData(connectedIntegration, policyID, translate, policy, undefined, undefined, undefined, canUseNetSuiteUSATax); const iconProps = integrationData?.icon ? {icon: integrationData.icon, iconType: CONST.ICON_TYPE_AVATAR} : {}; - const connectionMessage = getConnectionMessage(isSyncInProgress, connectionSyncProgress?.stageInProgress, datetimeToRelative, shouldHideConfigurationOptions, translate); + + let connectionMessage = ''; + if (isSyncInProgress && connectionSyncProgress?.stageInProgress) { + connectionMessage = translate('workspace.accounting.connections.syncStageName', {stage: connectionSyncProgress?.stageInProgress}); + } else if (shouldHideConfigurationOptions) { + connectionMessage = translate('workspace.accounting.notSync'); + } else { + connectionMessage = translate('workspace.accounting.lastSync', {relativeDate: datetimeToRelative}); + } const configurationOptions = [ { diff --git a/src/pages/workspace/accounting/utils.tsx b/src/pages/workspace/accounting/utils.tsx index 63e12882956b..05a0d35e7245 100644 --- a/src/pages/workspace/accounting/utils.tsx +++ b/src/pages/workspace/accounting/utils.tsx @@ -19,15 +19,7 @@ import {getTrackingCategories} from '@userActions/connections/Xero'; import CONST from '@src/CONST'; import ROUTES from '@src/ROUTES'; import type {Policy} from '@src/types/onyx'; -import type { - Account, - ConnectionName, - Connections, - PolicyConnectionName, - PolicyConnectionSyncStage, - QBDNonReimbursableExportAccountType, - QBDReimbursableExportAccountType, -} from '@src/types/onyx/Policy'; +import type {Account, ConnectionName, Connections, PolicyConnectionName, QBDNonReimbursableExportAccountType, QBDReimbursableExportAccountType} from '@src/types/onyx/Policy'; import {isEmptyObject} from '@src/types/utils/EmptyObject'; import { getImportCustomFieldsSettings, @@ -379,22 +371,4 @@ function getQBDReimbursableAccounts( return accounts; } -function getConnectionMessage( - isSyncInProgress: boolean, - stageInProgress: PolicyConnectionSyncStage | undefined, - datetimeToRelative: string, - isConnectionUnverified: boolean, - translate: LocaleContextProps['translate'], -): string { - if (isSyncInProgress && stageInProgress) { - return translate('workspace.accounting.connections.syncStageName', {stage: stageInProgress}); - } - - if (isConnectionUnverified) { - return translate('workspace.accounting.notSync'); - } - - return translate('workspace.accounting.lastSync', {relativeDate: datetimeToRelative}); -} - -export {getAccountingIntegrationData, getSynchronizationErrorMessage, getQBDReimbursableAccounts, getConnectionMessage}; +export {getAccountingIntegrationData, getSynchronizationErrorMessage, getQBDReimbursableAccounts}; diff --git a/src/pages/workspace/categories/WorkspaceCategoriesPage.tsx b/src/pages/workspace/categories/WorkspaceCategoriesPage.tsx index c8a91bcbd434..8721a3691318 100644 --- a/src/pages/workspace/categories/WorkspaceCategoriesPage.tsx +++ b/src/pages/workspace/categories/WorkspaceCategoriesPage.tsx @@ -35,7 +35,7 @@ import useSearchBackPress from '@hooks/useSearchBackPress'; import useTheme from '@hooks/useTheme'; import useThemeStyles from '@hooks/useThemeStyles'; import useThreeDotsAnchorPosition from '@hooks/useThreeDotsAnchorPosition'; -import {isConnectionInProgress} from '@libs/actions/connections'; +import {isConnectionInProgress, isConnectionUnverified} from '@libs/actions/connections'; import {turnOffMobileSelectionMode} from '@libs/actions/MobileSelectionMode'; import {canUseTouchScreen} from '@libs/DeviceCapabilities'; import localeCompare from '@libs/LocaleCompare'; @@ -79,13 +79,13 @@ function WorkspaceCategoriesPage({route}: WorkspaceCategoriesPageProps) { const backTo = route.params?.backTo; const policy = usePolicy(policyId); const {selectionMode} = useMobileSelectionMode(); - const [policyCategories] = useOnyx(`${ONYXKEYS.COLLECTION.POLICY_CATEGORIES}${policyId}`, {canBeMissing: false}); - const [connectionSyncProgress] = useOnyx(`${ONYXKEYS.COLLECTION.POLICY_CONNECTION_SYNC_PROGRESS}${policy?.id}`, {canBeMissing: false}); + const [policyCategories] = useOnyx(`${ONYXKEYS.COLLECTION.POLICY_CATEGORIES}${policyId}`, {canBeMissing: true}); + const [connectionSyncProgress] = useOnyx(`${ONYXKEYS.COLLECTION.POLICY_CONNECTION_SYNC_PROGRESS}${policy?.id}`, {canBeMissing: true}); const isSyncInProgress = isConnectionInProgress(connectionSyncProgress, policy); const hasSyncError = shouldShowSyncError(policy, isSyncInProgress); - const isConnectedToAccounting = Object.keys(policy?.connections ?? {}).length > 0; const accountingIntegrations = Object.values(CONST.POLICY.CONNECTIONS.NAME); const connectedIntegration = getConnectedIntegration(policy, accountingIntegrations) ?? connectionSyncProgress?.connectionName; + const isConnectionVerified = connectedIntegration !== undefined ? !isConnectionUnverified(policy, connectedIntegration) : false; const currentConnectionName = getCurrentConnectionName(policy); const isQuickSettingsFlow = !!backTo; const {canUseLeftHandBar} = usePermissions(); @@ -339,7 +339,7 @@ function WorkspaceCategoriesPage({route}: WorkspaceCategoriesPageProps) { const getHeaderText = () => ( - {!hasSyncError && isConnectedToAccounting && connectedIntegration ? ( + {!hasSyncError && connectedIntegration && isConnectionVerified ? ( {`${translate('workspace.categories.importedFromAccountingSoftware')} `} Date: Mon, 21 Apr 2025 18:55:33 +0700 Subject: [PATCH 05/10] update condition for other pages --- .../categories/WorkspaceCategoriesPage.tsx | 2 +- .../reportFields/WorkspaceReportFieldsPage.tsx | 10 ++++++---- src/pages/workspace/tags/WorkspaceTagsPage.tsx | 9 ++++++--- src/pages/workspace/taxes/WorkspaceTaxesPage.tsx | 16 ++++++++++++---- 4 files changed, 25 insertions(+), 12 deletions(-) diff --git a/src/pages/workspace/categories/WorkspaceCategoriesPage.tsx b/src/pages/workspace/categories/WorkspaceCategoriesPage.tsx index 8721a3691318..0d440f7766ec 100644 --- a/src/pages/workspace/categories/WorkspaceCategoriesPage.tsx +++ b/src/pages/workspace/categories/WorkspaceCategoriesPage.tsx @@ -339,7 +339,7 @@ function WorkspaceCategoriesPage({route}: WorkspaceCategoriesPageProps) { const getHeaderText = () => ( - {!hasSyncError && connectedIntegration && isConnectionVerified ? ( + {!hasSyncError && isConnectionVerified ? ( {`${translate('workspace.categories.importedFromAccountingSoftware')} `} 0; + const accountingIntegrations = Object.values(CONST.POLICY.CONNECTIONS.NAME); + const connectedIntegration = getConnectedIntegration(policy, accountingIntegrations) ?? connectionSyncProgress?.connectionName; + const isConnectionVerified = connectedIntegration !== undefined ? !isConnectionUnverified(policy, connectedIntegration) : false; const currentConnectionName = getCurrentConnectionName(policy); const canSelectMultiple = !hasReportAccountingConnections && (isSmallScreenWidth ? selectionMode?.isEnabled : true); @@ -214,7 +216,7 @@ function WorkspaceReportFieldsPage({ const getHeaderText = () => ( - {!hasSyncError && isConnectedToAccounting ? ( + {!hasSyncError && isConnectionVerified ? ( {`${translate('workspace.reportFields.importedFromAccountingSoftware')} `} 0; + const accountingIntegrations = Object.values(CONST.POLICY.CONNECTIONS.NAME); + const connectedIntegration = getConnectedIntegration(policy, accountingIntegrations) ?? connectionSyncProgress?.connectionName; + const isConnectionVerified = connectedIntegration !== undefined ? !isConnectionUnverified(policy, connectedIntegration) : false; const currentConnectionName = getCurrentConnectionName(policy); const [policyTagLists, isMultiLevelTags] = useMemo(() => [getTagLists(policyTags), isMultiLevelTagsPolicyUtils(policyTags)], [policyTags]); const canSelectMultiple = !isMultiLevelTags && (shouldUseNarrowLayout ? selectionMode?.isEnabled : true); @@ -409,7 +412,7 @@ function WorkspaceTagsPage({route}: WorkspaceTagsPageProps) { const getHeaderText = () => ( - {!hasSyncError && isConnectedToAccounting ? ( + {!hasSyncError && isConnectionVerified ? ( {`${translate('workspace.tags.importedFromAccountingSoftware')} `} 0; + const accountingIntegrations = Object.values(CONST.POLICY.CONNECTIONS.NAME); + const connectedIntegration = getConnectedIntegration(policy, accountingIntegrations) ?? connectionSyncProgress?.connectionName; + const isConnectionVerified = connectedIntegration !== undefined ? !isConnectionUnverified(policy, connectedIntegration) : false; const currentConnectionName = getCurrentConnectionName(policy); const canSelectMultiple = shouldUseNarrowLayout ? selectionMode?.isEnabled : true; @@ -314,7 +322,7 @@ function WorkspaceTaxesPage({ const getHeaderText = () => ( - {!hasSyncError && isConnectedToAccounting ? ( + {!hasSyncError && isConnectionVerified ? ( {`${translate('workspace.taxes.importedFromAccountingSoftware')} `} Date: Mon, 21 Apr 2025 19:02:01 +0700 Subject: [PATCH 06/10] fix Eslint --- .../workspace/reportFields/WorkspaceReportFieldsPage.tsx | 2 +- src/pages/workspace/tags/WorkspaceTagsPage.tsx | 4 ++-- src/pages/workspace/taxes/WorkspaceTaxesPage.tsx | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/pages/workspace/reportFields/WorkspaceReportFieldsPage.tsx b/src/pages/workspace/reportFields/WorkspaceReportFieldsPage.tsx index 7ee206ff798b..dc76f08ca38a 100644 --- a/src/pages/workspace/reportFields/WorkspaceReportFieldsPage.tsx +++ b/src/pages/workspace/reportFields/WorkspaceReportFieldsPage.tsx @@ -84,7 +84,7 @@ function WorkspaceReportFieldsPage({ const [selectedReportFields, setSelectedReportFields] = useState([]); const [deleteReportFieldsConfirmModalVisible, setDeleteReportFieldsConfirmModalVisible] = useState(false); const hasReportAccountingConnections = hasAccountingConnections(policy); - const [connectionSyncProgress] = useOnyx(`${ONYXKEYS.COLLECTION.POLICY_CONNECTION_SYNC_PROGRESS}${policy?.id}`); + const [connectionSyncProgress] = useOnyx(`${ONYXKEYS.COLLECTION.POLICY_CONNECTION_SYNC_PROGRESS}${policy?.id}`, {canBeMissing: true}); const isSyncInProgress = isConnectionInProgress(connectionSyncProgress, policy); const hasSyncError = shouldShowSyncError(policy, isSyncInProgress); const accountingIntegrations = Object.values(CONST.POLICY.CONNECTIONS.NAME); diff --git a/src/pages/workspace/tags/WorkspaceTagsPage.tsx b/src/pages/workspace/tags/WorkspaceTagsPage.tsx index 1b2afad95cec..b636a0d54c40 100644 --- a/src/pages/workspace/tags/WorkspaceTagsPage.tsx +++ b/src/pages/workspace/tags/WorkspaceTagsPage.tsx @@ -79,10 +79,10 @@ function WorkspaceTagsPage({route}: WorkspaceTagsPageProps) { const policyID = route.params.policyID; const backTo = route.params.backTo; const policy = usePolicy(policyID); - const [policyTags] = useOnyx(`${ONYXKEYS.COLLECTION.POLICY_TAGS}${policyID}`); + const [policyTags] = useOnyx(`${ONYXKEYS.COLLECTION.POLICY_TAGS}${policyID}`, {canBeMissing: true}); const {selectionMode} = useMobileSelectionMode(); const {environmentURL} = useEnvironment(); - const [connectionSyncProgress] = useOnyx(`${ONYXKEYS.COLLECTION.POLICY_CONNECTION_SYNC_PROGRESS}${policy?.id}`); + const [connectionSyncProgress] = useOnyx(`${ONYXKEYS.COLLECTION.POLICY_CONNECTION_SYNC_PROGRESS}${policy?.id}`, {canBeMissing: true}); const isSyncInProgress = isConnectionInProgress(connectionSyncProgress, policy); const hasSyncError = shouldShowSyncError(policy, isSyncInProgress); const accountingIntegrations = Object.values(CONST.POLICY.CONNECTIONS.NAME); diff --git a/src/pages/workspace/taxes/WorkspaceTaxesPage.tsx b/src/pages/workspace/taxes/WorkspaceTaxesPage.tsx index 427d35a482b6..e4f86dc55ed8 100644 --- a/src/pages/workspace/taxes/WorkspaceTaxesPage.tsx +++ b/src/pages/workspace/taxes/WorkspaceTaxesPage.tsx @@ -71,7 +71,7 @@ function WorkspaceTaxesPage({ const defaultExternalID = policy?.taxRates?.defaultExternalID; const foreignTaxDefault = policy?.taxRates?.foreignTaxDefault; const hasAccountingConnections = hasAccountingConnectionsPolicyUtils(policy); - const [connectionSyncProgress] = useOnyx(`${ONYXKEYS.COLLECTION.POLICY_CONNECTION_SYNC_PROGRESS}${policy?.id}`); + const [connectionSyncProgress] = useOnyx(`${ONYXKEYS.COLLECTION.POLICY_CONNECTION_SYNC_PROGRESS}${policy?.id}`, {canBeMissing: true}); const isSyncInProgress = isConnectionInProgress(connectionSyncProgress, policy); const hasSyncError = shouldShowSyncError(policy, isSyncInProgress); From e37340df29e5d0e25e883dec954c68675db324a4 Mon Sep 17 00:00:00 2001 From: thelullabyy Date: Tue, 22 Apr 2025 14:54:00 +0700 Subject: [PATCH 07/10] refactor code --- .../accounting/PolicyAccountingPage.tsx | 21 ++++++++++--------- .../categories/WorkspaceCategoriesPage.tsx | 5 ++--- .../WorkspaceReportFieldsPage.tsx | 5 ++--- .../workspace/tags/WorkspaceTagsPage.tsx | 5 ++--- .../workspace/taxes/WorkspaceTaxesPage.tsx | 5 ++--- 5 files changed, 19 insertions(+), 22 deletions(-) diff --git a/src/pages/workspace/accounting/PolicyAccountingPage.tsx b/src/pages/workspace/accounting/PolicyAccountingPage.tsx index bda997be9946..c2235edcd870 100644 --- a/src/pages/workspace/accounting/PolicyAccountingPage.tsx +++ b/src/pages/workspace/accounting/PolicyAccountingPage.tsx @@ -330,18 +330,19 @@ function PolicyAccountingPage({policy}: PolicyAccountingPageProps) { if (!connectedIntegration || !policyID) { return []; } - const shouldHideConfigurationOptions = isConnectionUnverified(policy, connectedIntegration); + const isConnectionVerified = !isConnectionUnverified(policy, connectedIntegration); const integrationData = getAccountingIntegrationData(connectedIntegration, policyID, translate, policy, undefined, undefined, undefined, canUseNetSuiteUSATax); const iconProps = integrationData?.icon ? {icon: integrationData.icon, iconType: CONST.ICON_TYPE_AVATAR} : {}; - let connectionMessage = ''; - if (isSyncInProgress && connectionSyncProgress?.stageInProgress) { - connectionMessage = translate('workspace.accounting.connections.syncStageName', {stage: connectionSyncProgress?.stageInProgress}); - } else if (shouldHideConfigurationOptions) { - connectionMessage = translate('workspace.accounting.notSync'); - } else { - connectionMessage = translate('workspace.accounting.lastSync', {relativeDate: datetimeToRelative}); - } + const connectionMessage = useMemo(() => { + if (isSyncInProgress && connectionSyncProgress?.stageInProgress) { + return translate('workspace.accounting.connections.syncStageName', {stage: connectionSyncProgress?.stageInProgress}); + } + if (isConnectionVerified) { + return translate('workspace.accounting.notSync'); + } + return translate('workspace.accounting.lastSync', {relativeDate: datetimeToRelative}); + }, [isSyncInProgress, isConnectionVerified, datetimeToRelative, translate, connectionSyncProgress?.stageInProgress]); const configurationOptions = [ { @@ -421,7 +422,7 @@ function PolicyAccountingPage({policy}: PolicyAccountingPageProps) { ), }, ...(isEmptyObject(integrationSpecificMenuItems) || shouldShowSynchronizationError || isEmptyObject(policy?.connections) ? [] : [integrationSpecificMenuItems]), - ...(isEmptyObject(policy?.connections) || shouldHideConfigurationOptions ? [] : configurationOptions), + ...(isEmptyObject(policy?.connections) || isConnectionVerified ? [] : configurationOptions), ]; }, [ policy, diff --git a/src/pages/workspace/categories/WorkspaceCategoriesPage.tsx b/src/pages/workspace/categories/WorkspaceCategoriesPage.tsx index 0d440f7766ec..c657ab880469 100644 --- a/src/pages/workspace/categories/WorkspaceCategoriesPage.tsx +++ b/src/pages/workspace/categories/WorkspaceCategoriesPage.tsx @@ -83,9 +83,8 @@ function WorkspaceCategoriesPage({route}: WorkspaceCategoriesPageProps) { const [connectionSyncProgress] = useOnyx(`${ONYXKEYS.COLLECTION.POLICY_CONNECTION_SYNC_PROGRESS}${policy?.id}`, {canBeMissing: true}); const isSyncInProgress = isConnectionInProgress(connectionSyncProgress, policy); const hasSyncError = shouldShowSyncError(policy, isSyncInProgress); - const accountingIntegrations = Object.values(CONST.POLICY.CONNECTIONS.NAME); - const connectedIntegration = getConnectedIntegration(policy, accountingIntegrations) ?? connectionSyncProgress?.connectionName; - const isConnectionVerified = connectedIntegration !== undefined ? !isConnectionUnverified(policy, connectedIntegration) : false; + const connectedIntegration = getConnectedIntegration(policy) ?? connectionSyncProgress?.connectionName; + const isConnectionVerified = connectedIntegration && !isConnectionUnverified(policy, connectedIntegration); const currentConnectionName = getCurrentConnectionName(policy); const isQuickSettingsFlow = !!backTo; const {canUseLeftHandBar} = usePermissions(); diff --git a/src/pages/workspace/reportFields/WorkspaceReportFieldsPage.tsx b/src/pages/workspace/reportFields/WorkspaceReportFieldsPage.tsx index dc76f08ca38a..e385646a1e98 100644 --- a/src/pages/workspace/reportFields/WorkspaceReportFieldsPage.tsx +++ b/src/pages/workspace/reportFields/WorkspaceReportFieldsPage.tsx @@ -87,9 +87,8 @@ function WorkspaceReportFieldsPage({ const [connectionSyncProgress] = useOnyx(`${ONYXKEYS.COLLECTION.POLICY_CONNECTION_SYNC_PROGRESS}${policy?.id}`, {canBeMissing: true}); const isSyncInProgress = isConnectionInProgress(connectionSyncProgress, policy); const hasSyncError = shouldShowSyncError(policy, isSyncInProgress); - const accountingIntegrations = Object.values(CONST.POLICY.CONNECTIONS.NAME); - const connectedIntegration = getConnectedIntegration(policy, accountingIntegrations) ?? connectionSyncProgress?.connectionName; - const isConnectionVerified = connectedIntegration !== undefined ? !isConnectionUnverified(policy, connectedIntegration) : false; + const connectedIntegration = getConnectedIntegration(policy) ?? connectionSyncProgress?.connectionName; + const isConnectionVerified = connectedIntegration && !isConnectionUnverified(policy, connectedIntegration); const currentConnectionName = getCurrentConnectionName(policy); const canSelectMultiple = !hasReportAccountingConnections && (isSmallScreenWidth ? selectionMode?.isEnabled : true); diff --git a/src/pages/workspace/tags/WorkspaceTagsPage.tsx b/src/pages/workspace/tags/WorkspaceTagsPage.tsx index b636a0d54c40..611fd8cae300 100644 --- a/src/pages/workspace/tags/WorkspaceTagsPage.tsx +++ b/src/pages/workspace/tags/WorkspaceTagsPage.tsx @@ -85,9 +85,8 @@ function WorkspaceTagsPage({route}: WorkspaceTagsPageProps) { const [connectionSyncProgress] = useOnyx(`${ONYXKEYS.COLLECTION.POLICY_CONNECTION_SYNC_PROGRESS}${policy?.id}`, {canBeMissing: true}); const isSyncInProgress = isConnectionInProgress(connectionSyncProgress, policy); const hasSyncError = shouldShowSyncError(policy, isSyncInProgress); - const accountingIntegrations = Object.values(CONST.POLICY.CONNECTIONS.NAME); - const connectedIntegration = getConnectedIntegration(policy, accountingIntegrations) ?? connectionSyncProgress?.connectionName; - const isConnectionVerified = connectedIntegration !== undefined ? !isConnectionUnverified(policy, connectedIntegration) : false; + const connectedIntegration = getConnectedIntegration(policy) ?? connectionSyncProgress?.connectionName; + const isConnectionVerified = connectedIntegration && !isConnectionUnverified(policy, connectedIntegration); const currentConnectionName = getCurrentConnectionName(policy); const [policyTagLists, isMultiLevelTags] = useMemo(() => [getTagLists(policyTags), isMultiLevelTagsPolicyUtils(policyTags)], [policyTags]); const canSelectMultiple = !isMultiLevelTags && (shouldUseNarrowLayout ? selectionMode?.isEnabled : true); diff --git a/src/pages/workspace/taxes/WorkspaceTaxesPage.tsx b/src/pages/workspace/taxes/WorkspaceTaxesPage.tsx index e4f86dc55ed8..3e50c1aa5950 100644 --- a/src/pages/workspace/taxes/WorkspaceTaxesPage.tsx +++ b/src/pages/workspace/taxes/WorkspaceTaxesPage.tsx @@ -75,9 +75,8 @@ function WorkspaceTaxesPage({ const isSyncInProgress = isConnectionInProgress(connectionSyncProgress, policy); const hasSyncError = shouldShowSyncError(policy, isSyncInProgress); - const accountingIntegrations = Object.values(CONST.POLICY.CONNECTIONS.NAME); - const connectedIntegration = getConnectedIntegration(policy, accountingIntegrations) ?? connectionSyncProgress?.connectionName; - const isConnectionVerified = connectedIntegration !== undefined ? !isConnectionUnverified(policy, connectedIntegration) : false; + const connectedIntegration = getConnectedIntegration(policy) ?? connectionSyncProgress?.connectionName; + const isConnectionVerified = connectedIntegration && !isConnectionUnverified(policy, connectedIntegration); const currentConnectionName = getCurrentConnectionName(policy); const canSelectMultiple = shouldUseNarrowLayout ? selectionMode?.isEnabled : true; From c13090bcaa0d0c30e222c09905f11f15211dadba Mon Sep 17 00:00:00 2001 From: thelullabyy Date: Tue, 22 Apr 2025 14:57:13 +0700 Subject: [PATCH 08/10] fix lint --- .../accounting/PolicyAccountingPage.tsx | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/src/pages/workspace/accounting/PolicyAccountingPage.tsx b/src/pages/workspace/accounting/PolicyAccountingPage.tsx index c2235edcd870..a0195e1888e7 100644 --- a/src/pages/workspace/accounting/PolicyAccountingPage.tsx +++ b/src/pages/workspace/accounting/PolicyAccountingPage.tsx @@ -334,15 +334,14 @@ function PolicyAccountingPage({policy}: PolicyAccountingPageProps) { const integrationData = getAccountingIntegrationData(connectedIntegration, policyID, translate, policy, undefined, undefined, undefined, canUseNetSuiteUSATax); const iconProps = integrationData?.icon ? {icon: integrationData.icon, iconType: CONST.ICON_TYPE_AVATAR} : {}; - const connectionMessage = useMemo(() => { - if (isSyncInProgress && connectionSyncProgress?.stageInProgress) { - return translate('workspace.accounting.connections.syncStageName', {stage: connectionSyncProgress?.stageInProgress}); - } - if (isConnectionVerified) { - return translate('workspace.accounting.notSync'); - } - return translate('workspace.accounting.lastSync', {relativeDate: datetimeToRelative}); - }, [isSyncInProgress, isConnectionVerified, datetimeToRelative, translate, connectionSyncProgress?.stageInProgress]); + let connectionMessage = ''; + if (isSyncInProgress && connectionSyncProgress?.stageInProgress) { + connectionMessage = translate('workspace.accounting.connections.syncStageName', {stage: connectionSyncProgress?.stageInProgress}); + } else if (isConnectionVerified) { + connectionMessage = translate('workspace.accounting.notSync'); + } else { + connectionMessage = translate('workspace.accounting.lastSync', {relativeDate: datetimeToRelative}); + } const configurationOptions = [ { From 0df633ed8df37aeda5031cb5aa5124e990947b5d Mon Sep 17 00:00:00 2001 From: thelullabyy Date: Wed, 23 Apr 2025 09:42:22 +0700 Subject: [PATCH 09/10] fix bug and refactor --- src/pages/workspace/accounting/PolicyAccountingPage.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/pages/workspace/accounting/PolicyAccountingPage.tsx b/src/pages/workspace/accounting/PolicyAccountingPage.tsx index a0195e1888e7..bcdeeb17c6af 100644 --- a/src/pages/workspace/accounting/PolicyAccountingPage.tsx +++ b/src/pages/workspace/accounting/PolicyAccountingPage.tsx @@ -334,7 +334,7 @@ function PolicyAccountingPage({policy}: PolicyAccountingPageProps) { const integrationData = getAccountingIntegrationData(connectedIntegration, policyID, translate, policy, undefined, undefined, undefined, canUseNetSuiteUSATax); const iconProps = integrationData?.icon ? {icon: integrationData.icon, iconType: CONST.ICON_TYPE_AVATAR} : {}; - let connectionMessage = ''; + let connectionMessage; if (isSyncInProgress && connectionSyncProgress?.stageInProgress) { connectionMessage = translate('workspace.accounting.connections.syncStageName', {stage: connectionSyncProgress?.stageInProgress}); } else if (isConnectionVerified) { @@ -421,7 +421,7 @@ function PolicyAccountingPage({policy}: PolicyAccountingPageProps) { ), }, ...(isEmptyObject(integrationSpecificMenuItems) || shouldShowSynchronizationError || isEmptyObject(policy?.connections) ? [] : [integrationSpecificMenuItems]), - ...(isEmptyObject(policy?.connections) || isConnectionVerified ? [] : configurationOptions), + ...(isEmptyObject(policy?.connections) || !isConnectionVerified ? [] : configurationOptions), ]; }, [ policy, From a969907032b8394e600118c46725f941de67a9c2 Mon Sep 17 00:00:00 2001 From: thelullabyy Date: Thu, 24 Apr 2025 17:01:36 +0700 Subject: [PATCH 10/10] fix message connection --- src/pages/workspace/accounting/PolicyAccountingPage.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/pages/workspace/accounting/PolicyAccountingPage.tsx b/src/pages/workspace/accounting/PolicyAccountingPage.tsx index bcdeeb17c6af..ab0ace26bc9d 100644 --- a/src/pages/workspace/accounting/PolicyAccountingPage.tsx +++ b/src/pages/workspace/accounting/PolicyAccountingPage.tsx @@ -337,7 +337,7 @@ function PolicyAccountingPage({policy}: PolicyAccountingPageProps) { let connectionMessage; if (isSyncInProgress && connectionSyncProgress?.stageInProgress) { connectionMessage = translate('workspace.accounting.connections.syncStageName', {stage: connectionSyncProgress?.stageInProgress}); - } else if (isConnectionVerified) { + } else if (!isConnectionVerified) { connectionMessage = translate('workspace.accounting.notSync'); } else { connectionMessage = translate('workspace.accounting.lastSync', {relativeDate: datetimeToRelative});