From 242eecff4accd7388772b835dcbfba83aec74b60 Mon Sep 17 00:00:00 2001 From: gelocraft Date: Fri, 5 Dec 2025 03:21:44 +0000 Subject: [PATCH 1/4] fix(eslint): fix remaining unicorn/no-array-for-each violations --- src/components/SettlementButton/index.tsx | 5 ++-- .../useDuplicateTransactionsAndViolations.ts | 26 +++++++++---------- 2 files changed, 15 insertions(+), 16 deletions(-) diff --git a/src/components/SettlementButton/index.tsx b/src/components/SettlementButton/index.tsx index d48f9276fae7c..e163ea445e846 100644 --- a/src/components/SettlementButton/index.tsx +++ b/src/components/SettlementButton/index.tsx @@ -305,8 +305,7 @@ function SettlementButton({ } if ((hasMultiplePolicies || hasSinglePolicy) && canUseWallet && !isPersonalOnlyOption) { - // eslint-disable-next-line unicorn/no-array-for-each - activeAdminPolicies.forEach((p) => { + for (const p of activeAdminPolicies) { const policyName = p.name; buttonOptions.push({ text: translate('iou.payWithPolicy', {policyName: truncate(policyName, {length: CONST.ADDITIONAL_ALLOWED_CHARACTERS}), formattedAmount: ''}), @@ -314,7 +313,7 @@ function SettlementButton({ value: p.id, shouldUpdateSelectedIndex: false, }); - }); + } } if (shouldShowPayElsewhereOption) { diff --git a/src/hooks/useDuplicateTransactionsAndViolations.ts b/src/hooks/useDuplicateTransactionsAndViolations.ts index cc8fadaccd27f..c48fb9abc39e7 100644 --- a/src/hooks/useDuplicateTransactionsAndViolations.ts +++ b/src/hooks/useDuplicateTransactionsAndViolations.ts @@ -29,22 +29,22 @@ function selectViolationsWithDuplicates(transactionIDs: string[], allTransaction result[key] = transactionViolations; - transactionViolations + const duplicateTransactionIDs = transactionViolations .filter((violations) => violations.name === CONST.VIOLATIONS.DUPLICATED_TRANSACTION) - .flatMap((violations) => violations?.data?.duplicates ?? []) - // eslint-disable-next-line unicorn/no-array-for-each - .forEach((duplicateID) => { - if (!duplicateID) { - return; - } + .flatMap((violations) => violations?.data?.duplicates ?? []); + + for (const duplicateID of duplicateTransactionIDs) { + if (!duplicateID) { + continue; + } - const duplicateKey = `${ONYXKEYS.COLLECTION.TRANSACTION_VIOLATIONS}${duplicateID}`; - const duplicateViolations = allTransactionsViolations[duplicateKey]; + const duplicateKey = `${ONYXKEYS.COLLECTION.TRANSACTION_VIOLATIONS}${duplicateID}`; + const duplicateViolations = allTransactionsViolations[duplicateKey]; - if (duplicateViolations) { - result[duplicateKey] = duplicateViolations; - } - }); + if (duplicateViolations) { + result[duplicateKey] = duplicateViolations; + } + } } return result; From 314d652a66439501c23fae39f7823c2e823cacbb Mon Sep 17 00:00:00 2001 From: gelocraft Date: Tue, 9 Dec 2025 23:36:47 +0000 Subject: [PATCH 2/4] fix(typecheck): fix incorrect return type --- src/components/SettlementButton/index.tsx | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/components/SettlementButton/index.tsx b/src/components/SettlementButton/index.tsx index e163ea445e846..87b704b28e68b 100644 --- a/src/components/SettlementButton/index.tsx +++ b/src/components/SettlementButton/index.tsx @@ -2,9 +2,10 @@ import {isUserValidatedSelector} from '@selectors/Account'; import isEmpty from 'lodash/isEmpty'; import truncate from 'lodash/truncate'; import React, {useCallback, useContext, useMemo} from 'react'; -import type {GestureResponderEvent} from 'react-native'; +import type {GestureResponderEvent, StyleProp, ViewStyle} from 'react-native'; import type {TupleToUnion} from 'type-fest'; import ButtonWithDropdownMenu from '@components/ButtonWithDropdownMenu'; +import type {DropdownOption, PaymentType} from '@components/ButtonWithDropdownMenu/types'; // eslint-disable-next-line no-restricted-imports import * as Expensicons from '@components/Icon/Expensicons'; // eslint-disable-next-line no-restricted-imports @@ -236,7 +237,7 @@ function SettlementButton({ const latestBankItem = getLatestBankAccountItem(); const paymentButtonOptions = useMemo(() => { - const buttonOptions = []; + const buttonOptions: Array & {iconStyles?: StyleProp}> = []; const paymentMethods = getSettlementButtonPaymentMethods(icons, hasActivatedWallet, translate); const shortFormPayElsewhereButton = { From 809911bb1f99d1cf72614d7e7ad146e6bb7b2f44 Mon Sep 17 00:00:00 2001 From: gelocraft Date: Wed, 10 Dec 2025 10:51:26 +0000 Subject: [PATCH 3/4] fix(typecheck): 'duplicateTransactionIDs','transactionViolations' implicitly has type 'any' --- src/hooks/useDuplicateTransactionsAndViolations.ts | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/hooks/useDuplicateTransactionsAndViolations.ts b/src/hooks/useDuplicateTransactionsAndViolations.ts index c48fb9abc39e7..58cb2480ca3c0 100644 --- a/src/hooks/useDuplicateTransactionsAndViolations.ts +++ b/src/hooks/useDuplicateTransactionsAndViolations.ts @@ -2,7 +2,7 @@ import {useMemo} from 'react'; import type {OnyxCollection} from 'react-native-onyx'; import CONST from '@src/CONST'; import ONYXKEYS from '@src/ONYXKEYS'; -import type {Transaction, TransactionViolations} from '@src/types/onyx'; +import type {Transaction, TransactionViolation, TransactionViolations} from '@src/types/onyx'; import useOnyx from './useOnyx'; /** @@ -21,7 +21,7 @@ function selectViolationsWithDuplicates(transactionIDs: string[], allTransaction for (const transactionID of transactionIDs) { const key = `${ONYXKEYS.COLLECTION.TRANSACTION_VIOLATIONS}${transactionID}`; - const transactionViolations = allTransactionsViolations[key]; + const transactionViolations: TransactionViolations | undefined = allTransactionsViolations[key]; if (!transactionViolations) { continue; @@ -30,8 +30,8 @@ function selectViolationsWithDuplicates(transactionIDs: string[], allTransaction result[key] = transactionViolations; const duplicateTransactionIDs = transactionViolations - .filter((violations) => violations.name === CONST.VIOLATIONS.DUPLICATED_TRANSACTION) - .flatMap((violations) => violations?.data?.duplicates ?? []); + .filter((violation: TransactionViolation) => violation.name === CONST.VIOLATIONS.DUPLICATED_TRANSACTION) + .flatMap((violation) => violation.data?.duplicates ?? []); for (const duplicateID of duplicateTransactionIDs) { if (!duplicateID) { @@ -39,7 +39,7 @@ function selectViolationsWithDuplicates(transactionIDs: string[], allTransaction } const duplicateKey = `${ONYXKEYS.COLLECTION.TRANSACTION_VIOLATIONS}${duplicateID}`; - const duplicateViolations = allTransactionsViolations[duplicateKey]; + const duplicateViolations: TransactionViolations | undefined = allTransactionsViolations[duplicateKey]; if (duplicateViolations) { result[duplicateKey] = duplicateViolations; From f8bd8862be1f69c762885a1b618239a6e2a6b77c Mon Sep 17 00:00:00 2001 From: gelocraft Date: Fri, 12 Dec 2025 21:24:00 +0000 Subject: [PATCH 4/4] refactor: accept roryabraham patch suggestion --- src/components/SettlementButton/index.tsx | 16 ++++++---------- 1 file changed, 6 insertions(+), 10 deletions(-) diff --git a/src/components/SettlementButton/index.tsx b/src/components/SettlementButton/index.tsx index 87b704b28e68b..9e5b4898c3e7a 100644 --- a/src/components/SettlementButton/index.tsx +++ b/src/components/SettlementButton/index.tsx @@ -2,10 +2,10 @@ import {isUserValidatedSelector} from '@selectors/Account'; import isEmpty from 'lodash/isEmpty'; import truncate from 'lodash/truncate'; import React, {useCallback, useContext, useMemo} from 'react'; -import type {GestureResponderEvent, StyleProp, ViewStyle} from 'react-native'; +import type {GestureResponderEvent} from 'react-native'; import type {TupleToUnion} from 'type-fest'; import ButtonWithDropdownMenu from '@components/ButtonWithDropdownMenu'; -import type {DropdownOption, PaymentType} from '@components/ButtonWithDropdownMenu/types'; +import type {DropdownOption} from '@components/ButtonWithDropdownMenu/types'; // eslint-disable-next-line no-restricted-imports import * as Expensicons from '@components/Icon/Expensicons'; // eslint-disable-next-line no-restricted-imports @@ -237,7 +237,7 @@ function SettlementButton({ const latestBankItem = getLatestBankAccountItem(); const paymentButtonOptions = useMemo(() => { - const buttonOptions: Array & {iconStyles?: StyleProp}> = []; + const buttonOptions: Array> = []; const paymentMethods = getSettlementButtonPaymentMethods(icons, hasActivatedWallet, translate); const shortFormPayElsewhereButton = { @@ -294,7 +294,7 @@ function SettlementButton({ buttonOptions.push({ text: latestBankItem.at(0)?.text ?? '', icon: latestBankItem.at(0)?.icon, - iconStyles: latestBankItem.at(0)?.iconStyles, + additionalIconStyles: latestBankItem.at(0)?.iconStyles, iconWidth: latestBankItem.at(0)?.iconSize, iconHeight: latestBankItem.at(0)?.iconSize, value: CONST.PAYMENT_METHODS.BUSINESS_BANK_ACCOUNT, @@ -538,11 +538,7 @@ function SettlementButton({ return undefined; }; - const handlePaymentSelection = ( - event: GestureResponderEvent | KeyboardEvent | undefined, - selectedOption: PaymentMethodType | PaymentMethod, - triggerKYCFlow: (params: ContinueActionParams) => void, - ) => { + const handlePaymentSelection = (event: GestureResponderEvent | KeyboardEvent | undefined, selectedOption: string, triggerKYCFlow: (params: ContinueActionParams) => void) => { if (checkForNecessaryAction()) { return; } @@ -595,7 +591,7 @@ function SettlementButton({ shouldShowPersonalBankAccountOption={shouldShowPersonalBankAccountOption} > {(triggerKYCFlow, buttonRef) => ( - + onOptionsMenuShow={onPaymentOptionsShow} onOptionsMenuHide={onPaymentOptionsHide} buttonRef={buttonRef}