From abc71cee84f8cd4159814286cb313298a3a269cc Mon Sep 17 00:00:00 2001 From: Shubham Agrawal Date: Fri, 5 Dec 2025 18:44:55 +0530 Subject: [PATCH 1/3] Refactor: Deprecate getPersonalPolicy (part 1) --- src/ONYXKEYS.ts | 4 ++++ .../DistanceRequest/DistanceRequestFooter.tsx | 9 +++++---- .../TestDrive/Modal/EmployeeTestDriveModal.tsx | 3 +++ src/hooks/usePersonalPolicy.ts | 14 +++++--------- src/libs/PolicyUtils.ts | 1 + src/libs/actions/IOU.ts | 7 +++---- src/pages/Search/SearchPage.tsx | 1 + src/pages/Share/SubmitDetailsPage.tsx | 5 ++++- .../useAttachmentUploadValidation.ts | 3 +++ src/pages/iou/request/DistanceRequestStartPage.tsx | 5 ++++- src/pages/iou/request/IOURequestStartPage.tsx | 4 ++++ .../iou/request/step/IOURequestStepDistance.tsx | 6 +++--- .../iou/request/step/IOURequestStepDistanceMap.tsx | 6 +++--- .../settings/Preferences/PaymentCurrencyPage.tsx | 5 +++-- src/pages/settings/Preferences/PreferencesPage.tsx | 5 +++-- tests/actions/IOUTest.ts | 9 ++++++--- 16 files changed, 55 insertions(+), 32 deletions(-) diff --git a/src/ONYXKEYS.ts b/src/ONYXKEYS.ts index 341f9f4b3a76..51848dded795 100755 --- a/src/ONYXKEYS.ts +++ b/src/ONYXKEYS.ts @@ -132,6 +132,9 @@ const ONYXKEYS = { /** Whether the user is a member of a policy other than their personal */ HAS_NON_PERSONAL_POLICY: 'hasNonPersonalPolicy', + /** Key under which personal policy id is stored. Returned by OpenApp */ + PERSONAL_POLICY_ID: 'personalPolicyID', + /** NVP keys */ /** This NVP contains list of at most 5 recent attendees */ @@ -1309,6 +1312,7 @@ type OnyxValuesMapping = { [ONYXKEYS.NVP_REPORT_LAYOUT_GROUP_BY]: string; [ONYXKEYS.HAS_DENIED_CONTACT_IMPORT_PROMPT]: boolean | undefined; [ONYXKEYS.IS_OPEN_CONFIRM_NAVIGATE_EXPENSIFY_CLASSIC_MODAL_OPEN]: boolean; + [ONYXKEYS.PERSONAL_POLICY_ID]: string; }; type OnyxDerivedValuesMapping = { diff --git a/src/components/DistanceRequest/DistanceRequestFooter.tsx b/src/components/DistanceRequest/DistanceRequestFooter.tsx index 428980d4eb78..2737a7fb69b6 100644 --- a/src/components/DistanceRequest/DistanceRequestFooter.tsx +++ b/src/components/DistanceRequest/DistanceRequestFooter.tsx @@ -13,7 +13,6 @@ import usePolicy from '@hooks/usePolicy'; import useTheme from '@hooks/useTheme'; import useThemeStyles from '@hooks/useThemeStyles'; import DistanceRequestUtils from '@libs/DistanceRequestUtils'; -import {getPersonalPolicy} from '@libs/PolicyUtils'; import {getDistanceInMeters, getWaypointIndex, isCustomUnitRateIDForP2P} from '@libs/TransactionUtils'; import CONST from '@src/CONST'; import ONYXKEYS from '@src/ONYXKEYS'; @@ -42,15 +41,17 @@ function DistanceRequestFooter({waypoints, transaction, navigateToWaypointEditPa const theme = useTheme(); const styles = useThemeStyles(); const {translate} = useLocalize(); - const [activePolicyID] = useOnyx(ONYXKEYS.NVP_ACTIVE_POLICY_ID); + const [activePolicyID] = useOnyx(ONYXKEYS.NVP_ACTIVE_POLICY_ID, {canBeMissing: true}); + const [personalPolicyID] = useOnyx(ONYXKEYS.PERSONAL_POLICY_ID, {canBeMissing: true}); const activePolicy = usePolicy(activePolicyID); - const [mapboxAccessToken] = useOnyx(ONYXKEYS.MAPBOX_ACCESS_TOKEN); + const personalPolicy = usePolicy(personalPolicyID); + const [mapboxAccessToken] = useOnyx(ONYXKEYS.MAPBOX_ACCESS_TOKEN, {canBeMissing: true}); const numberOfWaypoints = Object.keys(waypoints ?? {}).length; const numberOfFilledWaypoints = Object.values(waypoints ?? {}).filter((waypoint) => waypoint?.address).length; const lastWaypointIndex = numberOfWaypoints - 1; const defaultMileageRate = DistanceRequestUtils.getDefaultMileageRate(policy ?? activePolicy); - const policyCurrency = (policy ?? activePolicy)?.outputCurrency ?? getPersonalPolicy()?.outputCurrency ?? CONST.CURRENCY.USD; + const policyCurrency = (policy ?? activePolicy ?? personalPolicy)?.outputCurrency ?? CONST.CURRENCY.USD; const mileageRate = isCustomUnitRateIDForP2P(transaction) ? DistanceRequestUtils.getRateForP2P(policyCurrency, transaction) : defaultMileageRate; const {unit} = mileageRate ?? {}; diff --git a/src/components/TestDrive/Modal/EmployeeTestDriveModal.tsx b/src/components/TestDrive/Modal/EmployeeTestDriveModal.tsx index 91990a5dd2f1..37ca141a6c0e 100644 --- a/src/components/TestDrive/Modal/EmployeeTestDriveModal.tsx +++ b/src/components/TestDrive/Modal/EmployeeTestDriveModal.tsx @@ -9,6 +9,7 @@ import useCurrentUserPersonalDetails from '@hooks/useCurrentUserPersonalDetails' import useLocalize from '@hooks/useLocalize'; import useOnboardingMessages from '@hooks/useOnboardingMessages'; import useOnyx from '@hooks/useOnyx'; +import usePersonalPolicy from '@hooks/usePersonalPolicy'; import { initMoneyRequest, setMoneyRequestAmount, @@ -45,6 +46,7 @@ function EmployeeTestDriveModal() { const [isLoading, setIsLoading] = useState(false); const {testDrive} = useOnboardingMessages(); const currentUserPersonalDetails = useCurrentUserPersonalDetails(); + const personalPolicy = usePersonalPolicy(); const onBossEmailChange = useCallback((value: string) => { setBossEmail(value); @@ -72,6 +74,7 @@ function EmployeeTestDriveModal() { initMoneyRequest({ reportID, + personalPolicy, isFromGlobalCreate: false, newIouRequestType: CONST.IOU.REQUEST_TYPE.SCAN, report, diff --git a/src/hooks/usePersonalPolicy.ts b/src/hooks/usePersonalPolicy.ts index 911c3be214cf..2b89159304ca 100644 --- a/src/hooks/usePersonalPolicy.ts +++ b/src/hooks/usePersonalPolicy.ts @@ -1,25 +1,21 @@ -import {createPoliciesSelector} from '@selectors/Policy'; -import {useMemo} from 'react'; -import type {OnyxCollection, OnyxEntry} from 'react-native-onyx'; -import CONST from '@src/CONST'; +import type {OnyxEntry} from 'react-native-onyx'; import ONYXKEYS from '@src/ONYXKEYS'; import type Policy from '@src/types/onyx/Policy'; import useOnyx from './useOnyx'; -type PolicySelector = Pick; +type PolicySelector = Pick; const policySelector = (policy: OnyxEntry): PolicySelector => (policy && { id: policy.id, type: policy.type, autoReporting: policy.autoReporting, + outputCurrency: policy.outputCurrency, }) as PolicySelector; -const allPoliciesSelector = (policies: OnyxCollection) => createPoliciesSelector(policies, policySelector); - function usePersonalPolicy() { - const [allPolicies] = useOnyx(ONYXKEYS.COLLECTION.POLICY, {selector: allPoliciesSelector, canBeMissing: true}); - const personalPolicy = useMemo(() => Object.values(allPolicies ?? {}).find((policy) => policy?.type === CONST.POLICY.TYPE.PERSONAL), [allPolicies]); + const [personalPolicyID] = useOnyx(ONYXKEYS.PERSONAL_POLICY_ID, {canBeMissing: true}); + const [personalPolicy] = useOnyx(`${ONYXKEYS.COLLECTION.POLICY}${personalPolicyID}`, {selector: policySelector, canBeMissing: true}); return personalPolicy; } diff --git a/src/libs/PolicyUtils.ts b/src/libs/PolicyUtils.ts index 44140eaa44fc..9f8e6af33622 100644 --- a/src/libs/PolicyUtils.ts +++ b/src/libs/PolicyUtils.ts @@ -838,6 +838,7 @@ function getReimburserAccountID(policy: OnyxEntry): number { return reimburserEmail ? (getAccountIDsByLogins([reimburserEmail]).at(0) ?? -1) : -1; } +/** @deprecated Please use ONYXKEYS.PERSONAL_POLICY_ID to find the personal policyID */ function getPersonalPolicy() { return Object.values(allPolicies ?? {}).find((policy) => policy?.type === CONST.POLICY.TYPE.PERSONAL); } diff --git a/src/libs/actions/IOU.ts b/src/libs/actions/IOU.ts index 7a53c35023ca..5133418c0d9a 100644 --- a/src/libs/actions/IOU.ts +++ b/src/libs/actions/IOU.ts @@ -87,7 +87,6 @@ import { getMemberAccountIDsForWorkspace, getPerDiemCustomUnit, getPerDiemRateCustomUnitRate, - getPersonalPolicy, getPolicy, getSubmitToAccountID, hasDependentTags, @@ -292,6 +291,7 @@ type BaseTransactionParams = { type InitMoneyRequestParams = { reportID: string; policy?: OnyxEntry; + personalPolicy: Pick | undefined; isFromGlobalCreate?: boolean; currentIouRequestType?: IOURequestType | undefined; newIouRequestType: IOURequestType | undefined; @@ -1061,6 +1061,7 @@ function getReportPreviewAction(chatReportID: string | undefined, iouReportID: s function initMoneyRequest({ reportID, policy, + personalPolicy, isFromGlobalCreate, currentIouRequestType, newIouRequestType, @@ -1070,10 +1071,8 @@ function initMoneyRequest({ lastSelectedDistanceRates, currentUserPersonalDetails, }: InitMoneyRequestParams) { + console.trace('initMoneyRequest', {reportID, currentIouRequestType, newIouRequestType}); // Generate a brand new transactionID - // This will be fixed as part of https://github.com/Expensify/Expensify/issues/507850 - // eslint-disable-next-line @typescript-eslint/no-deprecated - const personalPolicy = getPolicy(getPersonalPolicy()?.id); const newTransactionID = CONST.IOU.OPTIMISTIC_TRANSACTION_ID; const currency = policy?.outputCurrency ?? personalPolicy?.outputCurrency ?? CONST.CURRENCY.USD; diff --git a/src/pages/Search/SearchPage.tsx b/src/pages/Search/SearchPage.tsx index 4c6cd65d4fa9..898412190a32 100644 --- a/src/pages/Search/SearchPage.tsx +++ b/src/pages/Search/SearchPage.tsx @@ -821,6 +821,7 @@ function SearchPage({route}: SearchPageProps) { const initialTransaction = initMoneyRequest({ isFromGlobalCreate: true, reportID: newReportID, + personalPolicy, newIouRequestType: CONST.IOU.REQUEST_TYPE.SCAN, report: newReport, parentReport: newParentReport, diff --git a/src/pages/Share/SubmitDetailsPage.tsx b/src/pages/Share/SubmitDetailsPage.tsx index c0fdefff299d..be08e97975d2 100644 --- a/src/pages/Share/SubmitDetailsPage.tsx +++ b/src/pages/Share/SubmitDetailsPage.tsx @@ -12,6 +12,7 @@ import useCurrentUserPersonalDetails from '@hooks/useCurrentUserPersonalDetails' import useLocalize from '@hooks/useLocalize'; import useOnyx from '@hooks/useOnyx'; import usePermissions from '@hooks/usePermissions'; +import usePersonalPolicy from '@hooks/usePersonalPolicy'; import useReportIsArchived from '@hooks/useReportIsArchived'; import useThemeStyles from '@hooks/useThemeStyles'; import type {GpsPoint} from '@libs/actions/IOU'; @@ -62,6 +63,7 @@ function SubmitDetailsPage({ const [transactionViolations] = useOnyx(ONYXKEYS.COLLECTION.TRANSACTION_VIOLATIONS, {canBeMissing: true}); const currentUserPersonalDetails = useCurrentUserPersonalDetails(); + const personalPolicy = usePersonalPolicy(); const [startLocationPermissionFlow, setStartLocationPermissionFlow] = useState(false); const [errorTitle, setErrorTitle] = useState(undefined); @@ -86,6 +88,7 @@ function SubmitDetailsPage({ initMoneyRequest({ reportID: reportOrAccountID, policy, + personalPolicy, currentIouRequestType: CONST.IOU.REQUEST_TYPE.SCAN, newIouRequestType: CONST.IOU.REQUEST_TYPE.SCAN, report, @@ -93,7 +96,7 @@ function SubmitDetailsPage({ currentDate, currentUserPersonalDetails, }); - }, [reportOrAccountID, policy, report, parentReport, currentDate, currentUserPersonalDetails]); + }, [reportOrAccountID, policy, personalPolicy, report, parentReport, currentDate, currentUserPersonalDetails]); const selectedParticipants = unknownUserDetails ? [unknownUserDetails] : getMoneyRequestParticipantsFromReport(report, currentUserPersonalDetails.accountID); const participants = selectedParticipants.map((participant) => diff --git a/src/pages/home/report/ReportActionCompose/useAttachmentUploadValidation.ts b/src/pages/home/report/ReportActionCompose/useAttachmentUploadValidation.ts index 658ed0090781..847af2dfbb81 100644 --- a/src/pages/home/report/ReportActionCompose/useAttachmentUploadValidation.ts +++ b/src/pages/home/report/ReportActionCompose/useAttachmentUploadValidation.ts @@ -3,6 +3,7 @@ import type {OnyxEntry} from 'react-native-onyx'; import useFilesValidation from '@hooks/useFilesValidation'; import useLocalize from '@hooks/useLocalize'; import useOnyx from '@hooks/useOnyx'; +import usePersonalPolicy from '@hooks/usePersonalPolicy'; import {cleanFileObject, cleanFileObjectName, getFilesFromClipboardEvent} from '@libs/fileDownload/FileUtils'; import {isSelfDM} from '@libs/ReportUtils'; import {shouldRestrictUserBillableActions} from '@libs/SubscriptionUtils'; @@ -51,6 +52,7 @@ function useAttachmentUploadValidation({ }: AttachmentUploadValidationProps) { const {translate} = useLocalize(); const [policyCategories] = useOnyx(`${ONYXKEYS.COLLECTION.POLICY_CATEGORIES}${policy?.id}`, {canBeMissing: true}); + const personalPolicy = usePersonalPolicy(); const reportAttachmentsContext = useContext(AttachmentModalContext); const showAttachmentModalScreen = useCallback( @@ -89,6 +91,7 @@ function useAttachmentUploadValidation({ const initialTransaction = initMoneyRequest({ reportID, + personalPolicy, newIouRequestType: CONST.IOU.REQUEST_TYPE.SCAN, report, parentReport: newParentReport, diff --git a/src/pages/iou/request/DistanceRequestStartPage.tsx b/src/pages/iou/request/DistanceRequestStartPage.tsx index 3fd94bb41edd..a679d7f33a60 100644 --- a/src/pages/iou/request/DistanceRequestStartPage.tsx +++ b/src/pages/iou/request/DistanceRequestStartPage.tsx @@ -8,6 +8,7 @@ import TabSelector from '@components/TabSelector/TabSelector'; import useCurrentUserPersonalDetails from '@hooks/useCurrentUserPersonalDetails'; import useLocalize from '@hooks/useLocalize'; import useOnyx from '@hooks/useOnyx'; +import usePersonalPolicy from '@hooks/usePersonalPolicy'; import usePolicy from '@hooks/usePolicy'; import usePrevious from '@hooks/usePrevious'; import useThemeStyles from '@hooks/useThemeStyles'; @@ -58,6 +59,7 @@ function DistanceRequestStartPage({ const [currentDate] = useOnyx(ONYXKEYS.CURRENT_DATE, {canBeMissing: true}); const currentUserPersonalDetails = useCurrentUserPersonalDetails(); + const personalPolicy = usePersonalPolicy(); const tabTitles = { [CONST.IOU.TYPE.REQUEST]: translate('iou.trackDistance'), @@ -101,6 +103,7 @@ function DistanceRequestStartPage({ initMoneyRequest({ reportID, policy, + personalPolicy, isFromGlobalCreate, currentIouRequestType: transaction?.iouRequestType, newIouRequestType: newIOUType, @@ -111,7 +114,7 @@ function DistanceRequestStartPage({ currentUserPersonalDetails, }); }, - [transaction?.iouRequestType, reportID, policy, isFromGlobalCreate, report, parentReport, currentDate, lastSelectedDistanceRates, currentUserPersonalDetails], + [transaction?.iouRequestType, reportID, policy, personalPolicy, isFromGlobalCreate, report, parentReport, currentDate, lastSelectedDistanceRates, currentUserPersonalDetails], ); // Clear out the temporary expense if the reportID in the URL has changed from the transaction's reportID. diff --git a/src/pages/iou/request/IOURequestStartPage.tsx b/src/pages/iou/request/IOURequestStartPage.tsx index 0dc475b48dc8..c3fca0973453 100644 --- a/src/pages/iou/request/IOURequestStartPage.tsx +++ b/src/pages/iou/request/IOURequestStartPage.tsx @@ -14,6 +14,7 @@ import useLocalize from '@hooks/useLocalize'; import useNetwork from '@hooks/useNetwork'; import useOnyx from '@hooks/useOnyx'; import usePermissions from '@hooks/usePermissions'; +import usePersonalPolicy from '@hooks/usePersonalPolicy'; import usePolicy from '@hooks/usePolicy'; import usePrevious from '@hooks/usePrevious'; import useThemeStyles from '@hooks/useThemeStyles'; @@ -66,6 +67,7 @@ function IOURequestStartPage({ const {translate} = useLocalize(); const shouldUseTab = iouType !== CONST.IOU.TYPE.SEND && iouType !== CONST.IOU.TYPE.PAY && iouType !== CONST.IOU.TYPE.INVOICE; const [isDraggingOver, setIsDraggingOver] = useState(false); + const personalPolicy = usePersonalPolicy(); const [report] = useOnyx(`${ONYXKEYS.COLLECTION.REPORT}${reportID}`, {canBeMissing: true}); const [parentReport] = useOnyx(`${ONYXKEYS.COLLECTION.REPORT}${report?.parentReportID}`, {canBeMissing: true}); const policy = usePolicy(report?.policyID); @@ -147,6 +149,7 @@ function IOURequestStartPage({ initMoneyRequest({ reportID, policy, + personalPolicy, isFromGlobalCreate: transaction?.isFromGlobalCreate ?? isFromGlobalCreate, currentIouRequestType: transaction?.iouRequestType, newIouRequestType: newIOUType, @@ -162,6 +165,7 @@ function IOURequestStartPage({ transaction?.isFromGlobalCreate, reportID, policy, + personalPolicy, isFromGlobalCreate, report, parentReport, diff --git a/src/pages/iou/request/step/IOURequestStepDistance.tsx b/src/pages/iou/request/step/IOURequestStepDistance.tsx index 688e36f090fd..7ebd644556a5 100644 --- a/src/pages/iou/request/step/IOURequestStepDistance.tsx +++ b/src/pages/iou/request/step/IOURequestStepDistance.tsx @@ -49,7 +49,7 @@ import {getLatestErrorField} from '@libs/ErrorUtils'; import {navigateToParticipantPage, shouldUseTransactionDraft} from '@libs/IOUUtils'; import Navigation from '@libs/Navigation/Navigation'; import {getParticipantsOption, getReportOption} from '@libs/OptionsListUtils'; -import {getPersonalPolicy, getPolicy, isPaidGroupPolicy} from '@libs/PolicyUtils'; +import {getPolicy, isPaidGroupPolicy} from '@libs/PolicyUtils'; import {getPolicyExpenseChat, isArchivedReport, isPolicyExpenseChat as isPolicyExpenseChatUtil} from '@libs/ReportUtils'; import {shouldRestrictUserBillableActions} from '@libs/SubscriptionUtils'; import {getDistanceInMeters, getRateID, getRequestType, getValidWaypoints, hasRoute, isCustomUnitRateIDForP2P} from '@libs/TransactionUtils'; @@ -165,7 +165,7 @@ function IOURequestStepDistance({ // This will be fixed as part of https://github.com/Expensify/Expensify/issues/507850 // eslint-disable-next-line @typescript-eslint/no-deprecated const IOUpolicy = getPolicy(report?.policyID ?? IOUpolicyID); - const policyCurrency = policy?.outputCurrency ?? getPersonalPolicy()?.outputCurrency ?? CONST.CURRENCY.USD; + const policyCurrency = policy?.outputCurrency ?? personalPolicy?.outputCurrency ?? CONST.CURRENCY.USD; const mileageRates = DistanceRequestUtils.getMileageRates(IOUpolicy); const defaultMileageRate = DistanceRequestUtils.getDefaultMileageRate(IOUpolicy); @@ -185,7 +185,7 @@ function IOURequestStepDistance({ setSplitShares(transaction, amount, currency ?? '', participantAccountIDs ?? []); } }, - [report, allReports, transaction, transactionID, isSplitRequest, policy?.outputCurrency, reportID, customUnitRateID], + [report, allReports, transaction, transactionID, isSplitRequest, policy?.outputCurrency, reportID, customUnitRateID, personalPolicy?.outputCurrency], ); // For quick button actions, we'll skip the confirmation page unless the report is archived or this is a workspace diff --git a/src/pages/iou/request/step/IOURequestStepDistanceMap.tsx b/src/pages/iou/request/step/IOURequestStepDistanceMap.tsx index 39d642525d04..64bdddff1c8d 100644 --- a/src/pages/iou/request/step/IOURequestStepDistanceMap.tsx +++ b/src/pages/iou/request/step/IOURequestStepDistanceMap.tsx @@ -49,7 +49,7 @@ import {getLatestErrorField} from '@libs/ErrorUtils'; import {navigateToParticipantPage, shouldUseTransactionDraft} from '@libs/IOUUtils'; import Navigation from '@libs/Navigation/Navigation'; import {getParticipantsOption, getReportOption} from '@libs/OptionsListUtils'; -import {getPersonalPolicy, getPolicy, isPaidGroupPolicy} from '@libs/PolicyUtils'; +import {getPolicy, isPaidGroupPolicy} from '@libs/PolicyUtils'; import {getPolicyExpenseChat, isArchivedReport, isPolicyExpenseChat as isPolicyExpenseChatUtil} from '@libs/ReportUtils'; import {shouldRestrictUserBillableActions} from '@libs/SubscriptionUtils'; import {getDistanceInMeters, getRateID, getRequestType, getValidWaypoints, hasRoute, isCustomUnitRateIDForP2P} from '@libs/TransactionUtils'; @@ -167,7 +167,7 @@ function IOURequestStepDistanceMap({ // This will be fixed as part of https://github.com/Expensify/Expensify/issues/507850 // eslint-disable-next-line @typescript-eslint/no-deprecated const IOUpolicy = getPolicy(report?.policyID ?? IOUpolicyID); - const policyCurrency = policy?.outputCurrency ?? getPersonalPolicy()?.outputCurrency ?? CONST.CURRENCY.USD; + const policyCurrency = policy?.outputCurrency ?? personalPolicy?.outputCurrency ?? CONST.CURRENCY.USD; const mileageRates = DistanceRequestUtils.getMileageRates(IOUpolicy); const defaultMileageRate = DistanceRequestUtils.getDefaultMileageRate(IOUpolicy); @@ -187,7 +187,7 @@ function IOURequestStepDistanceMap({ setSplitShares(transaction, amount, currency ?? '', participantAccountIDs ?? []); } }, - [report, allReports, transaction, transactionID, isSplitRequest, policy?.outputCurrency, reportID, customUnitRateID], + [report, allReports, transaction, transactionID, isSplitRequest, policy?.outputCurrency, reportID, customUnitRateID, personalPolicy?.outputCurrency], ); // For quick button actions, we'll skip the confirmation page unless the report is archived or this is a workspace diff --git a/src/pages/settings/Preferences/PaymentCurrencyPage.tsx b/src/pages/settings/Preferences/PaymentCurrencyPage.tsx index 3aff6b83cbdd..f5b78ebc0d77 100644 --- a/src/pages/settings/Preferences/PaymentCurrencyPage.tsx +++ b/src/pages/settings/Preferences/PaymentCurrencyPage.tsx @@ -5,18 +5,19 @@ import HeaderWithBackButton from '@components/HeaderWithBackButton'; import ScreenWrapper from '@components/ScreenWrapper'; import Text from '@components/Text'; import useLocalize from '@hooks/useLocalize'; +import useOnyx from '@hooks/useOnyx'; import usePolicy from '@hooks/usePolicy'; import useThemeStyles from '@hooks/useThemeStyles'; import {updateGeneralSettings} from '@libs/actions/Policy/Policy'; import Navigation from '@libs/Navigation/Navigation'; -import {getPersonalPolicy} from '@libs/PolicyUtils'; import CONST from '@src/CONST'; +import ONYXKEYS from '@src/ONYXKEYS'; import KeyboardUtils from '@src/utils/keyboard'; function PaymentCurrencyPage() { const styles = useThemeStyles(); const {translate} = useLocalize(); - const personalPolicyID = getPersonalPolicy()?.id; + const [personalPolicyID] = useOnyx(ONYXKEYS.PERSONAL_POLICY_ID, {canBeMissing: true}); const personalPolicy = usePolicy(personalPolicyID); const paymentCurrency = personalPolicy?.outputCurrency ?? CONST.CURRENCY.USD; diff --git a/src/pages/settings/Preferences/PreferencesPage.tsx b/src/pages/settings/Preferences/PreferencesPage.tsx index 2f189d4fb8b6..59ada6422e70 100755 --- a/src/pages/settings/Preferences/PreferencesPage.tsx +++ b/src/pages/settings/Preferences/PreferencesPage.tsx @@ -18,7 +18,6 @@ import {getCurrencySymbol} from '@libs/CurrencyUtils'; import getPlatform from '@libs/getPlatform'; import type Platform from '@libs/getPlatform/types'; import Navigation from '@libs/Navigation/Navigation'; -import {getPersonalPolicy} from '@libs/PolicyUtils'; import colors from '@styles/theme/colors'; import CONST from '@src/CONST'; import {isFullySupportedLocale, LOCALE_TO_LANGUAGE_STRING} from '@src/CONST/LOCALES'; @@ -38,7 +37,9 @@ function PreferencesPage() { const [account] = useOnyx(ONYXKEYS.ACCOUNT, {canBeMissing: false}); const [preferredTheme] = useOnyx(ONYXKEYS.PREFERRED_THEME, {canBeMissing: true}); const [preferredLocale] = useOnyx(ONYXKEYS.NVP_PREFERRED_LOCALE, {canBeMissing: true}); - const personalPolicy = usePolicy(getPersonalPolicy()?.id); + const [personalPolicyID] = useOnyx(ONYXKEYS.PERSONAL_POLICY_ID, {canBeMissing: true}); + + const personalPolicy = usePolicy(personalPolicyID); const paymentCurrency = personalPolicy?.outputCurrency ?? CONST.CURRENCY.USD; diff --git a/tests/actions/IOUTest.ts b/tests/actions/IOUTest.ts index 25c0b659b772..4539b02b51aa 100644 --- a/tests/actions/IOUTest.ts +++ b/tests/actions/IOUTest.ts @@ -6922,8 +6922,9 @@ describe('actions/IOU', () => { policyID: '1', managerID: CARLOS_ACCOUNT_ID, }; - const fakePersonalPolicy: Policy = { - ...createRandomPolicy(2), + const fakePersonalPolicy: Pick = { + id: '2', + autoReporting: true, type: CONST.POLICY.TYPE.PERSONAL, outputCurrency: 'NZD', }; @@ -6958,7 +6959,6 @@ describe('actions/IOU', () => { await Onyx.merge(`${ONYXKEYS.CURRENT_DATE}`, currentDate); await Onyx.merge(`${ONYXKEYS.COLLECTION.REPORT}${fakeReport.reportID}`, fakeReport); await Onyx.merge(`${ONYXKEYS.COLLECTION.POLICY}${fakePolicy.id}`, fakePolicy); - await Onyx.merge(`${ONYXKEYS.COLLECTION.POLICY}${fakePersonalPolicy.id}`, fakePersonalPolicy); return waitForBatchedUpdates(); }); @@ -6968,6 +6968,7 @@ describe('actions/IOU', () => { initMoneyRequest({ reportID: fakeReport.reportID, policy: fakePolicy, + personalPolicy: fakePersonalPolicy, isFromGlobalCreate: true, newIouRequestType: CONST.IOU.REQUEST_TYPE.MANUAL, report: fakeReport, @@ -6987,6 +6988,7 @@ describe('actions/IOU', () => { return initMoneyRequest({ reportID: fakeReport.reportID, policy: fakePolicy, + personalPolicy: fakePersonalPolicy, isFromGlobalCreate: true, currentIouRequestType: CONST.IOU.REQUEST_TYPE.MANUAL, newIouRequestType: CONST.IOU.REQUEST_TYPE.SCAN, @@ -7009,6 +7011,7 @@ describe('actions/IOU', () => { .then(() => { return initMoneyRequest({ reportID: fakeReport.reportID, + personalPolicy: fakePersonalPolicy, isFromGlobalCreate: true, newIouRequestType: CONST.IOU.REQUEST_TYPE.MANUAL, report: fakeReport, From 43f10e4dcecdf2edd86c30ab7e6db45c14af0d85 Mon Sep 17 00:00:00 2001 From: Shubham Agrawal Date: Fri, 5 Dec 2025 19:04:47 +0530 Subject: [PATCH 2/3] Fix lint --- src/libs/PolicyUtils.ts | 2 ++ src/libs/actions/IOU.ts | 1 - 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/src/libs/PolicyUtils.ts b/src/libs/PolicyUtils.ts index 9f8e6af33622..9d199b8592f5 100644 --- a/src/libs/PolicyUtils.ts +++ b/src/libs/PolicyUtils.ts @@ -1595,6 +1595,8 @@ export { getMemberAccountIDsForWorkspace, getNumericValue, isMultiLevelTags, + // This will be fixed as part of https://github.com/Expensify/App/issues/66397 + // eslint-disable-next-line @typescript-eslint/no-deprecated getPersonalPolicy, // This will be fixed as part of https://github.com/Expensify/Expensify/issues/507850 // eslint-disable-next-line @typescript-eslint/no-deprecated diff --git a/src/libs/actions/IOU.ts b/src/libs/actions/IOU.ts index 5133418c0d9a..7e773385dc4d 100644 --- a/src/libs/actions/IOU.ts +++ b/src/libs/actions/IOU.ts @@ -1071,7 +1071,6 @@ function initMoneyRequest({ lastSelectedDistanceRates, currentUserPersonalDetails, }: InitMoneyRequestParams) { - console.trace('initMoneyRequest', {reportID, currentIouRequestType, newIouRequestType}); // Generate a brand new transactionID const newTransactionID = CONST.IOU.OPTIMISTIC_TRANSACTION_ID; const currency = policy?.outputCurrency ?? personalPolicy?.outputCurrency ?? CONST.CURRENCY.USD; From 24cb6c435694a4ecf5fe67818ef2998906de3086 Mon Sep 17 00:00:00 2001 From: Shubham Agrawal Date: Tue, 30 Dec 2025 08:57:48 +0530 Subject: [PATCH 3/3] Fix prettier --- src/pages/iou/request/DistanceRequestStartPage.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/pages/iou/request/DistanceRequestStartPage.tsx b/src/pages/iou/request/DistanceRequestStartPage.tsx index 89bb8b911690..8c4595f5e74c 100644 --- a/src/pages/iou/request/DistanceRequestStartPage.tsx +++ b/src/pages/iou/request/DistanceRequestStartPage.tsx @@ -8,8 +8,8 @@ import TabSelector from '@components/TabSelector/TabSelector'; import useCurrentUserPersonalDetails from '@hooks/useCurrentUserPersonalDetails'; import useLocalize from '@hooks/useLocalize'; import useOnyx from '@hooks/useOnyx'; -import usePersonalPolicy from '@hooks/usePersonalPolicy'; import usePermissions from '@hooks/usePermissions'; +import usePersonalPolicy from '@hooks/usePersonalPolicy'; import usePolicy from '@hooks/usePolicy'; import usePrevious from '@hooks/usePrevious'; import useThemeStyles from '@hooks/useThemeStyles';