From fbdc32b22b7d9ff406a17d74b970daebcd7b071f Mon Sep 17 00:00:00 2001 From: yellowtailfan <36425185+yellowtailfan@users.noreply.github.com> Date: Thu, 1 May 2025 11:40:27 +1000 Subject: [PATCH 1/5] Move truncation of HTML paste into parser. --- src/hooks/useHtmlPaste/index.ts | 2 +- src/libs/Parser.ts | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/hooks/useHtmlPaste/index.ts b/src/hooks/useHtmlPaste/index.ts index c181fe32b69ef..27e1f20130038 100644 --- a/src/hooks/useHtmlPaste/index.ts +++ b/src/hooks/useHtmlPaste/index.ts @@ -94,7 +94,7 @@ const useHtmlPaste: UseHtmlPaste = (textInputRef, preHtmlPasteCallback, isActive */ const handlePastedHTML = useCallback( (html: string) => { - paste(Parser.htmlToMarkdown(html.slice(0, maxLength))); + paste(Parser.htmlToMarkdown(html, {}, maxLength)); }, [paste, maxLength], ); diff --git a/src/libs/Parser.ts b/src/libs/Parser.ts index 8076496f2f798..362bfccf755bc 100644 --- a/src/libs/Parser.ts +++ b/src/libs/Parser.ts @@ -45,12 +45,12 @@ type Extras = { }; class ExpensiMarkWithContext extends ExpensiMark { - htmlToMarkdown(htmlString: string, extras?: Extras): string { + htmlToMarkdown(htmlString: string, extras?: Extras, maxBodyLength?: number): string { return super.htmlToMarkdown(htmlString, { reportIDToName: extras?.reportIDToName ?? reportIDToNameMap, accountIDToName: extras?.accountIDToName ?? accountIDToNameMap, cacheVideoAttributes: extras?.cacheVideoAttributes, - }); + }, maxBodyLength); } htmlToText(htmlString: string, extras?: Extras): string { From 7815a6ee49e58c06478289b2fb1f68055d7ed992 Mon Sep 17 00:00:00 2001 From: yellowtailfan <36425185+yellowtailfan@users.noreply.github.com> Date: Wed, 7 May 2025 11:21:30 +1000 Subject: [PATCH 2/5] Update expensify-common version to support maxBodyLength. --- package-lock.json | 8 ++++---- package.json | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package-lock.json b/package-lock.json index c2e930fca872d..16a9d3328319c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -61,7 +61,7 @@ "date-fns-tz": "^3.2.0", "dom-serializer": "^0.2.2", "domhandler": "^4.3.0", - "expensify-common": "^2.0.135", + "expensify-common": "2.0.136", "expo": "52.0.41", "expo-asset": "^11.0.5", "expo-av": "^15.0.2", @@ -22469,9 +22469,9 @@ } }, "node_modules/expensify-common": { - "version": "2.0.135", - "resolved": "https://registry.npmjs.org/expensify-common/-/expensify-common-2.0.135.tgz", - "integrity": "sha512-GTwgjxvxbW+bnX9IT636SQjeqW3KiTDtSqvwjqMovbH3pyMA/8A2ucdY2bf6RkDKs4NNVL7FBfiRzr6hpbMf0g==", + "version": "2.0.136", + "resolved": "https://registry.npmjs.org/expensify-common/-/expensify-common-2.0.136.tgz", + "integrity": "sha512-Oa9sye7ZYUS+nH2BmBuXlqkt/vJ471Dkjqh+A/QasjdLTIVt9KkIodpXDH/XEgAhZbGCj4pc63NhRXJFJ2MgMw==", "license": "MIT", "dependencies": { "awesome-phonenumber": "^5.4.0", diff --git a/package.json b/package.json index 85e73a67f87f8..9f5d4b141df22 100644 --- a/package.json +++ b/package.json @@ -128,7 +128,7 @@ "date-fns-tz": "^3.2.0", "dom-serializer": "^0.2.2", "domhandler": "^4.3.0", - "expensify-common": "^2.0.135", + "expensify-common": "2.0.136", "expo": "52.0.41", "expo-asset": "^11.0.5", "expo-av": "^15.0.2", From 25248c960952b3ad711a1e1826ea67fb9bfbeec9 Mon Sep 17 00:00:00 2001 From: yellowtailfan <36425185+yellowtailfan@users.noreply.github.com> Date: Wed, 21 May 2025 12:35:19 +1000 Subject: [PATCH 3/5] Prettier fix. --- src/libs/Parser.ts | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/src/libs/Parser.ts b/src/libs/Parser.ts index 362bfccf755bc..9d42c23d265ff 100644 --- a/src/libs/Parser.ts +++ b/src/libs/Parser.ts @@ -46,11 +46,15 @@ type Extras = { class ExpensiMarkWithContext extends ExpensiMark { htmlToMarkdown(htmlString: string, extras?: Extras, maxBodyLength?: number): string { - return super.htmlToMarkdown(htmlString, { - reportIDToName: extras?.reportIDToName ?? reportIDToNameMap, - accountIDToName: extras?.accountIDToName ?? accountIDToNameMap, - cacheVideoAttributes: extras?.cacheVideoAttributes, - }, maxBodyLength); + return super.htmlToMarkdown( + htmlString, + { + reportIDToName: extras?.reportIDToName ?? reportIDToNameMap, + accountIDToName: extras?.accountIDToName ?? accountIDToNameMap, + cacheVideoAttributes: extras?.cacheVideoAttributes, + }, + maxBodyLength, + ); } htmlToText(htmlString: string, extras?: Extras): string { From 4dac32cefda04978f104f10b78a8d17d5e0e284f Mon Sep 17 00:00:00 2001 From: yellowtailfan <36425185+yellowtailfan@users.noreply.github.com> Date: Thu, 22 May 2025 17:58:51 +1000 Subject: [PATCH 4/5] Fix lint: Onyx canBeMissing, namespace imports. --- src/components/CategoryPicker.tsx | 16 ++++----- src/libs/CategoryUtils.ts | 4 +-- src/libs/TransactionUtils/index.ts | 1 + .../Confirmation.tsx | 6 ++-- .../subSteps/AverageReimbursement.tsx | 6 ++-- .../BusinessInfo/subSteps/BusinessType.tsx | 4 +-- .../BusinessInfo/subSteps/PaymentVolume.tsx | 6 ++-- .../SignerInfo/subSteps/Confirmation.tsx | 6 ++-- .../SearchFiltersTaxRatePage.tsx | 8 ++--- src/pages/Share/ShareTab.tsx | 4 +-- src/pages/TeachersUnite/KnowATeacherPage.tsx | 2 +- .../report/ReportActionItemMessageEdit.tsx | 6 ++-- .../request/IOURequestRedirectToStartPage.tsx | 4 +-- .../Profile/PersonalDetails/LegalNamePage.tsx | 36 +++++++++---------- .../PersonalDetails/PhoneNumberPage.tsx | 4 +-- src/pages/tasks/NewTaskDetailsPage.tsx | 2 +- src/pages/tasks/NewTaskPage.tsx | 6 ++-- src/pages/workspace/tags/TagSettingsPage.tsx | 2 +- .../workspace/tags/WorkspaceEditTagsPage.tsx | 2 +- tests/ui/WorkspaceCategoriesTest.tsx | 10 +++--- 20 files changed, 68 insertions(+), 67 deletions(-) diff --git a/src/components/CategoryPicker.tsx b/src/components/CategoryPicker.tsx index 14d9bc9a1ebe2..b3849cd0f1de0 100644 --- a/src/components/CategoryPicker.tsx +++ b/src/components/CategoryPicker.tsx @@ -4,9 +4,9 @@ import {useOnyx} from 'react-native-onyx'; import useDebouncedState from '@hooks/useDebouncedState'; import useLocalize from '@hooks/useLocalize'; import useNetwork from '@hooks/useNetwork'; -import * as CategoryOptionsListUtils from '@libs/CategoryOptionListUtils'; +import {getCategoryListSections} from '@libs/CategoryOptionListUtils'; import type {Category} from '@libs/CategoryOptionListUtils'; -import * as OptionsListUtils from '@libs/OptionsListUtils'; +import {getEnabledCategoriesCount, getHeaderMessageForNonUserList} from '@libs/OptionsListUtils'; import CONST from '@src/CONST'; import ONYXKEYS from '@src/ONYXKEYS'; import {isEmptyObject} from '@src/types/utils/EmptyObject'; @@ -27,9 +27,9 @@ type CategoryPickerProps = { }; function CategoryPicker({selectedCategory, policyID, onSubmit, addBottomSafeAreaPadding = false, contentContainerStyle}: CategoryPickerProps) { - const [policyCategories] = useOnyx(`${ONYXKEYS.COLLECTION.POLICY_CATEGORIES}${policyID}`); - const [policyCategoriesDraft] = useOnyx(`${ONYXKEYS.COLLECTION.POLICY_CATEGORIES_DRAFT}${policyID}`); - const [policyRecentlyUsedCategories] = useOnyx(`${ONYXKEYS.COLLECTION.POLICY_RECENTLY_USED_CATEGORIES}${policyID}`); + const [policyCategories] = useOnyx(`${ONYXKEYS.COLLECTION.POLICY_CATEGORIES}${policyID}`, {canBeMissing: true}); + const [policyCategoriesDraft] = useOnyx(`${ONYXKEYS.COLLECTION.POLICY_CATEGORIES_DRAFT}${policyID}`, {canBeMissing: true}); + const [policyRecentlyUsedCategories] = useOnyx(`${ONYXKEYS.COLLECTION.POLICY_RECENTLY_USED_CATEGORIES}${policyID}`, {canBeMissing: true}); const {isOffline} = useNetwork(); const {translate} = useLocalize(); @@ -53,7 +53,7 @@ function CategoryPicker({selectedCategory, policyID, onSubmit, addBottomSafeArea const [sections, headerMessage, shouldShowTextInput] = useMemo(() => { const categories = policyCategories ?? policyCategoriesDraft ?? {}; const validPolicyRecentlyUsedCategories = policyRecentlyUsedCategories?.filter?.((p) => !isEmptyObject(p)); - const categoryOptions = CategoryOptionsListUtils.getCategoryListSections({ + const categoryOptions = getCategoryListSections({ searchValue: debouncedSearchValue, selectedOptions, categories, @@ -61,8 +61,8 @@ function CategoryPicker({selectedCategory, policyID, onSubmit, addBottomSafeArea }); const categoryData = categoryOptions?.at(0)?.data ?? []; - const header = OptionsListUtils.getHeaderMessageForNonUserList(categoryData.length > 0, debouncedSearchValue); - const categoriesCount = OptionsListUtils.getEnabledCategoriesCount(categories); + const header = getHeaderMessageForNonUserList(categoryData.length > 0, debouncedSearchValue); + const categoriesCount = getEnabledCategoriesCount(categories); const isCategoriesCountBelowThreshold = categoriesCount < CONST.STANDARD_LIST_ITEM_LIMIT; const showInput = !isCategoriesCountBelowThreshold; diff --git a/src/libs/CategoryUtils.ts b/src/libs/CategoryUtils.ts index 79ed264ade681..47054a65d901d 100644 --- a/src/libs/CategoryUtils.ts +++ b/src/libs/CategoryUtils.ts @@ -2,7 +2,7 @@ import type {LocaleContextProps} from '@components/LocaleContextProvider'; import CONST from '@src/CONST'; import type {Policy, TaxRate, TaxRatesWithDefault} from '@src/types/onyx'; import type {ApprovalRule, ExpenseRule, MccGroup} from '@src/types/onyx/Policy'; -import * as CurrencyUtils from './CurrencyUtils'; +import {convertToShortDisplayString} from './CurrencyUtils'; function formatDefaultTaxRateText(translate: LocaleContextProps['translate'], taxID: string, taxRate: TaxRate, policyTaxRates?: TaxRatesWithDefault) { const taxRateText = `${taxRate.name} ${CONST.DOT_SEPARATOR} ${taxRate.value}`; @@ -39,7 +39,7 @@ function formatRequireReceiptsOverText(translate: LocaleContextProps['translate' const maxExpenseAmountToDisplay = policy?.maxExpenseAmountNoReceipt === CONST.DISABLED_MAX_EXPENSE_VALUE ? 0 : policy?.maxExpenseAmountNoReceipt; return translate(`workspace.rules.categoryRules.requireReceiptsOverList.default`, { - defaultAmount: CurrencyUtils.convertToShortDisplayString(maxExpenseAmountToDisplay, policy?.outputCurrency ?? CONST.CURRENCY.USD), + defaultAmount: convertToShortDisplayString(maxExpenseAmountToDisplay, policy?.outputCurrency ?? CONST.CURRENCY.USD), }); } diff --git a/src/libs/TransactionUtils/index.ts b/src/libs/TransactionUtils/index.ts index 6b031ddb73200..5b1b0ddea2332 100644 --- a/src/libs/TransactionUtils/index.ts +++ b/src/libs/TransactionUtils/index.ts @@ -1625,6 +1625,7 @@ export { hasWarningTypeViolation, isCustomUnitRateIDForP2P, getRateID, + // eslint-disable-next-line deprecation/deprecation getTransaction, compareDuplicateTransactionFields, getTransactionID, diff --git a/src/pages/ReimbursementAccount/NonUSD/BeneficialOwnerInfo/BeneficialOwnerDetailsFormSubSteps/Confirmation.tsx b/src/pages/ReimbursementAccount/NonUSD/BeneficialOwnerInfo/BeneficialOwnerDetailsFormSubSteps/Confirmation.tsx index 696ebe4fc4892..6a2b05fa794d4 100644 --- a/src/pages/ReimbursementAccount/NonUSD/BeneficialOwnerInfo/BeneficialOwnerDetailsFormSubSteps/Confirmation.tsx +++ b/src/pages/ReimbursementAccount/NonUSD/BeneficialOwnerInfo/BeneficialOwnerDetailsFormSubSteps/Confirmation.tsx @@ -15,13 +15,13 @@ const {PREFIX, COUNTRY} = CONST.NON_USD_BANK_ACCOUNT.BENEFICIAL_OWNER_INFO_STEP. function Confirmation({onNext, onMove, isEditing, ownerBeingModifiedID}: ConfirmationProps) { const {translate} = useLocalize(); - const [reimbursementAccount] = useOnyx(ONYXKEYS.REIMBURSEMENT_ACCOUNT); - const [reimbursementAccountDraft] = useOnyx(ONYXKEYS.FORMS.REIMBURSEMENT_ACCOUNT_FORM_DRAFT); + const [reimbursementAccount] = useOnyx(ONYXKEYS.REIMBURSEMENT_ACCOUNT, {canBeMissing: true}); + const [reimbursementAccountDraft] = useOnyx(ONYXKEYS.FORMS.REIMBURSEMENT_ACCOUNT_FORM_DRAFT, {canBeMissing: true}); const values = useMemo(() => getValuesForBeneficialOwner(ownerBeingModifiedID, reimbursementAccountDraft), [ownerBeingModifiedID, reimbursementAccountDraft]); const beneficialOwnerCountryInputID = `${PREFIX}_${ownerBeingModifiedID}_${COUNTRY}` as const; const beneficialOwnerCountry = String(reimbursementAccountDraft?.[beneficialOwnerCountryInputID] ?? ''); const policyID = reimbursementAccount?.achData?.policyID; - const [policy] = useOnyx(`${ONYXKEYS.COLLECTION.POLICY}${policyID}`); + const [policy] = useOnyx(`${ONYXKEYS.COLLECTION.POLICY}${policyID}`, {canBeMissing: true}); const currency = policy?.outputCurrency ?? ''; const countryStepCountryValue = reimbursementAccountDraft?.[INPUT_IDS.ADDITIONAL_DATA.COUNTRY] ?? ''; const isDocumentNeededStatus = getNeededDocumentsStatusForBeneficialOwner(currency, countryStepCountryValue, beneficialOwnerCountry); diff --git a/src/pages/ReimbursementAccount/NonUSD/BusinessInfo/subSteps/AverageReimbursement.tsx b/src/pages/ReimbursementAccount/NonUSD/BusinessInfo/subSteps/AverageReimbursement.tsx index 22b1c33aa31e4..7d3431706a7e4 100644 --- a/src/pages/ReimbursementAccount/NonUSD/BusinessInfo/subSteps/AverageReimbursement.tsx +++ b/src/pages/ReimbursementAccount/NonUSD/BusinessInfo/subSteps/AverageReimbursement.tsx @@ -21,10 +21,10 @@ const STEP_FIELDS = [TRADE_VOLUME]; function AverageReimbursement({onNext, isEditing}: AverageReimbursementProps) { const {translate} = useLocalize(); const styles = useThemeStyles(); - const [reimbursementAccount] = useOnyx(ONYXKEYS.REIMBURSEMENT_ACCOUNT); - const [corpayOnboardingFields] = useOnyx(ONYXKEYS.CORPAY_ONBOARDING_FIELDS); + const [reimbursementAccount] = useOnyx(ONYXKEYS.REIMBURSEMENT_ACCOUNT, {canBeMissing: true}); + const [corpayOnboardingFields] = useOnyx(ONYXKEYS.CORPAY_ONBOARDING_FIELDS, {canBeMissing: true}); const policyID = reimbursementAccount?.achData?.policyID; - const [policy] = useOnyx(`${ONYXKEYS.COLLECTION.POLICY}${policyID}`); + const [policy] = useOnyx(`${ONYXKEYS.COLLECTION.POLICY}${policyID}`, {canBeMissing: true}); const currency = policy?.outputCurrency ?? ''; const tradeVolumeRangeListOptions = useMemo(() => { diff --git a/src/pages/ReimbursementAccount/NonUSD/BusinessInfo/subSteps/BusinessType.tsx b/src/pages/ReimbursementAccount/NonUSD/BusinessInfo/subSteps/BusinessType.tsx index 793748b37b158..8c0892fd3f73a 100644 --- a/src/pages/ReimbursementAccount/NonUSD/BusinessInfo/subSteps/BusinessType.tsx +++ b/src/pages/ReimbursementAccount/NonUSD/BusinessInfo/subSteps/BusinessType.tsx @@ -22,8 +22,8 @@ function BusinessType({onNext, isEditing}: BusinessTypeProps) { const {translate} = useLocalize(); const styles = useThemeStyles(); - const [reimbursementAccount] = useOnyx(ONYXKEYS.REIMBURSEMENT_ACCOUNT); - const [corpayOnboardingFields] = useOnyx(ONYXKEYS.CORPAY_ONBOARDING_FIELDS); + const [reimbursementAccount] = useOnyx(ONYXKEYS.REIMBURSEMENT_ACCOUNT, {canBeMissing: true}); + const [corpayOnboardingFields] = useOnyx(ONYXKEYS.CORPAY_ONBOARDING_FIELDS, {canBeMissing: true}); const incorporationTypeListOptions = useMemo(() => { if (!corpayOnboardingFields?.picklists.ApplicantType) { diff --git a/src/pages/ReimbursementAccount/NonUSD/BusinessInfo/subSteps/PaymentVolume.tsx b/src/pages/ReimbursementAccount/NonUSD/BusinessInfo/subSteps/PaymentVolume.tsx index 5a1758452c103..4336fdad051e9 100644 --- a/src/pages/ReimbursementAccount/NonUSD/BusinessInfo/subSteps/PaymentVolume.tsx +++ b/src/pages/ReimbursementAccount/NonUSD/BusinessInfo/subSteps/PaymentVolume.tsx @@ -21,10 +21,10 @@ const STEP_FIELDS = [ANNUAL_VOLUME]; function PaymentVolume({onNext, isEditing}: PaymentVolumeProps) { const {translate} = useLocalize(); const styles = useThemeStyles(); - const [reimbursementAccount] = useOnyx(ONYXKEYS.REIMBURSEMENT_ACCOUNT); - const [corpayOnboardingFields] = useOnyx(ONYXKEYS.CORPAY_ONBOARDING_FIELDS); + const [reimbursementAccount] = useOnyx(ONYXKEYS.REIMBURSEMENT_ACCOUNT, {canBeMissing: true}); + const [corpayOnboardingFields] = useOnyx(ONYXKEYS.CORPAY_ONBOARDING_FIELDS, {canBeMissing: true}); const policyID = reimbursementAccount?.achData?.policyID; - const [policy] = useOnyx(`${ONYXKEYS.COLLECTION.POLICY}${policyID}`); + const [policy] = useOnyx(`${ONYXKEYS.COLLECTION.POLICY}${policyID}`, {canBeMissing: true}); const currency = policy?.outputCurrency ?? ''; const annualVolumeRangeListOptions = useMemo(() => { diff --git a/src/pages/ReimbursementAccount/NonUSD/SignerInfo/subSteps/Confirmation.tsx b/src/pages/ReimbursementAccount/NonUSD/SignerInfo/subSteps/Confirmation.tsx index d1d084c255653..f450e957cbaea 100644 --- a/src/pages/ReimbursementAccount/NonUSD/SignerInfo/subSteps/Confirmation.tsx +++ b/src/pages/ReimbursementAccount/NonUSD/SignerInfo/subSteps/Confirmation.tsx @@ -15,13 +15,13 @@ const {OWNS_MORE_THAN_25_PERCENT} = INPUT_IDS.ADDITIONAL_DATA.CORPAY; function Confirmation({onNext, onMove, isEditing}: ConfirmationProps) { const {translate} = useLocalize(); - const [reimbursementAccount] = useOnyx(ONYXKEYS.REIMBURSEMENT_ACCOUNT); - const [reimbursementAccountDraft] = useOnyx(ONYXKEYS.FORMS.REIMBURSEMENT_ACCOUNT_FORM_DRAFT); + const [reimbursementAccount] = useOnyx(ONYXKEYS.REIMBURSEMENT_ACCOUNT, {canBeMissing: true}); + const [reimbursementAccountDraft] = useOnyx(ONYXKEYS.FORMS.REIMBURSEMENT_ACCOUNT_FORM_DRAFT, {canBeMissing: true}); const isUserOwner = reimbursementAccount?.achData?.corpay?.[OWNS_MORE_THAN_25_PERCENT] ?? reimbursementAccountDraft?.[OWNS_MORE_THAN_25_PERCENT] ?? false; const values = useMemo(() => getValuesForSignerInfo(reimbursementAccountDraft), [reimbursementAccountDraft]); const policyID = reimbursementAccount?.achData?.policyID; - const [policy] = useOnyx(`${ONYXKEYS.COLLECTION.POLICY}${policyID}`); + const [policy] = useOnyx(`${ONYXKEYS.COLLECTION.POLICY}${policyID}`, {canBeMissing: true}); const currency = policy?.outputCurrency ?? ''; const countryStepCountryValue = reimbursementAccount?.achData?.[INPUT_IDS.ADDITIONAL_DATA.COUNTRY] ?? ''; const isDocumentNeededStatus = getNeededDocumentsStatusForSignerInfo(currency, countryStepCountryValue); diff --git a/src/pages/Search/SearchAdvancedFiltersPage/SearchFiltersTaxRatePage.tsx b/src/pages/Search/SearchAdvancedFiltersPage/SearchFiltersTaxRatePage.tsx index fa14c9f5f9d5b..b006f11a66c77 100644 --- a/src/pages/Search/SearchAdvancedFiltersPage/SearchFiltersTaxRatePage.tsx +++ b/src/pages/Search/SearchAdvancedFiltersPage/SearchFiltersTaxRatePage.tsx @@ -9,7 +9,7 @@ import useLocalize from '@hooks/useLocalize'; import useThemeStyles from '@hooks/useThemeStyles'; import Navigation from '@libs/Navigation/Navigation'; import {getAllTaxRates} from '@libs/PolicyUtils'; -import * as SearchActions from '@userActions/Search'; +import {updateAdvancedFilters} from '@userActions/Search'; import ONYXKEYS from '@src/ONYXKEYS'; import ROUTES from '@src/ROUTES'; @@ -17,7 +17,7 @@ function SearchFiltersTaxRatePage() { const styles = useThemeStyles(); const {translate} = useLocalize(); - const [searchAdvancedFiltersForm] = useOnyx(ONYXKEYS.FORMS.SEARCH_ADVANCED_FILTERS_FORM); + const [searchAdvancedFiltersForm] = useOnyx(ONYXKEYS.FORMS.SEARCH_ADVANCED_FILTERS_FORM, {canBeMissing: true}); const allTaxRates = getAllTaxRates(); const selectedTaxesItems: SearchMultipleSelectionPickerItem[] = []; Object.entries(allTaxRates).forEach(([taxRateName, taxRateKeys]) => { @@ -29,7 +29,7 @@ function SearchFiltersTaxRatePage() { }); }); const policyID = searchAdvancedFiltersForm?.policyID; - const [policy] = useOnyx(`${ONYXKEYS.COLLECTION.POLICY}${policyID}`); + const [policy] = useOnyx(`${ONYXKEYS.COLLECTION.POLICY}${policyID}`, {canBeMissing: true}); const singlePolicyTaxRates = policy?.taxRates?.taxes; const taxItems = useMemo(() => { @@ -39,7 +39,7 @@ function SearchFiltersTaxRatePage() { return Object.entries(singlePolicyTaxRates).map(([taxRatekey, taxRate]) => ({name: taxRate.name, value: [taxRatekey]})); }, [allTaxRates, singlePolicyTaxRates]); - const updateTaxRateFilters = useCallback((values: string[]) => SearchActions.updateAdvancedFilters({taxRate: values}), []); + const updateTaxRateFilters = useCallback((values: string[]) => updateAdvancedFilters({taxRate: values}), []); return ( !areOptionsInitialized || !didScreenTransitionEnd, [areOptionsInitialized, didScreenTransitionEnd]); diff --git a/src/pages/TeachersUnite/KnowATeacherPage.tsx b/src/pages/TeachersUnite/KnowATeacherPage.tsx index f5b41d525ccdd..8a36ff01cc94d 100644 --- a/src/pages/TeachersUnite/KnowATeacherPage.tsx +++ b/src/pages/TeachersUnite/KnowATeacherPage.tsx @@ -25,7 +25,7 @@ function KnowATeacherPage() { const styles = useThemeStyles(); const {translate} = useLocalize(); const {isProduction} = useEnvironment(); - const [loginList] = useOnyx(ONYXKEYS.LOGIN_LIST); + const [loginList] = useOnyx(ONYXKEYS.LOGIN_LIST, {canBeMissing: true}); /** * Submit form to pass firstName, partnerUserID and lastName diff --git a/src/pages/home/report/ReportActionItemMessageEdit.tsx b/src/pages/home/report/ReportActionItemMessageEdit.tsx index 6f2c3d72ad111..8407436f6db0e 100644 --- a/src/pages/home/report/ReportActionItemMessageEdit.tsx +++ b/src/pages/home/report/ReportActionItemMessageEdit.tsx @@ -85,7 +85,7 @@ function ReportActionItemMessageEdit( {action, draftMessage, reportID, policyID, index, isGroupPolicyReport, shouldDisableEmojiPicker = false}: ReportActionItemMessageEditProps, forwardedRef: ForwardedRef, ) { - const [preferredSkinTone] = useOnyx(ONYXKEYS.PREFERRED_EMOJI_SKIN_TONE, {initialValue: CONST.EMOJI_DEFAULT_SKIN_TONE}); + const [preferredSkinTone] = useOnyx(ONYXKEYS.PREFERRED_EMOJI_SKIN_TONE, {canBeMissing: true, initialValue: CONST.EMOJI_DEFAULT_SKIN_TONE}); const theme = useTheme(); const styles = useThemeStyles(); const StyleUtils = useStyleUtils(); @@ -116,8 +116,8 @@ function ReportActionItemMessageEdit( willAlertModalBecomeVisible: false, isVisible: false, }, - ] = useOnyx(ONYXKEYS.MODAL); - const [onyxInputFocused = false] = useOnyx(ONYXKEYS.INPUT_FOCUSED); + ] = useOnyx(ONYXKEYS.MODAL, {canBeMissing: true}); + const [onyxInputFocused = false] = useOnyx(ONYXKEYS.INPUT_FOCUSED, {canBeMissing: true}); const textInputRef = useRef<(HTMLTextAreaElement & TextInput) | null>(null); const isFocusedRef = useRef(false); diff --git a/src/pages/iou/request/IOURequestRedirectToStartPage.tsx b/src/pages/iou/request/IOURequestRedirectToStartPage.tsx index 1316b3afc9286..d79ad4f18c4da 100644 --- a/src/pages/iou/request/IOURequestRedirectToStartPage.tsx +++ b/src/pages/iou/request/IOURequestRedirectToStartPage.tsx @@ -2,7 +2,7 @@ import React, {useEffect} from 'react'; import FullPageNotFoundView from '@components/BlockingViews/FullPageNotFoundView'; import ScreenWrapper from '@components/ScreenWrapper'; import Navigation from '@libs/Navigation/Navigation'; -import * as ReportUtils from '@libs/ReportUtils'; +import {generateReportID} from '@libs/ReportUtils'; import CONST from '@src/CONST'; import ROUTES from '@src/ROUTES'; import type SCREENS from '@src/SCREENS'; @@ -27,7 +27,7 @@ function IOURequestRedirectToStartPage({ Navigation.dismissModal(); // Redirect the person to the right start page using a rendom reportID - const optimisticReportID = ReportUtils.generateReportID(); + const optimisticReportID = generateReportID(); if (iouRequestType === CONST.IOU.REQUEST_TYPE.DISTANCE) { Navigation.navigate(ROUTES.MONEY_REQUEST_CREATE_TAB_DISTANCE.getRoute(CONST.IOU.ACTION.CREATE, iouType, CONST.IOU.OPTIMISTIC_TRANSACTION_ID, optimisticReportID)); } else if (iouRequestType === CONST.IOU.REQUEST_TYPE.MANUAL) { diff --git a/src/pages/settings/Profile/PersonalDetails/LegalNamePage.tsx b/src/pages/settings/Profile/PersonalDetails/LegalNamePage.tsx index ecb128af497cf..18c99312b2c27 100644 --- a/src/pages/settings/Profile/PersonalDetails/LegalNamePage.tsx +++ b/src/pages/settings/Profile/PersonalDetails/LegalNamePage.tsx @@ -11,23 +11,23 @@ import ScreenWrapper from '@components/ScreenWrapper'; import TextInput from '@components/TextInput'; import useLocalize from '@hooks/useLocalize'; import useThemeStyles from '@hooks/useThemeStyles'; -import * as ErrorUtils from '@libs/ErrorUtils'; +import {addErrorMessage} from '@libs/ErrorUtils'; import Navigation from '@libs/Navigation/Navigation'; -import * as ValidationUtils from '@libs/ValidationUtils'; -import * as PersonalDetails from '@userActions/PersonalDetails'; +import {doesContainReservedWord, isValidLegalName} from '@libs/ValidationUtils'; +import {updateLegalName} from '@userActions/PersonalDetails'; import CONST from '@src/CONST'; import ONYXKEYS from '@src/ONYXKEYS'; import INPUT_IDS from '@src/types/form/LegalNameForm'; import type {PrivatePersonalDetails} from '@src/types/onyx'; import type {Errors} from '@src/types/onyx/OnyxCommon'; -const updateLegalName = (values: PrivatePersonalDetails) => { - PersonalDetails.updateLegalName(values.legalFirstName?.trim() ?? '', values.legalLastName?.trim() ?? ''); +const updateLegalNameFromDetails = (values: PrivatePersonalDetails) => { + updateLegalName(values.legalFirstName?.trim() ?? '', values.legalLastName?.trim() ?? ''); }; function LegalNamePage() { - const [privatePersonalDetails] = useOnyx(ONYXKEYS.PRIVATE_PERSONAL_DETAILS); - const [isLoadingApp] = useOnyx(ONYXKEYS.IS_LOADING_APP, {initialValue: true}); + const [privatePersonalDetails] = useOnyx(ONYXKEYS.PRIVATE_PERSONAL_DETAILS, {canBeMissing: true}); + const [isLoadingApp] = useOnyx(ONYXKEYS.IS_LOADING_APP, {canBeMissing: true, initialValue: true}); const styles = useThemeStyles(); const {translate} = useLocalize(); @@ -39,36 +39,36 @@ function LegalNamePage() { const errors: Errors = {}; if (typeof values.legalFirstName === 'string') { - if (!ValidationUtils.isValidLegalName(values.legalFirstName)) { - ErrorUtils.addErrorMessage(errors, 'legalFirstName', translate('privatePersonalDetails.error.hasInvalidCharacter')); + if (!isValidLegalName(values.legalFirstName)) { + addErrorMessage(errors, 'legalFirstName', translate('privatePersonalDetails.error.hasInvalidCharacter')); } else if (!values.legalFirstName) { errors.legalFirstName = translate('common.error.fieldRequired'); } else if (values.legalFirstName.length > CONST.LEGAL_NAME.MAX_LENGTH) { - ErrorUtils.addErrorMessage( + addErrorMessage( errors, 'legalFirstName', translate('common.error.characterLimitExceedCounter', {length: values.legalFirstName.length, limit: CONST.LEGAL_NAME.MAX_LENGTH}), ); } - if (ValidationUtils.doesContainReservedWord(values.legalFirstName, CONST.DISPLAY_NAME.RESERVED_NAMES)) { - ErrorUtils.addErrorMessage(errors, 'legalFirstName', translate('personalDetails.error.containsReservedWord')); + if (doesContainReservedWord(values.legalFirstName, CONST.DISPLAY_NAME.RESERVED_NAMES)) { + addErrorMessage(errors, 'legalFirstName', translate('personalDetails.error.containsReservedWord')); } } if (typeof values.legalLastName === 'string') { - if (!ValidationUtils.isValidLegalName(values.legalLastName)) { - ErrorUtils.addErrorMessage(errors, 'legalLastName', translate('privatePersonalDetails.error.hasInvalidCharacter')); + if (!isValidLegalName(values.legalLastName)) { + addErrorMessage(errors, 'legalLastName', translate('privatePersonalDetails.error.hasInvalidCharacter')); } else if (!values.legalLastName) { errors.legalLastName = translate('common.error.fieldRequired'); } else if (values.legalLastName.length > CONST.LEGAL_NAME.MAX_LENGTH) { - ErrorUtils.addErrorMessage( + addErrorMessage( errors, 'legalLastName', translate('common.error.characterLimitExceedCounter', {length: values.legalLastName.length, limit: CONST.LEGAL_NAME.MAX_LENGTH}), ); } - if (ValidationUtils.doesContainReservedWord(values.legalLastName, CONST.DISPLAY_NAME.RESERVED_NAMES)) { - ErrorUtils.addErrorMessage(errors, 'legalLastName', translate('personalDetails.error.containsReservedWord')); + if (doesContainReservedWord(values.legalLastName, CONST.DISPLAY_NAME.RESERVED_NAMES)) { + addErrorMessage(errors, 'legalLastName', translate('personalDetails.error.containsReservedWord')); } } @@ -95,7 +95,7 @@ function LegalNamePage() { style={[styles.flexGrow1, styles.ph5]} formID={ONYXKEYS.FORMS.LEGAL_NAME_FORM} validate={validate} - onSubmit={updateLegalName} + onSubmit={updateLegalNameFromDetails} submitButtonText={translate('common.save')} enabledWhenOffline > diff --git a/src/pages/settings/Profile/PersonalDetails/PhoneNumberPage.tsx b/src/pages/settings/Profile/PersonalDetails/PhoneNumberPage.tsx index c379d500101df..fb266a7378919 100644 --- a/src/pages/settings/Profile/PersonalDetails/PhoneNumberPage.tsx +++ b/src/pages/settings/Profile/PersonalDetails/PhoneNumberPage.tsx @@ -23,8 +23,8 @@ import INPUT_IDS from '@src/types/form/PersonalDetailsForm'; import type {PrivatePersonalDetails} from '@src/types/onyx'; function PhoneNumberPage() { - const [privatePersonalDetails] = useOnyx(ONYXKEYS.PRIVATE_PERSONAL_DETAILS); - const [isLoadingApp] = useOnyx(ONYXKEYS.IS_LOADING_APP, {initialValue: true}); + const [privatePersonalDetails] = useOnyx(ONYXKEYS.PRIVATE_PERSONAL_DETAILS, {canBeMissing: true}); + const [isLoadingApp] = useOnyx(ONYXKEYS.IS_LOADING_APP, {canBeMissing: true, initialValue: true}); const styles = useThemeStyles(); const {translate} = useLocalize(); const {inputCallbackRef} = useAutoFocusInput(); diff --git a/src/pages/tasks/NewTaskDetailsPage.tsx b/src/pages/tasks/NewTaskDetailsPage.tsx index 47a5921c51a35..32fd623665df6 100644 --- a/src/pages/tasks/NewTaskDetailsPage.tsx +++ b/src/pages/tasks/NewTaskDetailsPage.tsx @@ -28,7 +28,7 @@ import INPUT_IDS from '@src/types/form/NewTaskForm'; type NewTaskDetailsPageProps = PlatformStackScreenProps; function NewTaskDetailsPage({route}: NewTaskDetailsPageProps) { - const [task] = useOnyx(ONYXKEYS.TASK); + const [task] = useOnyx(ONYXKEYS.TASK, {canBeMissing: true}); const styles = useThemeStyles(); const {translate} = useLocalize(); const [taskTitle, setTaskTitle] = useState(task?.title ?? ''); diff --git a/src/pages/tasks/NewTaskPage.tsx b/src/pages/tasks/NewTaskPage.tsx index c3d0fd55e54c5..94879e6bc4179 100644 --- a/src/pages/tasks/NewTaskPage.tsx +++ b/src/pages/tasks/NewTaskPage.tsx @@ -31,9 +31,9 @@ import {isEmptyObject} from '@src/types/utils/EmptyObject'; type NewTaskPageProps = PlatformStackScreenProps; function NewTaskPage({route}: NewTaskPageProps) { - const [task] = useOnyx(ONYXKEYS.TASK); - const [reports] = useOnyx(ONYXKEYS.COLLECTION.REPORT); - const [personalDetails] = useOnyx(ONYXKEYS.PERSONAL_DETAILS_LIST); + const [task] = useOnyx(ONYXKEYS.TASK, {canBeMissing: true}); + const [reports] = useOnyx(ONYXKEYS.COLLECTION.REPORT, {canBeMissing: true}); + const [personalDetails] = useOnyx(ONYXKEYS.PERSONAL_DETAILS_LIST, {canBeMissing: true}); const styles = useThemeStyles(); const {translate} = useLocalize(); const assignee = useMemo(() => getAssignee(task?.assigneeAccountID ?? CONST.DEFAULT_NUMBER_ID, personalDetails), [task?.assigneeAccountID, personalDetails]); diff --git a/src/pages/workspace/tags/TagSettingsPage.tsx b/src/pages/workspace/tags/TagSettingsPage.tsx index 62d24915fa235..c6c2f9515f1ef 100644 --- a/src/pages/workspace/tags/TagSettingsPage.tsx +++ b/src/pages/workspace/tags/TagSettingsPage.tsx @@ -39,7 +39,7 @@ import type SCREENS from '@src/SCREENS'; type TagSettingsPageProps = PlatformStackScreenProps; function TagSettingsPage({route, navigation}: TagSettingsPageProps) { - const [policyTags] = useOnyx(`${ONYXKEYS.COLLECTION.POLICY_TAGS}${route.params.policyID}`); + const [policyTags] = useOnyx(`${ONYXKEYS.COLLECTION.POLICY_TAGS}${route.params.policyID}`, {canBeMissing: true}); const {orderWeight, policyID, tagName, backTo} = route.params; const styles = useThemeStyles(); const {translate} = useLocalize(); diff --git a/src/pages/workspace/tags/WorkspaceEditTagsPage.tsx b/src/pages/workspace/tags/WorkspaceEditTagsPage.tsx index 368e70a56868c..ff2ca8d17d932 100644 --- a/src/pages/workspace/tags/WorkspaceEditTagsPage.tsx +++ b/src/pages/workspace/tags/WorkspaceEditTagsPage.tsx @@ -25,7 +25,7 @@ import INPUT_IDS from '@src/types/form/PolicyTagNameForm'; type WorkspaceEditTagsPageProps = PlatformStackScreenProps; function WorkspaceEditTagsPage({route}: WorkspaceEditTagsPageProps) { - const [policyTags] = useOnyx(`${ONYXKEYS.COLLECTION.POLICY_TAGS}${route?.params?.policyID}`); + const [policyTags] = useOnyx(`${ONYXKEYS.COLLECTION.POLICY_TAGS}${route?.params?.policyID}`, {canBeMissing: true}); const styles = useThemeStyles(); const {translate} = useLocalize(); const taglistName = useMemo(() => getTagListName(policyTags, route.params.orderWeight), [policyTags, route.params.orderWeight]); diff --git a/tests/ui/WorkspaceCategoriesTest.tsx b/tests/ui/WorkspaceCategoriesTest.tsx index 1f470371f6434..5a3305fe48e1c 100644 --- a/tests/ui/WorkspaceCategoriesTest.tsx +++ b/tests/ui/WorkspaceCategoriesTest.tsx @@ -9,7 +9,7 @@ import OnyxProvider from '@components/OnyxProvider'; import {CurrentReportIDContextProvider} from '@hooks/useCurrentReportID'; import * as useResponsiveLayoutModule from '@hooks/useResponsiveLayout'; import type ResponsiveLayoutResult from '@hooks/useResponsiveLayout/types'; -import * as Localize from '@libs/Localize'; +import {translateLocal} from '@libs/Localize'; import createPlatformStackNavigator from '@libs/Navigation/PlatformStackNavigation/createPlatformStackNavigator'; import type {WorkspaceSplitNavigatorParamList} from '@navigation/types'; import WorkspaceCategoriesPage from '@pages/workspace/categories/WorkspaceCategoriesPage'; @@ -125,7 +125,7 @@ describe('WorkspaceCategories', () => { // Wait for menu items to be visible await waitFor(() => { - const deleteText = Localize.translateLocal('workspace.categories.deleteCategories'); + const deleteText = translateLocal('workspace.categories.deleteCategories'); expect(screen.getByText(deleteText)).toBeOnTheScreen(); }); @@ -146,18 +146,18 @@ describe('WorkspaceCategories', () => { // After clicking delete categories dropdown menu item, verify the confirmation modal appears await waitFor(() => { - const confirmModalPrompt = Localize.translateLocal('workspace.categories.deleteCategoriesPrompt'); + const confirmModalPrompt = translateLocal('workspace.categories.deleteCategoriesPrompt'); expect(screen.getByText(confirmModalPrompt)).toBeOnTheScreen(); }); // Verify the delete button in the modal is visible await waitFor(() => { - const deleteConfirmButton = screen.getByLabelText(Localize.translateLocal('common.delete')); + const deleteConfirmButton = screen.getByLabelText(translateLocal('common.delete')); expect(deleteConfirmButton).toBeOnTheScreen(); }); // Click the delete button in the confirmation modal - const deleteConfirmButton = screen.getByLabelText(Localize.translateLocal('common.delete')); + const deleteConfirmButton = screen.getByLabelText(translateLocal('common.delete')); fireEvent.press(deleteConfirmButton); await waitForBatchedUpdatesWithAct(); From a2f21b5fd78bf64f98210af0ac3fb837bfc86470 Mon Sep 17 00:00:00 2001 From: yellowtailfan <36425185+yellowtailfan@users.noreply.github.com> Date: Wed, 28 May 2025 11:55:03 +1000 Subject: [PATCH 5/5] Revert lint fixes made on unrelated files. --- src/libs/TransactionUtils/index.ts | 1 - .../Confirmation.tsx | 6 ++-- .../SignerInfo/subSteps/Confirmation.tsx | 6 ++-- .../SearchFiltersTaxRatePage.tsx | 8 ++--- src/pages/Share/ShareTab.tsx | 4 +-- src/pages/TeachersUnite/KnowATeacherPage.tsx | 2 +- .../request/IOURequestRedirectToStartPage.tsx | 4 +-- .../Profile/PersonalDetails/LegalNamePage.tsx | 36 +++++++++---------- .../PersonalDetails/PhoneNumberPage.tsx | 4 +-- .../workspace/tags/WorkspaceEditTagsPage.tsx | 2 +- 10 files changed, 36 insertions(+), 37 deletions(-) diff --git a/src/libs/TransactionUtils/index.ts b/src/libs/TransactionUtils/index.ts index 974b6c8c25aee..5a1699a224258 100644 --- a/src/libs/TransactionUtils/index.ts +++ b/src/libs/TransactionUtils/index.ts @@ -1620,7 +1620,6 @@ export { hasWarningTypeViolation, isCustomUnitRateIDForP2P, getRateID, - // eslint-disable-next-line deprecation/deprecation getTransaction, compareDuplicateTransactionFields, getTransactionID, diff --git a/src/pages/ReimbursementAccount/NonUSD/BeneficialOwnerInfo/BeneficialOwnerDetailsFormSubSteps/Confirmation.tsx b/src/pages/ReimbursementAccount/NonUSD/BeneficialOwnerInfo/BeneficialOwnerDetailsFormSubSteps/Confirmation.tsx index 5ceaefed58ab8..a672adcee6573 100644 --- a/src/pages/ReimbursementAccount/NonUSD/BeneficialOwnerInfo/BeneficialOwnerDetailsFormSubSteps/Confirmation.tsx +++ b/src/pages/ReimbursementAccount/NonUSD/BeneficialOwnerInfo/BeneficialOwnerDetailsFormSubSteps/Confirmation.tsx @@ -15,13 +15,13 @@ const {PREFIX, COUNTRY} = CONST.NON_USD_BANK_ACCOUNT.BENEFICIAL_OWNER_INFO_STEP. function Confirmation({onNext, onMove, isEditing, ownerBeingModifiedID}: ConfirmationProps) { const {translate} = useLocalize(); - const [reimbursementAccount] = useOnyx(ONYXKEYS.REIMBURSEMENT_ACCOUNT, {canBeMissing: true}); - const [reimbursementAccountDraft] = useOnyx(ONYXKEYS.FORMS.REIMBURSEMENT_ACCOUNT_FORM_DRAFT, {canBeMissing: true}); + const [reimbursementAccount] = useOnyx(ONYXKEYS.REIMBURSEMENT_ACCOUNT); + const [reimbursementAccountDraft] = useOnyx(ONYXKEYS.FORMS.REIMBURSEMENT_ACCOUNT_FORM_DRAFT); const values = useMemo(() => getValuesForBeneficialOwner(ownerBeingModifiedID, reimbursementAccountDraft), [ownerBeingModifiedID, reimbursementAccountDraft]); const beneficialOwnerCountryInputID = `${PREFIX}_${ownerBeingModifiedID}_${COUNTRY}` as const; const beneficialOwnerCountry = String(reimbursementAccountDraft?.[beneficialOwnerCountryInputID] ?? ''); const policyID = reimbursementAccount?.achData?.policyID; - const [policy] = useOnyx(`${ONYXKEYS.COLLECTION.POLICY}${policyID}`, {canBeMissing: true}); + const [policy] = useOnyx(`${ONYXKEYS.COLLECTION.POLICY}${policyID}`); const currency = policy?.outputCurrency ?? ''; const countryStepCountryValue = reimbursementAccountDraft?.[INPUT_IDS.ADDITIONAL_DATA.COUNTRY] ?? ''; const isDocumentNeededStatus = getNeededDocumentsStatusForBeneficialOwner(currency, countryStepCountryValue, beneficialOwnerCountry); diff --git a/src/pages/ReimbursementAccount/NonUSD/SignerInfo/subSteps/Confirmation.tsx b/src/pages/ReimbursementAccount/NonUSD/SignerInfo/subSteps/Confirmation.tsx index 7078ed17ad82c..6a8ee19deced4 100644 --- a/src/pages/ReimbursementAccount/NonUSD/SignerInfo/subSteps/Confirmation.tsx +++ b/src/pages/ReimbursementAccount/NonUSD/SignerInfo/subSteps/Confirmation.tsx @@ -15,13 +15,13 @@ const {OWNS_MORE_THAN_25_PERCENT} = INPUT_IDS.ADDITIONAL_DATA.CORPAY; function Confirmation({onNext, onMove, isEditing}: ConfirmationProps) { const {translate} = useLocalize(); - const [reimbursementAccount] = useOnyx(ONYXKEYS.REIMBURSEMENT_ACCOUNT, {canBeMissing: true}); - const [reimbursementAccountDraft] = useOnyx(ONYXKEYS.FORMS.REIMBURSEMENT_ACCOUNT_FORM_DRAFT, {canBeMissing: true}); + const [reimbursementAccount] = useOnyx(ONYXKEYS.REIMBURSEMENT_ACCOUNT); + const [reimbursementAccountDraft] = useOnyx(ONYXKEYS.FORMS.REIMBURSEMENT_ACCOUNT_FORM_DRAFT); const isUserOwner = reimbursementAccount?.achData?.corpay?.[OWNS_MORE_THAN_25_PERCENT] ?? reimbursementAccountDraft?.[OWNS_MORE_THAN_25_PERCENT] ?? false; const values = useMemo(() => getValuesForSignerInfo(reimbursementAccountDraft), [reimbursementAccountDraft]); const policyID = reimbursementAccount?.achData?.policyID; - const [policy] = useOnyx(`${ONYXKEYS.COLLECTION.POLICY}${policyID}`, {canBeMissing: true}); + const [policy] = useOnyx(`${ONYXKEYS.COLLECTION.POLICY}${policyID}`); const currency = policy?.outputCurrency ?? ''; const countryStepCountryValue = reimbursementAccount?.achData?.[INPUT_IDS.ADDITIONAL_DATA.COUNTRY] ?? ''; const isDocumentNeededStatus = getNeededDocumentsStatusForSignerInfo(currency, countryStepCountryValue); diff --git a/src/pages/Search/SearchAdvancedFiltersPage/SearchFiltersTaxRatePage.tsx b/src/pages/Search/SearchAdvancedFiltersPage/SearchFiltersTaxRatePage.tsx index 1bc33812406fb..91444b03cd708 100644 --- a/src/pages/Search/SearchAdvancedFiltersPage/SearchFiltersTaxRatePage.tsx +++ b/src/pages/Search/SearchAdvancedFiltersPage/SearchFiltersTaxRatePage.tsx @@ -9,7 +9,7 @@ import useLocalize from '@hooks/useLocalize'; import useThemeStyles from '@hooks/useThemeStyles'; import Navigation from '@libs/Navigation/Navigation'; import {getAllTaxRates} from '@libs/PolicyUtils'; -import {updateAdvancedFilters} from '@userActions/Search'; +import * as SearchActions from '@userActions/Search'; import ONYXKEYS from '@src/ONYXKEYS'; import ROUTES from '@src/ROUTES'; @@ -17,7 +17,7 @@ function SearchFiltersTaxRatePage() { const styles = useThemeStyles(); const {translate} = useLocalize(); - const [searchAdvancedFiltersForm] = useOnyx(ONYXKEYS.FORMS.SEARCH_ADVANCED_FILTERS_FORM, {canBeMissing: true}); + const [searchAdvancedFiltersForm] = useOnyx(ONYXKEYS.FORMS.SEARCH_ADVANCED_FILTERS_FORM); const allTaxRates = getAllTaxRates(); const selectedTaxesItems: SearchMultipleSelectionPickerItem[] = []; Object.entries(allTaxRates).forEach(([taxRateName, taxRateKeys]) => { @@ -29,7 +29,7 @@ function SearchFiltersTaxRatePage() { }); }); const policyID = searchAdvancedFiltersForm?.policyID; - const [policy] = useOnyx(`${ONYXKEYS.COLLECTION.POLICY}${policyID}`, {canBeMissing: true}); + const [policy] = useOnyx(`${ONYXKEYS.COLLECTION.POLICY}${policyID}`); const singlePolicyTaxRates = policy?.taxRates?.taxes; const taxItems = useMemo(() => { @@ -39,7 +39,7 @@ function SearchFiltersTaxRatePage() { return Object.entries(singlePolicyTaxRates).map(([taxRateKey, taxRate]) => ({name: taxRate.name, value: [taxRateKey]})); }, [allTaxRates, singlePolicyTaxRates]); - const updateTaxRateFilters = useCallback((values: string[]) => updateAdvancedFilters({taxRate: values}), []); + const updateTaxRateFilters = useCallback((values: string[]) => SearchActions.updateAdvancedFilters({taxRate: values}), []); return ( !areOptionsInitialized || !didScreenTransitionEnd, [areOptionsInitialized, didScreenTransitionEnd]); diff --git a/src/pages/TeachersUnite/KnowATeacherPage.tsx b/src/pages/TeachersUnite/KnowATeacherPage.tsx index 6d8aaca9cb6d3..09d273c79c08a 100644 --- a/src/pages/TeachersUnite/KnowATeacherPage.tsx +++ b/src/pages/TeachersUnite/KnowATeacherPage.tsx @@ -25,7 +25,7 @@ function KnowATeacherPage() { const styles = useThemeStyles(); const {translate} = useLocalize(); const {isProduction} = useEnvironment(); - const [loginList] = useOnyx(ONYXKEYS.LOGIN_LIST, {canBeMissing: true}); + const [loginList] = useOnyx(ONYXKEYS.LOGIN_LIST); /** * Submit form to pass firstName, partnerUserID and lastName diff --git a/src/pages/iou/request/IOURequestRedirectToStartPage.tsx b/src/pages/iou/request/IOURequestRedirectToStartPage.tsx index 59787c2de4926..0a10b760f9503 100644 --- a/src/pages/iou/request/IOURequestRedirectToStartPage.tsx +++ b/src/pages/iou/request/IOURequestRedirectToStartPage.tsx @@ -2,7 +2,7 @@ import React, {useEffect} from 'react'; import FullPageNotFoundView from '@components/BlockingViews/FullPageNotFoundView'; import ScreenWrapper from '@components/ScreenWrapper'; import Navigation from '@libs/Navigation/Navigation'; -import {generateReportID} from '@libs/ReportUtils'; +import * as ReportUtils from '@libs/ReportUtils'; import CONST from '@src/CONST'; import ROUTES from '@src/ROUTES'; import type SCREENS from '@src/SCREENS'; @@ -27,7 +27,7 @@ function IOURequestRedirectToStartPage({ Navigation.dismissModal(); // Redirect the person to the right start page using a random reportID - const optimisticReportID = generateReportID(); + const optimisticReportID = ReportUtils.generateReportID(); if (iouRequestType === CONST.IOU.REQUEST_TYPE.DISTANCE) { Navigation.navigate(ROUTES.MONEY_REQUEST_CREATE_TAB_DISTANCE.getRoute(CONST.IOU.ACTION.CREATE, iouType, CONST.IOU.OPTIMISTIC_TRANSACTION_ID, optimisticReportID)); } else if (iouRequestType === CONST.IOU.REQUEST_TYPE.MANUAL) { diff --git a/src/pages/settings/Profile/PersonalDetails/LegalNamePage.tsx b/src/pages/settings/Profile/PersonalDetails/LegalNamePage.tsx index 3bf0b8fe877dc..353dc09e08a0e 100644 --- a/src/pages/settings/Profile/PersonalDetails/LegalNamePage.tsx +++ b/src/pages/settings/Profile/PersonalDetails/LegalNamePage.tsx @@ -11,23 +11,23 @@ import ScreenWrapper from '@components/ScreenWrapper'; import TextInput from '@components/TextInput'; import useLocalize from '@hooks/useLocalize'; import useThemeStyles from '@hooks/useThemeStyles'; -import {addErrorMessage} from '@libs/ErrorUtils'; +import * as ErrorUtils from '@libs/ErrorUtils'; import Navigation from '@libs/Navigation/Navigation'; -import {doesContainReservedWord, isValidLegalName} from '@libs/ValidationUtils'; -import {updateLegalName} from '@userActions/PersonalDetails'; +import * as ValidationUtils from '@libs/ValidationUtils'; +import * as PersonalDetails from '@userActions/PersonalDetails'; import CONST from '@src/CONST'; import ONYXKEYS from '@src/ONYXKEYS'; import INPUT_IDS from '@src/types/form/LegalNameForm'; import type {PrivatePersonalDetails} from '@src/types/onyx'; import type {Errors} from '@src/types/onyx/OnyxCommon'; -const updateLegalNameFromDetails = (values: PrivatePersonalDetails) => { - updateLegalName(values.legalFirstName?.trim() ?? '', values.legalLastName?.trim() ?? ''); +const updateLegalName = (values: PrivatePersonalDetails) => { + PersonalDetails.updateLegalName(values.legalFirstName?.trim() ?? '', values.legalLastName?.trim() ?? ''); }; function LegalNamePage() { - const [privatePersonalDetails] = useOnyx(ONYXKEYS.PRIVATE_PERSONAL_DETAILS, {canBeMissing: true}); - const [isLoadingApp] = useOnyx(ONYXKEYS.IS_LOADING_APP, {canBeMissing: true, initialValue: true}); + const [privatePersonalDetails] = useOnyx(ONYXKEYS.PRIVATE_PERSONAL_DETAILS); + const [isLoadingApp] = useOnyx(ONYXKEYS.IS_LOADING_APP, {initialValue: true}); const styles = useThemeStyles(); const {translate} = useLocalize(); @@ -39,36 +39,36 @@ function LegalNamePage() { const errors: Errors = {}; if (typeof values.legalFirstName === 'string') { - if (!isValidLegalName(values.legalFirstName)) { - addErrorMessage(errors, 'legalFirstName', translate('privatePersonalDetails.error.hasInvalidCharacter')); + if (!ValidationUtils.isValidLegalName(values.legalFirstName)) { + ErrorUtils.addErrorMessage(errors, 'legalFirstName', translate('privatePersonalDetails.error.hasInvalidCharacter')); } else if (!values.legalFirstName) { errors.legalFirstName = translate('common.error.fieldRequired'); } else if (values.legalFirstName.length > CONST.LEGAL_NAME.MAX_LENGTH) { - addErrorMessage( + ErrorUtils.addErrorMessage( errors, 'legalFirstName', translate('common.error.characterLimitExceedCounter', {length: values.legalFirstName.length, limit: CONST.LEGAL_NAME.MAX_LENGTH}), ); } - if (doesContainReservedWord(values.legalFirstName, CONST.DISPLAY_NAME.RESERVED_NAMES)) { - addErrorMessage(errors, 'legalFirstName', translate('personalDetails.error.containsReservedWord')); + if (ValidationUtils.doesContainReservedWord(values.legalFirstName, CONST.DISPLAY_NAME.RESERVED_NAMES)) { + ErrorUtils.addErrorMessage(errors, 'legalFirstName', translate('personalDetails.error.containsReservedWord')); } } if (typeof values.legalLastName === 'string') { - if (!isValidLegalName(values.legalLastName)) { - addErrorMessage(errors, 'legalLastName', translate('privatePersonalDetails.error.hasInvalidCharacter')); + if (!ValidationUtils.isValidLegalName(values.legalLastName)) { + ErrorUtils.addErrorMessage(errors, 'legalLastName', translate('privatePersonalDetails.error.hasInvalidCharacter')); } else if (!values.legalLastName) { errors.legalLastName = translate('common.error.fieldRequired'); } else if (values.legalLastName.length > CONST.LEGAL_NAME.MAX_LENGTH) { - addErrorMessage( + ErrorUtils.addErrorMessage( errors, 'legalLastName', translate('common.error.characterLimitExceedCounter', {length: values.legalLastName.length, limit: CONST.LEGAL_NAME.MAX_LENGTH}), ); } - if (doesContainReservedWord(values.legalLastName, CONST.DISPLAY_NAME.RESERVED_NAMES)) { - addErrorMessage(errors, 'legalLastName', translate('personalDetails.error.containsReservedWord')); + if (ValidationUtils.doesContainReservedWord(values.legalLastName, CONST.DISPLAY_NAME.RESERVED_NAMES)) { + ErrorUtils.addErrorMessage(errors, 'legalLastName', translate('personalDetails.error.containsReservedWord')); } } @@ -95,7 +95,7 @@ function LegalNamePage() { style={[styles.flexGrow1, styles.ph5]} formID={ONYXKEYS.FORMS.LEGAL_NAME_FORM} validate={validate} - onSubmit={updateLegalNameFromDetails} + onSubmit={updateLegalName} submitButtonText={translate('common.save')} enabledWhenOffline > diff --git a/src/pages/settings/Profile/PersonalDetails/PhoneNumberPage.tsx b/src/pages/settings/Profile/PersonalDetails/PhoneNumberPage.tsx index 1ddfcad0ddcd5..cc5fbb123a260 100644 --- a/src/pages/settings/Profile/PersonalDetails/PhoneNumberPage.tsx +++ b/src/pages/settings/Profile/PersonalDetails/PhoneNumberPage.tsx @@ -23,8 +23,8 @@ import INPUT_IDS from '@src/types/form/PersonalDetailsForm'; import type {PrivatePersonalDetails} from '@src/types/onyx'; function PhoneNumberPage() { - const [privatePersonalDetails] = useOnyx(ONYXKEYS.PRIVATE_PERSONAL_DETAILS, {canBeMissing: true}); - const [isLoadingApp] = useOnyx(ONYXKEYS.IS_LOADING_APP, {canBeMissing: true, initialValue: true}); + const [privatePersonalDetails] = useOnyx(ONYXKEYS.PRIVATE_PERSONAL_DETAILS); + const [isLoadingApp] = useOnyx(ONYXKEYS.IS_LOADING_APP, {initialValue: true}); const styles = useThemeStyles(); const {translate} = useLocalize(); const {inputCallbackRef} = useAutoFocusInput(); diff --git a/src/pages/workspace/tags/WorkspaceEditTagsPage.tsx b/src/pages/workspace/tags/WorkspaceEditTagsPage.tsx index e8cf01d19a1ce..d354a90d86495 100644 --- a/src/pages/workspace/tags/WorkspaceEditTagsPage.tsx +++ b/src/pages/workspace/tags/WorkspaceEditTagsPage.tsx @@ -25,7 +25,7 @@ import INPUT_IDS from '@src/types/form/PolicyTagNameForm'; type WorkspaceEditTagsPageProps = PlatformStackScreenProps; function WorkspaceEditTagsPage({route}: WorkspaceEditTagsPageProps) { - const [policyTags] = useOnyx(`${ONYXKEYS.COLLECTION.POLICY_TAGS}${route?.params?.policyID}`, {canBeMissing: true}); + const [policyTags] = useOnyx(`${ONYXKEYS.COLLECTION.POLICY_TAGS}${route?.params?.policyID}`); const styles = useThemeStyles(); const {translate} = useLocalize(); const tagListName = useMemo(() => getTagListName(policyTags, route.params.orderWeight), [policyTags, route.params.orderWeight]);