From 6df33c539861c75d866768ca4ab1d143dbc80f47 Mon Sep 17 00:00:00 2001 From: Vit Horacek Date: Fri, 31 May 2024 09:30:12 +0200 Subject: [PATCH 1/7] Fix types name typo --- src/pages/workspace/WorkspaceProfilePage.tsx | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/pages/workspace/WorkspaceProfilePage.tsx b/src/pages/workspace/WorkspaceProfilePage.tsx index be6143ff62407..c45270ba59e00 100644 --- a/src/pages/workspace/WorkspaceProfilePage.tsx +++ b/src/pages/workspace/WorkspaceProfilePage.tsx @@ -35,12 +35,12 @@ import withPolicy from './withPolicy'; import type {WithPolicyProps} from './withPolicy'; import WorkspacePageWithSections from './WorkspacePageWithSections'; -type WorkSpaceProfilePageOnyxProps = { +type WorkspaceProfilePageOnyxProps = { /** Constant, list of available currencies */ currencyList: OnyxEntry; }; -type WorkSpaceProfilePageProps = WithPolicyProps & WorkSpaceProfilePageOnyxProps; +type WorkSpaceProfilePageProps = WithPolicyProps & WorkspaceProfilePageOnyxProps; const parser = new ExpensiMark(); @@ -274,7 +274,7 @@ function WorkspaceProfilePage({policy, currencyList = {}, route}: WorkSpaceProfi WorkspaceProfilePage.displayName = 'WorkspaceProfilePage'; export default withPolicy( - withOnyx({ + withOnyx({ currencyList: {key: ONYXKEYS.CURRENCY_LIST}, })(WorkspaceProfilePage), ); From 725dbbc677b5c9da2009e9a3d398136e34c87130 Mon Sep 17 00:00:00 2001 From: Vit Horacek Date: Fri, 31 May 2024 11:14:55 +0200 Subject: [PATCH 2/7] Add a new open policy profile API command --- .../parameters/OpenPolicyProfilePageParams.ts | 5 ++++ src/libs/API/parameters/index.ts | 1 + src/libs/API/types.ts | 2 ++ src/libs/actions/Policy/Policy.ts | 8 ++++++ src/pages/workspace/WorkspaceInitialPage.tsx | 18 +++++++++++-- src/pages/workspace/WorkspaceProfilePage.tsx | 25 ++++++++++++++++--- 6 files changed, 54 insertions(+), 5 deletions(-) create mode 100644 src/libs/API/parameters/OpenPolicyProfilePageParams.ts diff --git a/src/libs/API/parameters/OpenPolicyProfilePageParams.ts b/src/libs/API/parameters/OpenPolicyProfilePageParams.ts new file mode 100644 index 0000000000000..55dce33a3dac4 --- /dev/null +++ b/src/libs/API/parameters/OpenPolicyProfilePageParams.ts @@ -0,0 +1,5 @@ +type OpenPolicyProfilePageParams = { + policyID: string; +}; + +export default OpenPolicyProfilePageParams; diff --git a/src/libs/API/parameters/index.ts b/src/libs/API/parameters/index.ts index c9e2e342c5ae3..4fe04fba4e97b 100644 --- a/src/libs/API/parameters/index.ts +++ b/src/libs/API/parameters/index.ts @@ -192,6 +192,7 @@ export type {default as OpenPolicyDistanceRatesPageParams} from './OpenPolicyDis export type {default as OpenPolicyTaxesPageParams} from './OpenPolicyTaxesPageParams'; export type {default as EnablePolicyTaxesParams} from './EnablePolicyTaxesParams'; export type {default as OpenPolicyMoreFeaturesPageParams} from './OpenPolicyMoreFeaturesPageParams'; +export type {default as OpenPolicyProfilePageParams} from './OpenPolicyProfilePageParams'; export type {default as CreatePolicyDistanceRateParams} from './CreatePolicyDistanceRateParams'; export type {default as SetPolicyDistanceRatesUnitParams} from './SetPolicyDistanceRatesUnitParams'; export type {default as SetPolicyDistanceRatesDefaultCategoryParams} from './SetPolicyDistanceRatesDefaultCategoryParams'; diff --git a/src/libs/API/types.ts b/src/libs/API/types.ts index 40deec85bc47c..f3bb917d7f54e 100644 --- a/src/libs/API/types.ts +++ b/src/libs/API/types.ts @@ -479,6 +479,7 @@ const READ_COMMANDS = { OPEN_POLICY_WORKFLOWS_PAGE: 'OpenPolicyWorkflowsPage', OPEN_POLICY_DISTANCE_RATES_PAGE: 'OpenPolicyDistanceRatesPage', OPEN_POLICY_MORE_FEATURES_PAGE: 'OpenPolicyMoreFeaturesPage', + OPEN_POLICY_PROFILE_PAGE: 'OpenPolicyProfilePage', OPEN_POLICY_ACCOUNTING_PAGE: 'OpenPolicyAccountingPage', SEARCH: 'Search', } as const; @@ -526,6 +527,7 @@ type ReadCommandParameters = { [READ_COMMANDS.OPEN_POLICY_WORKFLOWS_PAGE]: Parameters.OpenPolicyWorkflowsPageParams; [READ_COMMANDS.OPEN_POLICY_DISTANCE_RATES_PAGE]: Parameters.OpenPolicyDistanceRatesPageParams; [READ_COMMANDS.OPEN_POLICY_MORE_FEATURES_PAGE]: Parameters.OpenPolicyMoreFeaturesPageParams; + [READ_COMMANDS.OPEN_POLICY_PROFILE_PAGE]: Parameters.OpenPolicyProfilePageParams; [READ_COMMANDS.OPEN_POLICY_ACCOUNTING_PAGE]: Parameters.OpenPolicyAccountingPageParams; [READ_COMMANDS.SEARCH]: Parameters.SearchParams; }; diff --git a/src/libs/actions/Policy/Policy.ts b/src/libs/actions/Policy/Policy.ts index fc2a8ad7970e0..0be1d783ac3c6 100644 --- a/src/libs/actions/Policy/Policy.ts +++ b/src/libs/actions/Policy/Policy.ts @@ -26,6 +26,7 @@ import type { OpenDraftWorkspaceRequestParams, OpenPolicyDistanceRatesPageParams, OpenPolicyMoreFeaturesPageParams, + OpenPolicyProfilePageParams, OpenPolicyTaxesPageParams, OpenPolicyWorkflowsPageParams, OpenWorkspaceInvitePageParams, @@ -3588,6 +3589,12 @@ function openPolicyMoreFeaturesPage(policyID: string) { API.read(READ_COMMANDS.OPEN_POLICY_MORE_FEATURES_PAGE, params); } +function openPolicyProfilePage(policyID: string) { + const params: OpenPolicyProfilePageParams = {policyID}; + + API.read(READ_COMMANDS.OPEN_POLICY_PROFILE_PAGE, params); +} + function createPolicyDistanceRate(policyID: string, customUnitID: string, customUnitRate: Rate) { const optimisticData: OnyxUpdate[] = [ { @@ -4219,6 +4226,7 @@ export { enablePolicyWorkflows, openPolicyDistanceRatesPage, openPolicyMoreFeaturesPage, + openPolicyProfilePage, generateCustomUnitID, createPolicyDistanceRate, clearCreateDistanceRateItemAndError, diff --git a/src/pages/workspace/WorkspaceInitialPage.tsx b/src/pages/workspace/WorkspaceInitialPage.tsx index cbcc3c88fb2c6..fdfc4f02f40db 100644 --- a/src/pages/workspace/WorkspaceInitialPage.tsx +++ b/src/pages/workspace/WorkspaceInitialPage.tsx @@ -1,4 +1,4 @@ -import {useNavigationState} from '@react-navigation/native'; +import {useFocusEffect, useNavigationState} from '@react-navigation/native'; import type {StackScreenProps} from '@react-navigation/stack'; import React, {useCallback, useEffect, useMemo, useState} from 'react'; import {View} from 'react-native'; @@ -85,7 +85,7 @@ function dismissError(policyID: string, pendingAction: PendingAction | undefined } } -function WorkspaceInitialPage({policyDraft, policy: policyProp, reimbursementAccount, policyCategories}: WorkspaceInitialPageProps) { +function WorkspaceInitialPage({policyDraft, policy: policyProp, reimbursementAccount, policyCategories, route}: WorkspaceInitialPageProps) { const styles = useThemeStyles(); const policy = policyDraft?.id ? policyDraft : policyProp; const [isCurrencyModalOpen, setIsCurrencyModalOpen] = useState(false); @@ -132,6 +132,20 @@ function WorkspaceInitialPage({policyDraft, policy: policyProp, reimbursementAcc setIsCurrencyModalOpen(false); }, [policy?.outputCurrency, isCurrencyModalOpen]); + // We have the same focus effect in the WorkspaceProfilePage, this way we can get the policy data in narrow + // as well as in the wide layout when looking at policy settings. + const fetchPolicyData = useCallback(() => { + Policy.openPolicyProfilePage(route.params.policyID); + }, [route.params.policyID]); + + useNetwork({onReconnect: fetchPolicyData}); + + useFocusEffect( + useCallback(() => { + fetchPolicyData(); + }, [fetchPolicyData]), + ); + /** Call update workspace currency and hide the modal */ const confirmCurrencyChangeAndHideModal = useCallback(() => { Policy.updateGeneralSettings(policyID, policyName, CONST.CURRENCY.USD); diff --git a/src/pages/workspace/WorkspaceProfilePage.tsx b/src/pages/workspace/WorkspaceProfilePage.tsx index c45270ba59e00..d58cd568a9f86 100644 --- a/src/pages/workspace/WorkspaceProfilePage.tsx +++ b/src/pages/workspace/WorkspaceProfilePage.tsx @@ -1,3 +1,5 @@ +import {useFocusEffect} from '@react-navigation/native'; +import type {StackScreenProps} from '@react-navigation/stack'; import ExpensiMark from 'expensify-common/lib/ExpensiMark'; import React, {useCallback, useState} from 'react'; import type {ImageStyle, StyleProp} from 'react-native'; @@ -15,12 +17,14 @@ import OfflineWithFeedback from '@components/OfflineWithFeedback'; import Section from '@components/Section'; import useActiveWorkspace from '@hooks/useActiveWorkspace'; import useLocalize from '@hooks/useLocalize'; +import useNetwork from '@hooks/useNetwork'; import usePermissions from '@hooks/usePermissions'; import useThemeIllustrations from '@hooks/useThemeIllustrations'; import useThemeStyles from '@hooks/useThemeStyles'; import useWindowDimensions from '@hooks/useWindowDimensions'; import * as ErrorUtils from '@libs/ErrorUtils'; import Navigation from '@libs/Navigation/Navigation'; +import type {FullScreenNavigatorParamList} from '@libs/Navigation/types'; import * as PolicyUtils from '@libs/PolicyUtils'; import * as ReportUtils from '@libs/ReportUtils'; import StringUtils from '@libs/StringUtils'; @@ -29,6 +33,7 @@ import * as Policy from '@userActions/Policy/Policy'; import CONST from '@src/CONST'; import ONYXKEYS from '@src/ONYXKEYS'; import ROUTES from '@src/ROUTES'; +import type SCREENS from '@src/SCREENS'; import type * as OnyxTypes from '@src/types/onyx'; import {isEmptyObject} from '@src/types/utils/EmptyObject'; import withPolicy from './withPolicy'; @@ -40,11 +45,11 @@ type WorkspaceProfilePageOnyxProps = { currencyList: OnyxEntry; }; -type WorkSpaceProfilePageProps = WithPolicyProps & WorkspaceProfilePageOnyxProps; +type WorkspaceProfilePageProps = WithPolicyProps & WorkspaceProfilePageOnyxProps & StackScreenProps; const parser = new ExpensiMark(); -function WorkspaceProfilePage({policy, currencyList = {}, route}: WorkSpaceProfilePageProps) { +function WorkspaceProfilePage({policy, currencyList = {}, route}: WorkspaceProfilePageProps) { const styles = useThemeStyles(); const {translate} = useLocalize(); const {isSmallScreenWidth} = useWindowDimensions(); @@ -82,6 +87,20 @@ function WorkspaceProfilePage({policy, currencyList = {}, route}: WorkSpaceProfi const imageStyle: StyleProp = isSmallScreenWidth ? [styles.mhv12, styles.mhn5, styles.mbn5] : [styles.mhv8, styles.mhn8, styles.mbn5]; const shouldShowAddress = !readOnly || formattedAddress; + const fetchPolicyData = useCallback(() => { + Policy.openPolicyProfilePage(route.params.policyID); + }, [route.params.policyID]); + + useNetwork({onReconnect: fetchPolicyData}); + + // We have the same focus effect in the WorkspaceInitialPage, this way we can get the policy data in narrow + // as well as in the wide layout when looking at policy settings. + useFocusEffect( + useCallback(() => { + fetchPolicyData(); + }, [fetchPolicyData]), + ); + const DefaultAvatar = useCallback( () => ( ({ + withOnyx({ currencyList: {key: ONYXKEYS.CURRENCY_LIST}, })(WorkspaceProfilePage), ); From d3221c2eba0cc34b372f3b55545eb439cc708286 Mon Sep 17 00:00:00 2001 From: Vit Horacek Date: Fri, 31 May 2024 11:19:32 +0200 Subject: [PATCH 3/7] Add policy profile route to the policy routes --- src/pages/workspace/withPolicy.tsx | 1 + 1 file changed, 1 insertion(+) diff --git a/src/pages/workspace/withPolicy.tsx b/src/pages/workspace/withPolicy.tsx index 56ad756194a0d..efb8a710a649c 100644 --- a/src/pages/workspace/withPolicy.tsx +++ b/src/pages/workspace/withPolicy.tsx @@ -22,6 +22,7 @@ type PolicyRoute = RouteProp< NavigatorsParamList, | typeof SCREENS.REIMBURSEMENT_ACCOUNT_ROOT | typeof SCREENS.WORKSPACE.INITIAL + | typeof SCREENS.WORKSPACE.PROFILE | typeof SCREENS.WORKSPACE.BILLS | typeof SCREENS.WORKSPACE.MORE_FEATURES | typeof SCREENS.WORKSPACE.MEMBERS From a07d7c8c447cbf5ba888b8d89aa5748a480d33cd Mon Sep 17 00:00:00 2001 From: Vit Horacek Date: Fri, 31 May 2024 11:29:02 +0200 Subject: [PATCH 4/7] Add a new OpenPolicyInitialPage command --- src/libs/API/parameters/OpenPolicyInitialPageParams.ts | 5 +++++ src/libs/API/parameters/index.ts | 1 + src/libs/API/types.ts | 2 ++ src/libs/actions/Policy/Policy.ts | 8 ++++++++ src/pages/workspace/WorkspaceInitialPage.tsx | 4 +--- 5 files changed, 17 insertions(+), 3 deletions(-) create mode 100644 src/libs/API/parameters/OpenPolicyInitialPageParams.ts diff --git a/src/libs/API/parameters/OpenPolicyInitialPageParams.ts b/src/libs/API/parameters/OpenPolicyInitialPageParams.ts new file mode 100644 index 0000000000000..764abe9a6a779 --- /dev/null +++ b/src/libs/API/parameters/OpenPolicyInitialPageParams.ts @@ -0,0 +1,5 @@ +type OpenPolicyInitialPageParams = { + policyID: string; +}; + +export default OpenPolicyInitialPageParams; diff --git a/src/libs/API/parameters/index.ts b/src/libs/API/parameters/index.ts index 4fe04fba4e97b..ef1be1e3dc93e 100644 --- a/src/libs/API/parameters/index.ts +++ b/src/libs/API/parameters/index.ts @@ -193,6 +193,7 @@ export type {default as OpenPolicyTaxesPageParams} from './OpenPolicyTaxesPagePa export type {default as EnablePolicyTaxesParams} from './EnablePolicyTaxesParams'; export type {default as OpenPolicyMoreFeaturesPageParams} from './OpenPolicyMoreFeaturesPageParams'; export type {default as OpenPolicyProfilePageParams} from './OpenPolicyProfilePageParams'; +export type {default as OpenPolicyInitialPageParams} from './OpenPolicyInitialPageParams'; export type {default as CreatePolicyDistanceRateParams} from './CreatePolicyDistanceRateParams'; export type {default as SetPolicyDistanceRatesUnitParams} from './SetPolicyDistanceRatesUnitParams'; export type {default as SetPolicyDistanceRatesDefaultCategoryParams} from './SetPolicyDistanceRatesDefaultCategoryParams'; diff --git a/src/libs/API/types.ts b/src/libs/API/types.ts index f3bb917d7f54e..dbe244a9dfea7 100644 --- a/src/libs/API/types.ts +++ b/src/libs/API/types.ts @@ -480,6 +480,7 @@ const READ_COMMANDS = { OPEN_POLICY_DISTANCE_RATES_PAGE: 'OpenPolicyDistanceRatesPage', OPEN_POLICY_MORE_FEATURES_PAGE: 'OpenPolicyMoreFeaturesPage', OPEN_POLICY_PROFILE_PAGE: 'OpenPolicyProfilePage', + OPEN_POLICY_INITIAL_PAGE: 'OpenPolicyInitialPage', OPEN_POLICY_ACCOUNTING_PAGE: 'OpenPolicyAccountingPage', SEARCH: 'Search', } as const; @@ -528,6 +529,7 @@ type ReadCommandParameters = { [READ_COMMANDS.OPEN_POLICY_DISTANCE_RATES_PAGE]: Parameters.OpenPolicyDistanceRatesPageParams; [READ_COMMANDS.OPEN_POLICY_MORE_FEATURES_PAGE]: Parameters.OpenPolicyMoreFeaturesPageParams; [READ_COMMANDS.OPEN_POLICY_PROFILE_PAGE]: Parameters.OpenPolicyProfilePageParams; + [READ_COMMANDS.OPEN_POLICY_INITIAL_PAGE]: Parameters.OpenPolicyInitialPageParams; [READ_COMMANDS.OPEN_POLICY_ACCOUNTING_PAGE]: Parameters.OpenPolicyAccountingPageParams; [READ_COMMANDS.SEARCH]: Parameters.SearchParams; }; diff --git a/src/libs/actions/Policy/Policy.ts b/src/libs/actions/Policy/Policy.ts index 0be1d783ac3c6..adb57af601dbe 100644 --- a/src/libs/actions/Policy/Policy.ts +++ b/src/libs/actions/Policy/Policy.ts @@ -27,6 +27,7 @@ import type { OpenPolicyDistanceRatesPageParams, OpenPolicyMoreFeaturesPageParams, OpenPolicyProfilePageParams, + OpenPolicyInitialPageParams, OpenPolicyTaxesPageParams, OpenPolicyWorkflowsPageParams, OpenWorkspaceInvitePageParams, @@ -3595,6 +3596,12 @@ function openPolicyProfilePage(policyID: string) { API.read(READ_COMMANDS.OPEN_POLICY_PROFILE_PAGE, params); } +function openPolicyInitialPage(policyID: string) { + const params: OpenPolicyInitialPageParams = {policyID}; + + API.read(READ_COMMANDS.OPEN_POLICY_INITIAL_PAGE, params); +} + function createPolicyDistanceRate(policyID: string, customUnitID: string, customUnitRate: Rate) { const optimisticData: OnyxUpdate[] = [ { @@ -4227,6 +4234,7 @@ export { openPolicyDistanceRatesPage, openPolicyMoreFeaturesPage, openPolicyProfilePage, + openPolicyInitialPage, generateCustomUnitID, createPolicyDistanceRate, clearCreateDistanceRateItemAndError, diff --git a/src/pages/workspace/WorkspaceInitialPage.tsx b/src/pages/workspace/WorkspaceInitialPage.tsx index fdfc4f02f40db..a789a482135ed 100644 --- a/src/pages/workspace/WorkspaceInitialPage.tsx +++ b/src/pages/workspace/WorkspaceInitialPage.tsx @@ -132,10 +132,8 @@ function WorkspaceInitialPage({policyDraft, policy: policyProp, reimbursementAcc setIsCurrencyModalOpen(false); }, [policy?.outputCurrency, isCurrencyModalOpen]); - // We have the same focus effect in the WorkspaceProfilePage, this way we can get the policy data in narrow - // as well as in the wide layout when looking at policy settings. const fetchPolicyData = useCallback(() => { - Policy.openPolicyProfilePage(route.params.policyID); + Policy.openPolicyInitialPage(route.params.policyID); }, [route.params.policyID]); useNetwork({onReconnect: fetchPolicyData}); From b74985b5b7ebcdfaf6b17762034f0215e80b281d Mon Sep 17 00:00:00 2001 From: Vit Horacek Date: Fri, 31 May 2024 18:38:38 +0200 Subject: [PATCH 5/7] prettier --- src/libs/actions/Policy/Policy.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/libs/actions/Policy/Policy.ts b/src/libs/actions/Policy/Policy.ts index adb57af601dbe..880b6c062e13f 100644 --- a/src/libs/actions/Policy/Policy.ts +++ b/src/libs/actions/Policy/Policy.ts @@ -25,9 +25,9 @@ import type { LeavePolicyParams, OpenDraftWorkspaceRequestParams, OpenPolicyDistanceRatesPageParams, + OpenPolicyInitialPageParams, OpenPolicyMoreFeaturesPageParams, OpenPolicyProfilePageParams, - OpenPolicyInitialPageParams, OpenPolicyTaxesPageParams, OpenPolicyWorkflowsPageParams, OpenWorkspaceInvitePageParams, From 91775a0772d16053f6af85aecbe8fc376d9162a5 Mon Sep 17 00:00:00 2001 From: Vit Horacek Date: Thu, 20 Jun 2024 22:27:55 +0200 Subject: [PATCH 6/7] Remove remaining merge conflict --- src/libs/actions/Policy/Policy.ts | 3 --- 1 file changed, 3 deletions(-) diff --git a/src/libs/actions/Policy/Policy.ts b/src/libs/actions/Policy/Policy.ts index 54e70d6b5469a..0e490b6cbf977 100644 --- a/src/libs/actions/Policy/Policy.ts +++ b/src/libs/actions/Policy/Policy.ts @@ -17,11 +17,8 @@ import type { EnablePolicyWorkflowsParams, LeavePolicyParams, OpenDraftWorkspaceRequestParams, -<<<<<<< HEAD OpenPolicyDistanceRatesPageParams, OpenPolicyInitialPageParams, -======= ->>>>>>> main OpenPolicyMoreFeaturesPageParams, OpenPolicyProfilePageParams, OpenPolicyTaxesPageParams, From 39254014b270115a84053e6b00a722e2471683c2 Mon Sep 17 00:00:00 2001 From: Vit Horacek Date: Thu, 20 Jun 2024 22:33:54 +0200 Subject: [PATCH 7/7] Clean up --- src/libs/actions/Policy/Policy.ts | 128 ------------------------------ 1 file changed, 128 deletions(-) diff --git a/src/libs/actions/Policy/Policy.ts b/src/libs/actions/Policy/Policy.ts index 0e490b6cbf977..656a84fc50b70 100644 --- a/src/libs/actions/Policy/Policy.ts +++ b/src/libs/actions/Policy/Policy.ts @@ -17,7 +17,6 @@ import type { EnablePolicyWorkflowsParams, LeavePolicyParams, OpenDraftWorkspaceRequestParams, - OpenPolicyDistanceRatesPageParams, OpenPolicyInitialPageParams, OpenPolicyMoreFeaturesPageParams, OpenPolicyProfilePageParams, @@ -2841,133 +2840,6 @@ function openPolicyInitialPage(policyID: string) { API.read(READ_COMMANDS.OPEN_POLICY_INITIAL_PAGE, params); } -function createPolicyDistanceRate(policyID: string, customUnitID: string, customUnitRate: Rate) { - const optimisticData: OnyxUpdate[] = [ - { - onyxMethod: Onyx.METHOD.MERGE, - key: `${ONYXKEYS.COLLECTION.POLICY}${policyID}`, - value: { - customUnits: { - [customUnitID]: { - rates: { - [customUnitRate.customUnitRateID ?? '']: { - ...customUnitRate, - pendingAction: CONST.RED_BRICK_ROAD_PENDING_ACTION.ADD, - }, - }, - }, - }, - }, - }, - ]; - - const successData: OnyxUpdate[] = [ - { - onyxMethod: Onyx.METHOD.MERGE, - key: `${ONYXKEYS.COLLECTION.POLICY}${policyID}`, - value: { - customUnits: { - [customUnitID]: { - rates: { - [customUnitRate.customUnitRateID ?? '']: { - pendingAction: null, - }, - }, - }, - }, - }, - }, - ]; - - const failureData: OnyxUpdate[] = [ - { - onyxMethod: Onyx.METHOD.MERGE, - key: `${ONYXKEYS.COLLECTION.POLICY}${policyID}`, - value: { - customUnits: { - [customUnitID]: { - rates: { - [customUnitRate.customUnitRateID ?? '']: { - errors: ErrorUtils.getMicroSecondOnyxError('common.genericErrorMessage'), - }, - }, - }, - }, - }, - }, - ]; - - const params: CreatePolicyDistanceRateParams = { - policyID, - customUnitID, - customUnitRate: JSON.stringify(customUnitRate), - }; - - API.write(WRITE_COMMANDS.CREATE_POLICY_DISTANCE_RATE, params, {optimisticData, successData, failureData}); -} - -function clearCreateDistanceRateItemAndError(policyID: string, customUnitID: string, customUnitRateIDToClear: string) { - Onyx.merge(`${ONYXKEYS.COLLECTION.POLICY}${policyID}`, { - customUnits: { - [customUnitID]: { - rates: { - [customUnitRateIDToClear]: null, - }, - }, - }, - }); -} - -function clearPolicyDistanceRatesErrorFields(policyID: string, customUnitID: string, updatedErrorFields: ErrorFields) { - Onyx.merge(`${ONYXKEYS.COLLECTION.POLICY}${policyID}`, { - customUnits: { - [customUnitID]: { - errorFields: updatedErrorFields, - }, - }, - }); -} - -function clearDeleteDistanceRateError(policyID: string, customUnitID: string, rateID: string) { - Onyx.merge(`${ONYXKEYS.COLLECTION.POLICY}${policyID}`, { - customUnits: { - [customUnitID]: { - rates: { - [rateID]: { - errors: null, - }, - }, - }, - }, - }); -} - -function clearPolicyDistanceRateErrorFields(policyID: string, customUnitID: string, rateID: string, updatedErrorFields: ErrorFields) { - Onyx.merge(`${ONYXKEYS.COLLECTION.POLICY}${policyID}`, { - customUnits: { - [customUnitID]: { - rates: { - [rateID]: { - errorFields: updatedErrorFields, - }, - }, - }, - }, - }); -} - -/** - * Takes removes pendingFields and errorFields from a customUnit - */ -function removePendingFieldsFromCustomUnit(customUnit: CustomUnit): CustomUnit { - const cleanedCustomUnit = {...customUnit}; - - delete cleanedCustomUnit.pendingFields; - delete cleanedCustomUnit.errorFields; - - return cleanedCustomUnit; -} - function setPolicyCustomTaxName(policyID: string, customTaxName: string) { const policy = getPolicy(policyID); const originalCustomTaxName = policy?.taxRates?.name;