From b5e20ea4b0eb25bad1b584490fe8e6a5f1fcdab6 Mon Sep 17 00:00:00 2001 From: daledah Date: Wed, 2 Jul 2025 18:29:09 +0700 Subject: [PATCH 1/4] fix: enable report fields when impoing xero tracking categories --- .../xero/XeroMapTrackingCategoryConfigurationPage.tsx | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/pages/workspace/accounting/xero/XeroMapTrackingCategoryConfigurationPage.tsx b/src/pages/workspace/accounting/xero/XeroMapTrackingCategoryConfigurationPage.tsx index 62adb4727bca..afee7e44cebd 100644 --- a/src/pages/workspace/accounting/xero/XeroMapTrackingCategoryConfigurationPage.tsx +++ b/src/pages/workspace/accounting/xero/XeroMapTrackingCategoryConfigurationPage.tsx @@ -74,6 +74,12 @@ function XeroMapTrackingCategoryConfigurationPage({policy}: WithPolicyProps) { categoryId ? {[`${CONST.XERO_CONFIG.TRACKING_CATEGORY_PREFIX}${categoryId}`]: option.value} : {}, categoryId ? {[`${CONST.XERO_CONFIG.TRACKING_CATEGORY_PREFIX}${categoryId}`]: currentTrackingCategoryValue} : {}, ); + if (option.value === CONST.XERO_CONFIG.TRACKING_CATEGORY_OPTIONS.REPORT_FIELD) { + Policy.enablePolicyReportFields(policyID, true); + } + if (currentTrackingCategoryValue === CONST.XERO_CONFIG.TRACKING_CATEGORY_OPTIONS.REPORT_FIELD) { + Policy.enablePolicyReportFields(policyID, false); + } } Navigation.goBack(ROUTES.POLICY_ACCOUNTING_XERO_TRACKING_CATEGORIES.getRoute(policyID)); }, From acc1821c70eb94d13cffa5c927f62d08142257d5 Mon Sep 17 00:00:00 2001 From: daledah Date: Thu, 3 Jul 2025 00:07:59 +0700 Subject: [PATCH 2/4] fix: lint --- src/ROUTES.ts | 7 ++++++- ...roMapTrackingCategoryConfigurationPage.tsx | 21 +++++++++++-------- 2 files changed, 18 insertions(+), 10 deletions(-) diff --git a/src/ROUTES.ts b/src/ROUTES.ts index 15d7874dc603..382ba428f3b1 100644 --- a/src/ROUTES.ts +++ b/src/ROUTES.ts @@ -2105,7 +2105,12 @@ const ROUTES = { }, POLICY_ACCOUNTING_XERO_TRACKING_CATEGORIES: { route: 'settings/workspaces/:policyID/accounting/xero/import/tracking-categories', - getRoute: (policyID: string) => `settings/workspaces/${policyID}/accounting/xero/import/tracking-categories` as const, + getRoute: (policyID?: string) => { + if (!policyID) { + Log.warn('Invalid policyID is used to build the POLICY_ACCOUNTING_XERO_TRACKING_CATEGORIES route'); + } + return `settings/workspaces/${policyID}/accounting/xero/import/tracking-categories` as const; + }, }, POLICY_ACCOUNTING_XERO_TRACKING_CATEGORIES_MAP: { route: 'settings/workspaces/:policyID/accounting/xero/import/tracking-categories/mapping/:categoryId/:categoryName', diff --git a/src/pages/workspace/accounting/xero/XeroMapTrackingCategoryConfigurationPage.tsx b/src/pages/workspace/accounting/xero/XeroMapTrackingCategoryConfigurationPage.tsx index afee7e44cebd..84e148c8747d 100644 --- a/src/pages/workspace/accounting/xero/XeroMapTrackingCategoryConfigurationPage.tsx +++ b/src/pages/workspace/accounting/xero/XeroMapTrackingCategoryConfigurationPage.tsx @@ -6,13 +6,13 @@ import SelectionScreen from '@components/SelectionScreen'; import Text from '@components/Text'; import useLocalize from '@hooks/useLocalize'; import useThemeStyles from '@hooks/useThemeStyles'; -import * as Xero from '@libs/actions/connections/Xero'; -import * as ErrorUtils from '@libs/ErrorUtils'; +import {updateXeroMappings} from '@libs/actions/connections/Xero'; +import {clearXeroErrorField, enablePolicyReportFields} from '@libs/actions/Policy/Policy'; +import {getLatestErrorField} from '@libs/ErrorUtils'; import Navigation from '@libs/Navigation/Navigation'; import {isControlPolicy, settingsPendingAction} from '@libs/PolicyUtils'; import type {WithPolicyProps} from '@pages/workspace/withPolicy'; import withPolicyConnections from '@pages/workspace/withPolicyConnections'; -import * as Policy from '@userActions/Policy/Policy'; import CONST from '@src/CONST'; import type {TranslationPaths} from '@src/languages/types'; import ROUTES from '@src/ROUTES'; @@ -29,7 +29,7 @@ function XeroMapTrackingCategoryConfigurationPage({policy}: WithPolicyProps) { const styles = useThemeStyles(); const categoryId = params?.categoryId ?? ''; const categoryName = decodeURIComponent(params?.categoryName ?? ''); - const policyID = policy?.id ?? '-1'; + const policyID = policy?.id; const {config} = policy?.connections?.xero ?? {}; const {trackingCategories} = policy?.connections?.xero?.data ?? {}; const {mappings} = policy?.connections?.xero?.config ?? {}; @@ -69,16 +69,19 @@ function XeroMapTrackingCategoryConfigurationPage({policy}: WithPolicyProps) { Navigation.navigate(`${backToRoute}&categoryId=${categoryId}`); return; } - Xero.updateXeroMappings( + if (!policyID) { + return; + } + updateXeroMappings( policyID, categoryId ? {[`${CONST.XERO_CONFIG.TRACKING_CATEGORY_PREFIX}${categoryId}`]: option.value} : {}, categoryId ? {[`${CONST.XERO_CONFIG.TRACKING_CATEGORY_PREFIX}${categoryId}`]: currentTrackingCategoryValue} : {}, ); if (option.value === CONST.XERO_CONFIG.TRACKING_CATEGORY_OPTIONS.REPORT_FIELD) { - Policy.enablePolicyReportFields(policyID, true); + enablePolicyReportFields(policyID, true); } if (currentTrackingCategoryValue === CONST.XERO_CONFIG.TRACKING_CATEGORY_OPTIONS.REPORT_FIELD) { - Policy.enablePolicyReportFields(policyID, false); + enablePolicyReportFields(policyID, false); } } Navigation.goBack(ROUTES.POLICY_ACCOUNTING_XERO_TRACKING_CATEGORIES.getRoute(policyID)); @@ -101,9 +104,9 @@ function XeroMapTrackingCategoryConfigurationPage({policy}: WithPolicyProps) { headerTitleAlreadyTranslated={translate('workspace.xero.mapTrackingCategoryTo', {categoryName})} connectionName={CONST.POLICY.CONNECTIONS.NAME.XERO} pendingAction={settingsPendingAction([`${CONST.XERO_CONFIG.TRACKING_CATEGORY_PREFIX}${categoryId}`], config?.pendingFields)} - errors={ErrorUtils.getLatestErrorField(config ?? {}, `${CONST.XERO_CONFIG.TRACKING_CATEGORY_PREFIX}${categoryId}`)} + errors={getLatestErrorField(config ?? {}, `${CONST.XERO_CONFIG.TRACKING_CATEGORY_PREFIX}${categoryId}`)} errorRowStyles={[styles.ph5, styles.pv3]} - onClose={() => Policy.clearXeroErrorField(policyID, `${CONST.XERO_CONFIG.TRACKING_CATEGORY_PREFIX}${categoryId}`)} + onClose={() => clearXeroErrorField(policyID, `${CONST.XERO_CONFIG.TRACKING_CATEGORY_PREFIX}${categoryId}`)} shouldSingleExecuteRowSelect /> ); From 496f478c09a82479d293c4f2c2f989afa34ed4bb Mon Sep 17 00:00:00 2001 From: daledah Date: Mon, 14 Jul 2025 22:10:22 +0700 Subject: [PATCH 3/4] fix: more precise logics to enable/disable report fields --- .../xero/XeroMapTrackingCategoryConfigurationPage.tsx | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/src/pages/workspace/accounting/xero/XeroMapTrackingCategoryConfigurationPage.tsx b/src/pages/workspace/accounting/xero/XeroMapTrackingCategoryConfigurationPage.tsx index 84e148c8747d..f1109650b336 100644 --- a/src/pages/workspace/accounting/xero/XeroMapTrackingCategoryConfigurationPage.tsx +++ b/src/pages/workspace/accounting/xero/XeroMapTrackingCategoryConfigurationPage.tsx @@ -36,6 +36,9 @@ function XeroMapTrackingCategoryConfigurationPage({policy}: WithPolicyProps) { const currentTrackingCategory = trackingCategories?.find((category) => category.id === categoryId); const currentTrackingCategoryValue = currentTrackingCategory ? (mappings?.[`${CONST.XERO_CONFIG.TRACKING_CATEGORY_PREFIX}${currentTrackingCategory.id}`] ?? '') : ''; + const reportFieldTrackingCategories = Object.entries(mappings ?? {}).filter( + ([key, value]) => key.startsWith(CONST.XERO_CONFIG.TRACKING_CATEGORY_PREFIX) && value === CONST.XERO_CONFIG.TRACKING_CATEGORY_OPTIONS.REPORT_FIELD, + ); const optionsList = useMemo( () => @@ -77,16 +80,16 @@ function XeroMapTrackingCategoryConfigurationPage({policy}: WithPolicyProps) { categoryId ? {[`${CONST.XERO_CONFIG.TRACKING_CATEGORY_PREFIX}${categoryId}`]: option.value} : {}, categoryId ? {[`${CONST.XERO_CONFIG.TRACKING_CATEGORY_PREFIX}${categoryId}`]: currentTrackingCategoryValue} : {}, ); - if (option.value === CONST.XERO_CONFIG.TRACKING_CATEGORY_OPTIONS.REPORT_FIELD) { + if (!reportFieldTrackingCategories.length && option.value === CONST.XERO_CONFIG.TRACKING_CATEGORY_OPTIONS.REPORT_FIELD) { enablePolicyReportFields(policyID, true); } - if (currentTrackingCategoryValue === CONST.XERO_CONFIG.TRACKING_CATEGORY_OPTIONS.REPORT_FIELD) { + if (reportFieldTrackingCategories.length === 1 && currentTrackingCategoryValue === CONST.XERO_CONFIG.TRACKING_CATEGORY_OPTIONS.REPORT_FIELD) { enablePolicyReportFields(policyID, false); } } Navigation.goBack(ROUTES.POLICY_ACCOUNTING_XERO_TRACKING_CATEGORIES.getRoute(policyID)); }, - [categoryId, currentTrackingCategoryValue, policy, policyID], + [categoryId, currentTrackingCategoryValue, reportFieldTrackingCategories, policy, policyID], ); return ( From d51bc6b7ed3103f930fc8989d71012425009bb1b Mon Sep 17 00:00:00 2001 From: daledah Date: Tue, 15 Jul 2025 09:58:58 +0700 Subject: [PATCH 4/4] fix: incorrect route --- src/ROUTES.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/ROUTES.ts b/src/ROUTES.ts index a78b9795f057..cdea547eae9b 100644 --- a/src/ROUTES.ts +++ b/src/ROUTES.ts @@ -2126,7 +2126,7 @@ const ROUTES = { if (!policyID) { Log.warn('Invalid policyID is used to build the POLICY_ACCOUNTING_XERO_TRACKING_CATEGORIES route'); } - return `settings/workspaces/${policyID}/accounting/xero/import/tracking-categories` as const; + return `workspaces/${policyID}/accounting/xero/import/tracking-categories` as const; }, }, POLICY_ACCOUNTING_XERO_TRACKING_CATEGORIES_MAP: {