diff --git a/src/libs/actions/Policy/Policy.ts b/src/libs/actions/Policy/Policy.ts index d9e2a7b6f3f7..d54f16ac853e 100644 --- a/src/libs/actions/Policy/Policy.ts +++ b/src/libs/actions/Policy/Policy.ts @@ -486,8 +486,7 @@ function deleteWorkspace(params: DeleteWorkspaceActionParams) { const finallyData: OnyxUpdate[] = []; const currentTime = DateUtils.getDBTime(); - // eslint-disable-next-line unicorn/no-array-for-each - reportsToArchive.forEach((report) => { + for (const report of reportsToArchive) { const {reportID, ownerAccountID, oldPolicyName} = report ?? {}; const isInvoiceReceiverReport = report?.invoiceReceiver && 'policyID' in report.invoiceReceiver && report.invoiceReceiver.policyID === policyID; optimisticData.push({ @@ -576,14 +575,13 @@ function deleteWorkspace(params: DeleteWorkspaceActionParams) { value: transactionViolation, }); } - }); + } - // eslint-disable-next-line unicorn/no-array-for-each - Object.keys(lastUsedPaymentMethods ?? {})?.forEach((paymentMethodKey) => { + for (const paymentMethodKey of Object.keys(lastUsedPaymentMethods ?? {})) { const lastUsedPaymentMethod = lastUsedPaymentMethods?.[paymentMethodKey]; if (typeof lastUsedPaymentMethod === 'string' || !lastUsedPaymentMethod) { - return; + continue; } if (lastUsedPaymentMethod?.iou?.name === policyID) { @@ -617,8 +615,7 @@ function deleteWorkspace(params: DeleteWorkspaceActionParams) { }, }); } - }); - + } const apiParams: DeleteWorkspaceParams = {policyID}; API.write(WRITE_COMMANDS.DELETE_WORKSPACE, apiParams, {optimisticData, finallyData, failureData}); @@ -1086,13 +1083,12 @@ function leaveWorkspace(policyID?: string) { const currentTime = DateUtils.getDBTime(); const pendingChatMembers = ReportUtils.getPendingChatMembers([deprecatedSessionAccountID], [], CONST.RED_BRICK_ROAD_PENDING_ACTION.DELETE); - // eslint-disable-next-line unicorn/no-array-for-each - workspaceChats.forEach((report) => { + for (const report of workspaceChats) { const parentReport = ReportUtils.getRootParentReport({report}); const reportToCheckOwner = isEmptyObject(parentReport) ? report : parentReport; if (ReportUtils.isPolicyExpenseChat(report) && !ReportUtils.isReportOwner(reportToCheckOwner)) { - return; + continue; } optimisticData.push( @@ -1144,7 +1140,7 @@ function leaveWorkspace(policyID?: string) { pendingChatMembers: null, }, }); - }); + } const params: LeavePolicyParams = { policyID, @@ -1302,8 +1298,7 @@ function createPolicyExpenseChats( reportCreationData: {}, }; - // eslint-disable-next-line unicorn/no-array-for-each - Object.keys(invitedEmailsToAccountIDs).forEach((email) => { + for (const email of Object.keys(invitedEmailsToAccountIDs)) { const accountID = invitedEmailsToAccountIDs[email]; const cleanAccountID = Number(accountID); const login = PhoneNumber.addSMSDomainIfPhoneNumber(email); @@ -1333,10 +1328,9 @@ function createPolicyExpenseChats( }); const currentTime = DateUtils.getDBTime(); const reportActions = deprecatedAllReportActions?.[`${ONYXKEYS.COLLECTION.REPORT_ACTIONS}${oldChat.reportID}`] ?? {}; - // eslint-disable-next-line unicorn/no-array-for-each - Object.values(reportActions).forEach((action) => { + for (const action of Object.values(reportActions)) { if (action.actionName !== CONST.REPORT.ACTIONS.TYPE.REPORT_PREVIEW) { - return; + continue; } workspaceMembersChats.onyxOptimisticData.push({ onyxMethod: Onyx.METHOD.MERGE, @@ -1352,8 +1346,8 @@ function createPolicyExpenseChats( private_isArchived: currentTime, }, }); - }); - return; + } + continue; } const optimisticReport = ReportUtils.buildOptimisticChatReport({ participantList: [deprecatedSessionAccountID, cleanAccountID], @@ -1457,7 +1451,7 @@ function createPolicyExpenseChats( }, }, }); - }); + } return workspaceMembersChats; } @@ -2423,30 +2417,27 @@ function buildPolicyData(options: BuildPolicyDataOptions = {}) { } if (getAdminPolicies().length === 0 && lastUsedPaymentMethod) { - Object.values(deprecatedAllReports ?? {}) - .filter((iouReport) => iouReport?.type === CONST.REPORT.TYPE.IOU) - // eslint-disable-next-line unicorn/no-array-for-each - .forEach((iouReport) => { - // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing - if (lastUsedPaymentMethod?.iou?.name || !iouReport?.policyID) { - return; - } + for (const report of Object.values(deprecatedAllReports ?? {})) { + if (report?.type !== CONST.REPORT.TYPE.IOU) { + continue; + } - successData.push({ - onyxMethod: Onyx.METHOD.MERGE, - key: ONYXKEYS.NVP_LAST_PAYMENT_METHOD, - value: { - [iouReport?.policyID]: { - iou: { - name: policyID, - }, - lastUsed: { - name: policyID, - }, + if (lastUsedPaymentMethod?.iou?.name || !report?.policyID) { + continue; + } + + successData.push({ + onyxMethod: Onyx.METHOD.MERGE, + key: ONYXKEYS.NVP_LAST_PAYMENT_METHOD, + value: { + [report?.policyID]: { + iou: { + name: policyID, }, }, - }); + }, }); + } } // We need to clone the file to prevent non-indexable errors. @@ -3771,8 +3762,7 @@ function createWorkspaceFromIOUPayment(iouReport: OnyxEntry): WorkspaceF // For performance reasons, we are going to compose a merge collection data for transactions const transactionsOptimisticData: Record = {}; const transactionFailureData: Record = {}; - // eslint-disable-next-line unicorn/no-array-for-each - reportTransactions.forEach((transaction) => { + for (const transaction of reportTransactions) { transactionsOptimisticData[`${ONYXKEYS.COLLECTION.TRANSACTION}${transaction.transactionID}`] = { ...transaction, amount: -transaction.amount, @@ -3780,7 +3770,7 @@ function createWorkspaceFromIOUPayment(iouReport: OnyxEntry): WorkspaceF }; transactionFailureData[`${ONYXKEYS.COLLECTION.TRANSACTION}${transaction.transactionID}`] = transaction; - }); + } optimisticData.push({ onyxMethod: Onyx.METHOD.MERGE_COLLECTION, @@ -6200,8 +6190,9 @@ function clearAllPolicies() { if (!deprecatedAllPolicies) { return; } - // eslint-disable-next-line unicorn/no-array-for-each - Object.keys(deprecatedAllPolicies).forEach((key) => delete deprecatedAllPolicies[key]); + for (const key of Object.keys(deprecatedAllPolicies)) { + delete deprecatedAllPolicies[key]; + } } function updateInvoiceCompanyName(policyID: string, companyName: string) { diff --git a/src/libs/actions/Search.ts b/src/libs/actions/Search.ts index 1ba7b10611c3..c23a9ad88126 100644 --- a/src/libs/actions/Search.ts +++ b/src/libs/actions/Search.ts @@ -421,8 +421,7 @@ function search({ function holdMoneyRequestOnSearch(hash: number, transactionIDList: string[], comment: string, allTransactions: OnyxCollection, allReportActions: OnyxCollection) { const {optimisticData, finallyData} = getOnyxLoadingData(hash); - // eslint-disable-next-line unicorn/no-array-for-each - transactionIDList.forEach((transactionID) => { + for (const transactionID of transactionIDList) { const transaction = allTransactions?.[`${ONYXKEYS.COLLECTION.TRANSACTION}${transactionID}`]; const reportActions = allReportActions?.[`${ONYXKEYS.COLLECTION.REPORT_ACTIONS}${transaction?.reportID}`] ?? {}; const iouReportAction = getIOUActionForTransactionID(Object.values(reportActions ?? {}), transactionID); @@ -437,7 +436,7 @@ function holdMoneyRequestOnSearch(hash: number, transactionIDList: string[], com }, }); } - }); + } API.write(WRITE_COMMANDS.HOLD_MONEY_REQUEST_ON_SEARCH, {hash, transactionIDList, comment}, {optimisticData, finallyData}); } @@ -792,34 +791,46 @@ function rejectMoneyRequestsOnSearch(hash: number, selectedTransactions: Selecte type Params = Record; function exportSearchItemsToCSV({query, jsonQuery, reportIDList, transactionIDList}: ExportSearchItemsToCSVParams, onDownloadFailed: () => void) { - const reportIDListParams: string[] = []; - // eslint-disable-next-line unicorn/no-array-for-each - reportIDList.forEach((reportID) => { - const allReportTransactions = getReportTransactions(reportID).filter((transaction) => transaction.pendingAction !== CONST.RED_BRICK_ROAD_PENDING_ACTION.DELETE); - const allTransactionIDs = allReportTransactions.map((transaction) => transaction.transactionID); - if (allTransactionIDs.every((transactionID) => transactionIDList.includes(transactionID))) { - if (reportIDListParams.includes(reportID)) { - return; + const reportIDSet = new Set(); + const transactionIDSet = new Set(transactionIDList); + for (const reportID of reportIDList) { + const allReportTransactions = getReportTransactions(reportID); + + // We'll include the report if all of its transactions are included in the transactionIDList + let areAllTransactionsIncludedInList = true; + for (const transaction of allReportTransactions) { + // Ignore transactions that are pending deletion + if (transaction.pendingAction === CONST.RED_BRICK_ROAD_PENDING_ACTION.DELETE) { + continue; + } + + // If any transaction is not included in the transactionIDList, we'll exclude the report + if (!transactionIDSet.has(transaction.transactionID)) { + areAllTransactionsIncludedInList = false; + break; } - reportIDListParams.push(reportID); } - }); + + if (areAllTransactionsIncludedInList) { + reportIDSet.add(reportID); + } + } + const finalParameters = enhanceParameters(WRITE_COMMANDS.EXPORT_SEARCH_ITEMS_TO_CSV, { query, jsonQuery, - reportIDList: reportIDListParams, + reportIDList: Array.from(reportIDSet), transactionIDList, }) as Params; const formData = new FormData(); - // eslint-disable-next-line unicorn/no-array-for-each - Object.entries(finalParameters).forEach(([key, value]) => { + for (const [key, value] of Object.entries(finalParameters)) { if (Array.isArray(value)) { formData.append(key, value.join(',')); } else { formData.append(key, SafeString(value)); } - }); + } fileDownload(getCommandURL({command: WRITE_COMMANDS.EXPORT_SEARCH_ITEMS_TO_CSV}), 'Expensify.csv', '', false, formData, CONST.NETWORK.METHOD.POST, onDownloadFailed); } @@ -920,23 +931,20 @@ function clearAllFilters() { function clearAdvancedFilters() { const values: Partial> = {}; - Object.values(FILTER_KEYS) - .filter((key) => key !== FILTER_KEYS.GROUP_BY) - // eslint-disable-next-line unicorn/no-array-for-each - .forEach((key) => { - if (key === FILTER_KEYS.TYPE) { + for (const key of Object.values(FILTER_KEYS)) { + switch (key) { + case FILTER_KEYS.GROUP_BY: + continue; + case FILTER_KEYS.TYPE: values[key] = CONST.SEARCH.DATA_TYPES.EXPENSE; - return; - } - - if (key === FILTER_KEYS.STATUS) { + continue; + case FILTER_KEYS.STATUS: values[key] = CONST.SEARCH.STATUS.EXPENSE.ALL; - return; - } - - values[key] = null; - }); - + continue; + default: + values[key] = null; + } + } Onyx.merge(ONYXKEYS.FORMS.SEARCH_ADVANCED_FILTERS_FORM, values); } diff --git a/src/libs/actions/User.ts b/src/libs/actions/User.ts index b2d6a8a32c43..be0d271da85a 100644 --- a/src/libs/actions/User.ts +++ b/src/libs/actions/User.ts @@ -568,10 +568,9 @@ function validateSecondaryLogin( ], ); - // eslint-disable-next-line unicorn/no-array-for-each - Object.values(allPolicies ?? {}).forEach((policy) => { + for (const policy of Object.values(allPolicies ?? {})) { if (!policy) { - return; + continue; } let optimisticPolicyDataValue; @@ -600,7 +599,7 @@ function validateSecondaryLogin( value: optimisticPolicyDataValue, }); } - }); + } } const failureData: OnyxUpdate[] = [ @@ -662,18 +661,20 @@ function isBlockedFromConcierge(blockedFromConciergeNVP: OnyxEntry { + for (const update of onyxUpdates) { if (!update.shouldNotify && !update.shouldShowPushNotification) { - return; + continue; } const reportID = update.key.replace(ONYXKEYS.COLLECTION.REPORT_ACTIONS, ''); const reportActions = Object.values((update.value as OnyxCollection) ?? {}); - // eslint-disable-next-line unicorn/no-array-for-each - reportActions.forEach((action) => action && showReportActionNotification(reportID, action)); - }); + for (const action of reportActions) { + if (action) { + showReportActionNotification(reportID, action); + } + } + } } const isChannelMuted = (reportId: string) => @@ -1211,10 +1212,9 @@ function setContactMethodAsDefault(newDefaultContactMethod: string, formatPhoneN }, ]; - // eslint-disable-next-line unicorn/no-array-for-each - Object.values(allPolicies ?? {}).forEach((policy) => { + for (const policy of Object.values(allPolicies ?? {})) { if (!policy) { - return; + continue; } let optimisticPolicyDataValue; @@ -1259,7 +1259,7 @@ function setContactMethodAsDefault(newDefaultContactMethod: string, formatPhoneN value: failurePolicyDataValue, }); } - }); + } const parameters: SetContactMethodAsDefaultParams = { partnerUserID: newDefaultContactMethod, }; diff --git a/src/pages/ReimbursementAccount/EnterSignerInfo/utils/getSignerDetailsAndSignerFiles.ts b/src/pages/ReimbursementAccount/EnterSignerInfo/utils/getSignerDetailsAndSignerFiles.ts index bc57c51ce4b9..ffd54df004e5 100644 --- a/src/pages/ReimbursementAccount/EnterSignerInfo/utils/getSignerDetailsAndSignerFiles.ts +++ b/src/pages/ReimbursementAccount/EnterSignerInfo/utils/getSignerDetailsAndSignerFiles.ts @@ -21,29 +21,28 @@ function getSignerDetailsAndSignerFilesForSignerInfo(enterSignerInfoFormDraft: O const signerDetails: Record = {}; const signerFiles: Record = {}; - // eslint-disable-next-line unicorn/no-array-for-each - signerDetailsFields.forEach((fieldName: keyof EnterSignerInfoForm) => { + for (const fieldName of signerDetailsFields as Array) { if (fieldName === INPUT_IDS.SIGNER_EMAIL) { signerDetails[fieldName] = signerEmail; - return; + continue; } if (!enterSignerInfoFormDraft?.[fieldName]) { - return; + continue; } if (fieldName === INPUT_IDS.SIGNER_STREET || fieldName === INPUT_IDS.SIGNER_CITY || fieldName === INPUT_IDS.SIGNER_STATE || fieldName === INPUT_IDS.SIGNER_ZIP_CODE) { signerDetails[INPUT_IDS.SIGNER_COMPLETE_RESIDENTIAL_ADDRESS] = signerDetails[INPUT_IDS.SIGNER_COMPLETE_RESIDENTIAL_ADDRESS] ? `${SafeString(signerDetails[INPUT_IDS.SIGNER_COMPLETE_RESIDENTIAL_ADDRESS])}, ${String(enterSignerInfoFormDraft?.[fieldName])}` : enterSignerInfoFormDraft?.[fieldName]; - return; + continue; } const value = enterSignerInfoFormDraft?.[fieldName]; if (typeof value === 'string' || typeof value === 'boolean' || Array.isArray(value)) { signerDetails[fieldName] = value; } - }); + } for (const fieldName of signerFilesFields) { if (!enterSignerInfoFormDraft?.[fieldName]) { diff --git a/src/pages/ReimbursementAccount/NonUSD/BankInfo/subSteps/BankAccountDetails.tsx b/src/pages/ReimbursementAccount/NonUSD/BankInfo/subSteps/BankAccountDetails.tsx index 424ca05de196..23eae2db2686 100644 --- a/src/pages/ReimbursementAccount/NonUSD/BankInfo/subSteps/BankAccountDetails.tsx +++ b/src/pages/ReimbursementAccount/NonUSD/BankInfo/subSteps/BankAccountDetails.tsx @@ -56,31 +56,31 @@ function BankAccountDetails({onNext, isEditing, corpayFields}: BankInfoSubStepPr (values: FormOnyxValues): FormInputErrors => { const errors: FormInputErrors = {}; - // eslint-disable-next-line unicorn/no-array-for-each - corpayFields?.formFields?.forEach((field) => { - const fieldID = field.id as keyof FormOnyxValues; + if (corpayFields?.formFields) { + for (const field of corpayFields.formFields) { + const fieldID = field.id as keyof FormOnyxValues; - if (field.isRequired && !values[fieldID]) { - errors[fieldID] = translate('common.error.fieldRequired'); - } - - // eslint-disable-next-line unicorn/no-array-for-each - field.validationRules.forEach((rule) => { - if (!rule.regEx) { - return; + if (field.isRequired && !values[fieldID]) { + errors[fieldID] = translate('common.error.fieldRequired'); } - if (new RegExp(rule.regEx).test(SafeString(values[fieldID]))) { - return; - } + for (const rule of field.validationRules) { + if (!rule.regEx) { + continue; + } + + if (new RegExp(rule.regEx).test(SafeString(values[fieldID]))) { + continue; + } - errors[fieldID] = rule.errorMessage; - }); - }); + errors[fieldID] = rule.errorMessage; + } + } + } return errors; }, - [corpayFields, translate], + [corpayFields?.formFields, translate], ); const handleSubmit = useReimbursementAccountStepFormSubmit({