Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
17 changes: 2 additions & 15 deletions src/components/MoneyReportHeader.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -87,7 +87,6 @@
isExported as isExportedUtils,
isInvoiceReport as isInvoiceReportUtil,
isOpenExpenseReport,
isOpenReport,
isProcessingReport,
isReportOwner,
isSelfDM,
Expand All @@ -100,7 +99,6 @@
import type {SkeletonSpanReasonAttributes} from '@libs/telemetry/useSkeletonSpan';
import {
allHavePendingRTERViolation,
getChildTransactions,
getOriginalTransactionWithSplitInfo,
hasCustomUnitOutOfPolicyViolation as hasCustomUnitOutOfPolicyViolationTransactionUtils,
hasDuplicateTransactions,
Expand Down Expand Up @@ -383,17 +381,6 @@
const theme = useTheme();
const {isOffline} = useNetwork();
const {isExpenseSplit} = getOriginalTransactionWithSplitInfo(transaction, originalTransaction);
const [allTransactions] = useOnyx(ONYXKEYS.COLLECTION.TRANSACTION);
const [allReports] = useOnyx(ONYXKEYS.COLLECTION.REPORT);
const hasMultipleSplits = useMemo(() => {
if (!transaction?.comment?.originalTransactionID) {
return false;
}
const children = getChildTransactions(allTransactions, allReports, transaction.comment.originalTransactionID);
return children.length > 1;
}, [allTransactions, allReports, transaction?.comment?.originalTransactionID]);
const isReportOpen = isOpenReport(moneyRequestReport);
const shouldShowSplitIndicator = isExpenseSplit && (hasMultipleSplits || isReportOpen);

const [policies] = useOnyx(ONYXKEYS.COLLECTION.POLICY);
const [isDuplicateActive, temporarilyDisableDuplicateAction] = useThrottledButtonState();
Expand Down Expand Up @@ -768,7 +755,7 @@
}, [iouTransactionID, requestParentReportAction, transactionThreadReport?.reportID, transactionViolations]);

const [allPolicyTags] = useOnyx(ONYXKEYS.COLLECTION.POLICY_TAGS);
const targetPolicyTags = defaultExpensePolicy ? (allPolicyTags?.[`${ONYXKEYS.COLLECTION.POLICY_TAGS}${defaultExpensePolicy.id}`] ?? {}) : {};

Check warning on line 758 in src/components/MoneyReportHeader.tsx

View workflow job for this annotation

GitHub Actions / Changed files ESLint check

The 'targetPolicyTags' conditional could make the dependencies of useCallback Hook (at line 797) change on every render. Move it inside the useCallback callback. Alternatively, wrap the initialization of 'targetPolicyTags' in its own useMemo() Hook

Check warning on line 758 in src/components/MoneyReportHeader.tsx

View workflow job for this annotation

GitHub Actions / ESLint check

The 'targetPolicyTags' conditional could make the dependencies of useCallback Hook (at line 797) change on every render. Move it inside the useCallback callback. Alternatively, wrap the initialization of 'targetPolicyTags' in its own useMemo() Hook

const duplicateExpenseTransaction = useCallback(
(transactionList: OnyxTypes.Transaction[]) => {
Expand Down Expand Up @@ -1534,7 +1521,7 @@
},
},
[CONST.REPORT.SECONDARY_ACTIONS.SPLIT]: {
text: shouldShowSplitIndicator ? translate('iou.editSplits') : translate('iou.split'),
text: isExpenseSplit ? translate('iou.editSplits') : translate('iou.split'),
icon: expensifyIcons.ArrowSplit,
value: CONST.REPORT.SECONDARY_ACTIONS.SPLIT,
sentryLabel: CONST.SENTRY_LABEL.MORE_MENU.SPLIT,
Expand Down Expand Up @@ -1898,7 +1885,7 @@
}
return option;
});
}, [originalSelectedTransactionsOptions, showDeleteModal, dismissedRejectUseExplanation, isDelegateAccessRestricted, showDelegateNoAccessModal]);
}, [originalSelectedTransactionsOptions, showDeleteModal, dismissedRejectUseExplanation]);

Check warning on line 1888 in src/components/MoneyReportHeader.tsx

View workflow job for this annotation

GitHub Actions / Changed files ESLint check

React Hook useMemo has missing dependencies: 'isDelegateAccessRestricted' and 'showDelegateNoAccessModal'. Either include them or remove the dependency array

Check warning on line 1888 in src/components/MoneyReportHeader.tsx

View workflow job for this annotation

GitHub Actions / ESLint check

React Hook useMemo has missing dependencies: 'isDelegateAccessRestricted' and 'showDelegateNoAccessModal'. Either include them or remove the dependency array

const shouldShowSelectedTransactionsButton = !!selectedTransactionsOptions.length && !transactionThreadReportID;

Expand Down
12 changes: 1 addition & 11 deletions src/components/MoneyRequestHeader.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,6 @@ import {
getPolicyExpenseChat,
isCurrentUserSubmitter,
isDM,
isOpenReport,
isSelfDM,
navigateToDetailsPage,
rejectMoneyRequestReason,
Expand All @@ -52,7 +51,6 @@ import {getReviewNavigationRoute} from '@libs/TransactionPreviewUtils';
import {
getOriginalTransactionWithSplitInfo,
hasCustomUnitOutOfPolicyViolation as hasCustomUnitOutOfPolicyViolationTransactionUtils,
hasMultipleSplitChildren,
hasPendingRTERViolation as hasPendingRTERViolationTransactionUtils,
isDistanceRequest,
isDuplicate as isDuplicateTransactionUtils,
Expand Down Expand Up @@ -168,14 +166,6 @@ function MoneyRequestHeader({report, parentReportAction, policy, onBackButtonPre
const {currentSearchHash} = useSearchStateContext();
const {removeTransaction} = useSearchActionsContext();
const {isExpenseSplit} = getOriginalTransactionWithSplitInfo(transaction, originalTransaction);
const [allTransactions] = useOnyx(ONYXKEYS.COLLECTION.TRANSACTION);
const [allReports] = useOnyx(ONYXKEYS.COLLECTION.REPORT);
const hasMultipleSplits = useMemo(
() => hasMultipleSplitChildren(allTransactions, allReports, transaction?.comment?.originalTransactionID),
[allTransactions, allReports, transaction?.comment?.originalTransactionID],
);
const isReportOpen = isOpenReport(parentReport);
const shouldShowSplitIndicator = isExpenseSplit && (hasMultipleSplits || isReportOpen);
const [cardList] = useOnyx(ONYXKEYS.CARD_LIST);
const [transactionDrafts] = useOnyx(ONYXKEYS.COLLECTION.TRANSACTION_DRAFT, {selector: validTransactionDraftsSelector});
const draftTransactionIDs = Object.keys(transactionDrafts ?? {});
Expand Down Expand Up @@ -496,7 +486,7 @@ function MoneyRequestHeader({report, parentReportAction, policy, onBackButtonPre
},
},
[CONST.REPORT.TRANSACTION_SECONDARY_ACTIONS.SPLIT]: {
text: shouldShowSplitIndicator ? translate('iou.editSplits') : translate('iou.split'),
text: isExpenseSplit ? translate('iou.editSplits') : translate('iou.split'),
icon: expensifyIcons.ArrowSplit,
value: CONST.REPORT.SECONDARY_ACTIONS.SPLIT,
onSelected: () => {
Expand Down
18 changes: 4 additions & 14 deletions src/components/ReportActionItem/MoneyRequestView.tsx
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import {Str} from 'expensify-common';
import React, {useCallback, useMemo, useState} from 'react';
import React, {useCallback, useState} from 'react';
import {View} from 'react-native';
import type {OnyxCollection, OnyxEntry} from 'react-native-onyx';
import type {ValueOf} from 'type-fest';
Expand Down Expand Up @@ -69,7 +69,6 @@ import {
getTripIDFromTransactionParentReportID,
isExpenseReport,
isInvoiceReport,
isOpenReport,
isPaidGroupPolicy,
isReportApproved,
isReportInGroupPolicy,
Expand All @@ -90,7 +89,6 @@ import {
getTagForDisplay,
getTaxName,
hasMissingSmartscanFields,
hasMultipleSplitChildren,
hasReservationList,
hasRoute as hasRouteTransactionUtils,
isFromCreditCardImport as isCardTransactionTransactionUtils,
Expand Down Expand Up @@ -330,14 +328,6 @@ function MoneyRequestView({
const [originalTransaction] = useOnyx(`${ONYXKEYS.COLLECTION.TRANSACTION}${getNonEmptyStringOnyxID(transaction?.comment?.originalTransactionID)}`);
const {isExpenseSplit} = getOriginalTransactionWithSplitInfo(transaction, originalTransaction);
const [transactionReport] = useOnyx(`${ONYXKEYS.COLLECTION.REPORT}${transaction?.reportID}`);
const [allTransactions] = useOnyx(ONYXKEYS.COLLECTION.TRANSACTION);
const [allReports] = useOnyx(ONYXKEYS.COLLECTION.REPORT);
const hasMultipleSplits = useMemo(
() => hasMultipleSplitChildren(allTransactions, allReports, transaction?.comment?.originalTransactionID),
[allTransactions, allReports, transaction?.comment?.originalTransactionID],
);
const isReportOpen = isOpenReport(moneyRequestReport);
const shouldShowSplitIndicator = isExpenseSplit && (hasMultipleSplits || isReportOpen);
const isSplitAvailable =
moneyRequestReport &&
transaction &&
Expand All @@ -347,7 +337,7 @@ function MoneyRequestView({
const canEditAmount =
!isGPSDistanceRequest &&
isEditable &&
(canEditFieldOfMoneyRequest(parentReportAction, CONST.EDIT_REQUEST_FIELD.AMOUNT, undefined, isChatReportArchived) || (shouldShowSplitIndicator && isSplitAvailable));
(canEditFieldOfMoneyRequest(parentReportAction, CONST.EDIT_REQUEST_FIELD.AMOUNT, undefined, isChatReportArchived) || (isExpenseSplit && isSplitAvailable));
const canEditMerchant =
isEditable && canEditFieldOfMoneyRequest(parentReportAction, CONST.EDIT_REQUEST_FIELD.MERCHANT, undefined, isChatReportArchived, undefined, transaction, moneyRequestReport, policy);

Expand Down Expand Up @@ -512,7 +502,7 @@ function MoneyRequestView({
} else if (shouldShowPaid) {
amountDescription += ` ${CONST.DOT_SEPARATOR} ${translate('iou.settledExpensify')}`;
}
if (shouldShowSplitIndicator) {
if (isExpenseSplit) {
amountDescription += ` ${CONST.DOT_SEPARATOR} ${translate('iou.split')}`;
}
if (shouldShowConvertedAmount) {
Expand Down Expand Up @@ -820,7 +810,7 @@ function MoneyRequestView({
return;
}

if (shouldShowSplitIndicator && isSplitAvailable) {
if (isExpenseSplit && isSplitAvailable) {
initSplitExpense(transaction, policy);
return;
}
Expand Down
11 changes: 0 additions & 11 deletions src/libs/TransactionUtils/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2673,16 +2673,6 @@ function getChildTransactions(transactions: OnyxCollection<Transaction>, reports
});
}

/**
* Checks if a split transaction has more than one child transaction.
*/
function hasMultipleSplitChildren(transactions: OnyxCollection<Transaction>, reports: OnyxCollection<Report>, originalTransactionID: string | undefined): boolean {
if (!originalTransactionID) {
return false;
}
return getChildTransactions(transactions, reports, originalTransactionID).length > 1;
}

/**
* Determines whether a report should display the expense breakdown.
*/
Expand Down Expand Up @@ -2892,7 +2882,6 @@ export {
getTransactionPendingAction,
isTransactionPendingDelete,
getChildTransactions,
hasMultipleSplitChildren,
createUnreportedExpenses,
isDemoTransaction,
shouldShowViolation,
Expand Down
11 changes: 4 additions & 7 deletions src/libs/actions/SplitExpenses.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ import {calculateAmount} from '@libs/IOUUtils';
import isSearchTopmostFullScreenRoute from '@libs/Navigation/helpers/isSearchTopmostFullScreenRoute';
import Navigation from '@libs/Navigation/Navigation';
import {rand64} from '@libs/NumberUtils';
import {getTransactionDetails, isOpenReport} from '@libs/ReportUtils';
import {getTransactionDetails} from '@libs/ReportUtils';
import {buildOptimisticTransaction, getChildTransactions, getOriginalTransactionWithSplitInfo, isDistanceRequest} from '@libs/TransactionUtils';
import CONST from '@src/CONST';
import ONYXKEYS from '@src/ONYXKEYS';
Expand Down Expand Up @@ -47,13 +47,9 @@ function initSplitExpense(transaction: OnyxEntry<Transaction>, policy?: OnyxEntr
const originalTransactionID = transaction?.comment?.originalTransactionID;
const originalTransaction = allTransactions?.[`${ONYXKEYS.COLLECTION.TRANSACTION}${originalTransactionID}`];
const {isExpenseSplit} = getOriginalTransactionWithSplitInfo(transaction, originalTransaction);
const relatedTransactions = getChildTransactions(allTransactions, allReports, originalTransactionID);
const hasMultipleSplits = relatedTransactions.length > 1;
const transactionReport = allReports?.[`${ONYXKEYS.COLLECTION.REPORT}${transaction?.reportID}`];
const isReportOpen = isOpenReport(transactionReport);
const shouldShowSplitIndicator = isExpenseSplit && (hasMultipleSplits || isReportOpen);

if (isExpenseSplit && shouldShowSplitIndicator) {
if (isExpenseSplit) {
const relatedTransactions = getChildTransactions(allTransactions, allReports, originalTransactionID);
const transactionDetails = getTransactionDetails(originalTransaction);
const splitExpenses = relatedTransactions.map((currentTransaction) => {
const currentTransactionReport = allReports?.[`${ONYXKEYS.COLLECTION.REPORT}${currentTransaction?.reportID}`];
Expand Down Expand Up @@ -85,6 +81,7 @@ function initSplitExpense(transaction: OnyxEntry<Transaction>, policy?: OnyxEntr

const transactionDetails = getTransactionDetails(transaction);
const transactionDetailsAmount = transactionDetails?.amount ?? 0;
const transactionReport = allReports?.[`${ONYXKEYS.COLLECTION.REPORT}${transaction?.reportID}`];

const splitAmounts = [
calculateAmount(1, transactionDetailsAmount, transactionDetails?.currency ?? '', false),
Expand Down
Loading