diff --git a/assets/images/arrow-split.svg b/assets/images/arrow-split.svg
deleted file mode 100644
index 6cc763cc1824..000000000000
--- a/assets/images/arrow-split.svg
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
\ No newline at end of file
diff --git a/src/CONST.ts b/src/CONST.ts
index 67557704b93e..75ded011afaf 100755
--- a/src/CONST.ts
+++ b/src/CONST.ts
@@ -1226,7 +1226,6 @@ const CONST = {
DELETE: 'delete',
RETRACT: 'retract',
ADD_EXPENSE: 'addExpense',
- SPLIT: 'split',
REOPEN: 'reopen',
MOVE_EXPENSE: 'moveExpense',
PAY: 'pay',
@@ -1257,7 +1256,6 @@ const CONST = {
},
TRANSACTION_SECONDARY_ACTIONS: {
HOLD: 'hold',
- SPLIT: 'split',
VIEW_DETAILS: 'viewDetails',
DELETE: 'delete',
},
@@ -2777,7 +2775,6 @@ const CONST = {
SEND: 'send',
PAY: 'pay',
SPLIT: 'split',
- SPLIT_EXPENSE: 'split-expense',
REQUEST: 'request',
INVOICE: 'invoice',
SUBMIT: 'submit',
diff --git a/src/ROUTES.ts b/src/ROUTES.ts
index 1d6937c1ff7c..6a4bcea8c49d 100644
--- a/src/ROUTES.ts
+++ b/src/ROUTES.ts
@@ -573,24 +573,6 @@ const ROUTES = {
return getUrlWithBackToParam(`r/${reportID}/invite` as const, backTo);
},
},
- SPLIT_EXPENSE: {
- route: 'create/split-expense/overview/:reportID/:transactionID/:splitExpenseTransactionID?',
- getRoute: (reportID: string | undefined, originalTransactionID: string | undefined, splitExpenseTransactionID?: string, backTo?: string) => {
- if (!reportID || !originalTransactionID) {
- Log.warn(`Invalid ${reportID}(reportID) or ${originalTransactionID}(transactionID) is used to build the SPLIT_EXPENSE route`);
- }
- return getUrlWithBackToParam(`create/split-expense/overview/${reportID}/${originalTransactionID}${splitExpenseTransactionID ? `/${splitExpenseTransactionID}` : ''}`, backTo);
- },
- },
- SPLIT_EXPENSE_EDIT: {
- route: 'edit/split-expense/overview/:reportID/:transactionID/:splitExpenseTransactionID?',
- getRoute: (reportID: string | undefined, originalTransactionID: string | undefined, splitExpenseTransactionID?: string, backTo?: string) => {
- if (!reportID || !originalTransactionID) {
- Log.warn(`Invalid ${reportID}(reportID) or ${originalTransactionID}(transactionID) is used to build the SPLIT_EXPENSE_EDIT route`);
- }
- return getUrlWithBackToParam(`edit/split-expense/overview/${reportID}/${originalTransactionID}${splitExpenseTransactionID ? `/${splitExpenseTransactionID}` : ''}`, backTo);
- },
- },
MONEY_REQUEST_HOLD_REASON: {
route: ':type/edit/reason/:transactionID?/:searchHash?',
getRoute: (type: ValueOf, transactionID: string, reportID: string, backTo: string, searchHash?: number) => {
diff --git a/src/SCREENS.ts b/src/SCREENS.ts
index 96344091d4a8..c3bbffcc8646 100644
--- a/src/SCREENS.ts
+++ b/src/SCREENS.ts
@@ -264,8 +264,6 @@ const SCREENS = {
STEP_SUBRATE_EDIT: 'Money_Request_SubRate_Edit',
STEP_REPORT: 'Money_Request_Report',
EDIT_REPORT: 'Money_Request_Edit_Report',
- SPLIT_EXPENSE: 'Money_Request_Split_Expense',
- SPLIT_EXPENSE_EDIT: 'Money_Request_Split_Expense_Edit',
},
TRANSACTION_DUPLICATE: {
diff --git a/src/components/AmountTextInput.tsx b/src/components/AmountTextInput.tsx
index 723ce911b889..256d95ba8419 100644
--- a/src/components/AmountTextInput.tsx
+++ b/src/components/AmountTextInput.tsx
@@ -39,7 +39,7 @@ type AmountTextInputProps = {
/** Hide the focus styles on TextInput */
hideFocusedState?: boolean;
-} & Pick;
+} & Pick;
function AmountTextInput(
{
diff --git a/src/components/Icon/Expensicons.ts b/src/components/Icon/Expensicons.ts
index 7d963960ac04..fa1eb1ac9615 100644
--- a/src/components/Icon/Expensicons.ts
+++ b/src/components/Icon/Expensicons.ts
@@ -6,7 +6,6 @@ import ArrowCollapse from '@assets/images/arrow-collapse.svg';
import ArrowDownLong from '@assets/images/arrow-down-long.svg';
import ArrowRightLong from '@assets/images/arrow-right-long.svg';
import ArrowRight from '@assets/images/arrow-right.svg';
-import ArrowSplit from '@assets/images/arrow-split.svg';
import ArrowUpLong from '@assets/images/arrow-up-long.svg';
import UpArrow from '@assets/images/arrow-up.svg';
import ArrowsLeftRight from '@assets/images/arrows-leftright.svg';
@@ -239,7 +238,6 @@ export {
AnnounceRoomAvatar,
Apple,
AppleLogo,
- ArrowSplit,
ArrowCollapse,
ArrowRight,
ArrowRightLong,
diff --git a/src/components/MoneyReportHeader.tsx b/src/components/MoneyReportHeader.tsx
index c6f3ab4327bb..7c994bd9f05a 100644
--- a/src/components/MoneyReportHeader.tsx
+++ b/src/components/MoneyReportHeader.tsx
@@ -69,7 +69,6 @@ import {
deleteMoneyRequest,
getNavigationUrlOnMoneyRequestDelete,
getNextApproverAccountID,
- initSplitExpense,
payInvoice,
payMoneyRequest,
reopenReport,
@@ -756,19 +755,6 @@ function MoneyReportHeader({
changeMoneyRequestHoldStatus(requestParentReportAction);
},
},
- [CONST.REPORT.SECONDARY_ACTIONS.SPLIT]: {
- text: translate('iou.split'),
- icon: Expensicons.ArrowSplit,
- value: CONST.REPORT.SECONDARY_ACTIONS.SPLIT,
- onSelected: () => {
- if (Number(transactions?.length) !== 1) {
- return;
- }
-
- const currentTransaction = transactions.at(0);
- initSplitExpense(currentTransaction, moneyRequestReport?.reportID ?? String(CONST.DEFAULT_NUMBER_ID));
- },
- },
[CONST.REPORT.SECONDARY_ACTIONS.CHANGE_WORKSPACE]: {
text: translate('iou.changeWorkspace'),
icon: Expensicons.Buildings,
diff --git a/src/components/MoneyRequestAmountInput.tsx b/src/components/MoneyRequestAmountInput.tsx
index 234b3a21d336..0285bbf6aad1 100644
--- a/src/components/MoneyRequestAmountInput.tsx
+++ b/src/components/MoneyRequestAmountInput.tsx
@@ -94,7 +94,7 @@ type MoneyRequestAmountInputProps = {
/** The testID of the input. Used to locate this view in end-to-end tests. */
testID?: string;
-} & Pick;
+} & Pick;
type Selection = {
start: number;
@@ -132,7 +132,6 @@ function MoneyRequestAmountInput(
autoGrowExtraSpace,
contentWidth,
testID,
- submitBehavior,
...props
}: MoneyRequestAmountInputProps,
forwardedRef: ForwardedRef,
@@ -344,7 +343,6 @@ function MoneyRequestAmountInput(
onMouseUp={handleMouseUp}
contentWidth={contentWidth}
testID={testID}
- submitBehavior={submitBehavior}
/>
);
}
diff --git a/src/components/MoneyRequestHeader.tsx b/src/components/MoneyRequestHeader.tsx
index e43f9fc3a9b7..493352ad6ee2 100644
--- a/src/components/MoneyRequestHeader.tsx
+++ b/src/components/MoneyRequestHeader.tsx
@@ -10,7 +10,7 @@ import useResponsiveLayout from '@hooks/useResponsiveLayout';
import useTheme from '@hooks/useTheme';
import useThemeStyles from '@hooks/useThemeStyles';
import useTransactionViolations from '@hooks/useTransactionViolations';
-import {deleteMoneyRequest, initSplitExpense} from '@libs/actions/IOU';
+import {deleteMoneyRequest} from '@libs/actions/IOU';
import Navigation from '@libs/Navigation/Navigation';
import {getOriginalMessage, getReportActions, isMoneyRequestAction} from '@libs/ReportActionsUtils';
import {getTransactionThreadPrimaryAction} from '@libs/ReportPrimaryActionUtils';
@@ -201,8 +201,8 @@ function MoneyRequestHeader({report, parentReportAction, policy, onBackButtonPre
if (!transaction || !reportActions) {
return [];
}
- return getSecondaryTransactionThreadActions(parentReport, transaction, Object.values(reportActions), policy);
- }, [parentReport, policy, transaction]);
+ return getSecondaryTransactionThreadActions(parentReport, transaction, Object.values(reportActions));
+ }, [parentReport, transaction]);
const secondaryActionsImplementation: Record, DropdownOption>> = {
[CONST.REPORT.TRANSACTION_SECONDARY_ACTIONS.HOLD]: {
@@ -217,14 +217,6 @@ function MoneyRequestHeader({report, parentReportAction, policy, onBackButtonPre
changeMoneyRequestHoldStatus(parentReportAction);
},
},
- [CONST.REPORT.TRANSACTION_SECONDARY_ACTIONS.SPLIT]: {
- text: translate('iou.split'),
- icon: Expensicons.ArrowSplit,
- value: CONST.REPORT.SECONDARY_ACTIONS.SPLIT,
- onSelected: () => {
- initSplitExpense(transaction, reportID ?? String(CONST.DEFAULT_NUMBER_ID));
- },
- },
[CONST.REPORT.TRANSACTION_SECONDARY_ACTIONS.VIEW_DETAILS]: {
value: CONST.REPORT.SECONDARY_ACTIONS.VIEW_DETAILS,
text: translate('iou.viewDetails'),
diff --git a/src/components/ReportActionItem/MoneyRequestView.tsx b/src/components/ReportActionItem/MoneyRequestView.tsx
index e0bcc38cd8bc..eb91ad4e400f 100644
--- a/src/components/ReportActionItem/MoneyRequestView.tsx
+++ b/src/components/ReportActionItem/MoneyRequestView.tsx
@@ -50,7 +50,6 @@ import {
getBillable,
getDescription,
getDistanceInMeters,
- getOriginalTransactionWithSplitInfo,
getTagForDisplay,
getTaxName,
hasMissingSmartscanFields,
@@ -292,9 +291,6 @@ function MoneyRequestView({report, shouldShowAnimatedBackground, readonly = fals
if (!isDistanceRequest && !isPerDiemRequest) {
amountDescription += ` ${CONST.DOT_SEPARATOR} ${translate('iou.cash')}`;
}
- if (getOriginalTransactionWithSplitInfo(transaction).isExpenseSplit) {
- amountDescription += ` ${CONST.DOT_SEPARATOR} ${translate('iou.split')}`;
- }
if (isCancelled) {
amountDescription += ` ${CONST.DOT_SEPARATOR} ${translate('iou.canceled')}`;
} else if (isApproved) {
diff --git a/src/components/ReportActionItem/TransactionPreview/index.tsx b/src/components/ReportActionItem/TransactionPreview/index.tsx
index 04e224ea01df..3bc832ededba 100644
--- a/src/components/ReportActionItem/TransactionPreview/index.tsx
+++ b/src/components/ReportActionItem/TransactionPreview/index.tsx
@@ -11,8 +11,8 @@ import {convertToDisplayString} from '@libs/CurrencyUtils';
import {canUseTouchScreen} from '@libs/DeviceCapabilities';
import {getIOUActionForReportID, getOriginalMessage, isMoneyRequestAction as isMoneyRequestActionReportActionsUtils} from '@libs/ReportActionsUtils';
import {getTransactionDetails} from '@libs/ReportUtils';
-import {getReviewNavigationRoute} from '@libs/TransactionPreviewUtils';
-import {getOriginalTransactionWithSplitInfo, isCardTransaction, removeSettledAndApprovedTransactions} from '@libs/TransactionUtils';
+import {getOriginalTransactionIfBillIsSplit, getReviewNavigationRoute} from '@libs/TransactionPreviewUtils';
+import {isCardTransaction, removeSettledAndApprovedTransactions} from '@libs/TransactionUtils';
import Navigation from '@navigation/Navigation';
import type {PlatformStackRouteProp} from '@navigation/PlatformStackNavigation/types';
import type {TransactionDuplicateNavigatorParamList} from '@navigation/types';
@@ -78,13 +78,7 @@ function TransactionPreview(props: TransactionPreviewProps) {
Navigation.navigate(getReviewNavigationRoute(route, report, transaction, duplicates));
}, [duplicates, report, route, transaction]);
- let transactionPreview = transaction;
-
- const {originalTransaction, isBillSplit} = getOriginalTransactionWithSplitInfo(transaction);
-
- if (isBillSplit) {
- transactionPreview = originalTransaction;
- }
+ const {originalTransaction, isBillSplit} = getOriginalTransactionIfBillIsSplit(transaction);
const iouAction = isBillSplit && originalTransaction ? getIOUActionForReportID(chatReportID, originalTransaction.transactionID) ?? action : action;
@@ -111,7 +105,7 @@ function TransactionPreview(props: TransactionPreviewProps) {
isBillSplit={isBillSplit}
chatReport={chatReport}
personalDetails={personalDetails}
- transaction={transactionPreview}
+ transaction={originalTransaction}
iouReport={iouReport}
violations={violations}
offlineWithFeedbackOnClose={offlineWithFeedbackOnClose}
diff --git a/src/components/ReportWelcomeText.tsx b/src/components/ReportWelcomeText.tsx
index 626c70528e40..7c90f319da1a 100644
--- a/src/components/ReportWelcomeText.tsx
+++ b/src/components/ReportWelcomeText.tsx
@@ -68,12 +68,8 @@ function ReportWelcomeText({report, policy}: ReportWelcomeTextProps) {
const policyName = getPolicyName({report});
const filteredOptions = moneyRequestOptions.filter(
- (
- item,
- ): item is Exclude<
- IOUType,
- typeof CONST.IOU.TYPE.REQUEST | typeof CONST.IOU.TYPE.SEND | typeof CONST.IOU.TYPE.CREATE | typeof CONST.IOU.TYPE.INVOICE | typeof CONST.IOU.TYPE.SPLIT_EXPENSE
- > => item !== CONST.IOU.TYPE.INVOICE,
+ (item): item is Exclude =>
+ item !== CONST.IOU.TYPE.INVOICE,
);
const additionalText = filteredOptions
.map(
diff --git a/src/components/Search/index.tsx b/src/components/Search/index.tsx
index 05eb59ba8e95..9c6f25f26e74 100644
--- a/src/components/Search/index.tsx
+++ b/src/components/Search/index.tsx
@@ -104,7 +104,7 @@ function mapToItemWithSelectionInfo(item: SearchListItem, selectedTransactions:
...item,
shouldAnimateInHighlight,
transactions: item.transactions?.map((transaction) => mapToTransactionItemWithSelectionInfo(transaction, selectedTransactions, canSelectMultiple, shouldAnimateInHighlight)),
- isSelected: item?.transactions?.length > 0 && item.transactions?.every((transaction) => selectedTransactions[transaction.keyForList]?.isSelected && canSelectMultiple),
+ isSelected: item.transactions.length > 0 && item.transactions?.every((transaction) => selectedTransactions[transaction.keyForList]?.isSelected && canSelectMultiple),
};
}
diff --git a/src/components/SelectionList/Search/TransactionListItemRow.tsx b/src/components/SelectionList/Search/TransactionListItemRow.tsx
index 774a1e3c9b7b..16ff60fdb7a2 100644
--- a/src/components/SelectionList/Search/TransactionListItemRow.tsx
+++ b/src/components/SelectionList/Search/TransactionListItemRow.tsx
@@ -407,15 +407,15 @@ function TransactionListItemRow({
diff --git a/src/components/SelectionList/Search/UserInfoCellsWithArrow.tsx b/src/components/SelectionList/Search/UserInfoCellsWithArrow.tsx
index e7111a1c3a92..d71777f4e479 100644
--- a/src/components/SelectionList/Search/UserInfoCellsWithArrow.tsx
+++ b/src/components/SelectionList/Search/UserInfoCellsWithArrow.tsx
@@ -35,10 +35,6 @@ function UserInfoCellsWithArrow({
const styles = useThemeStyles();
const theme = useTheme();
- if (!participantFrom) {
- return null;
- }
-
return (
<>
diff --git a/src/components/SelectionList/SplitListItem.tsx b/src/components/SelectionList/SplitListItem.tsx
deleted file mode 100644
index 6e4aedd6b6f6..000000000000
--- a/src/components/SelectionList/SplitListItem.tsx
+++ /dev/null
@@ -1,160 +0,0 @@
-import React from 'react';
-import {View} from 'react-native';
-import Icon from '@components/Icon';
-import {Folder, Tag} from '@components/Icon/Expensicons';
-import * as Expensicons from '@components/Icon/Expensicons';
-import MoneyRequestAmountInput from '@components/MoneyRequestAmountInput';
-import Text from '@components/Text';
-import useStyleUtils from '@hooks/useStyleUtils';
-import useTheme from '@hooks/useTheme';
-import useThemeStyles from '@hooks/useThemeStyles';
-import {convertToDisplayStringWithoutCurrency} from '@libs/CurrencyUtils';
-import {getCleanedTagName} from '@libs/PolicyUtils';
-import variables from '@styles/variables';
-import BaseListItem from './BaseListItem';
-import type {ListItem, SplitListItemProps, SplitListItemType} from './types';
-
-function SplitListItem({
- item,
- isFocused,
- showTooltip,
- isDisabled,
- onSelectRow,
- shouldPreventEnterKeySubmit,
- rightHandSideComponent,
- onFocus,
-}: SplitListItemProps) {
- const theme = useTheme();
- const styles = useThemeStyles();
- const StyleUtils = useStyleUtils();
-
- const splitItem = item as unknown as SplitListItemType;
-
- const formattedOriginalAmount = convertToDisplayStringWithoutCurrency(splitItem.originalAmount, splitItem.currency);
-
- const onSplitExpenseAmountChange = (amount: string) => {
- splitItem.onSplitExpenseAmountChange(splitItem.transactionID, Number(amount));
- };
-
- const isBottomVisible = !!splitItem.category || !!splitItem.tags?.at(0);
-
- return (
-
-
-
-
-
-
- {splitItem.headerText}
-
-
-
-
-
- {splitItem.merchant}
-
-
-
-
- {isBottomVisible && (
-
- {!!splitItem.category && (
-
-
-
- {splitItem.category}
-
-
- )}
- {!!splitItem.tags?.at(0) && (
-
-
-
- {getCleanedTagName(splitItem.tags?.at(0) ?? '')}
-
-
- )}
-
- )}
-
-
-
-
-
-
-
-
-
-
-
- );
-}
-
-SplitListItem.displayName = 'SplitListItem';
-
-export default SplitListItem;
diff --git a/src/components/SelectionList/types.ts b/src/components/SelectionList/types.ts
index 8cea5d2d33ee..67988cced68a 100644
--- a/src/components/SelectionList/types.ts
+++ b/src/components/SelectionList/types.ts
@@ -23,7 +23,7 @@ import type SpendCategorySelectorListItem from '@pages/workspace/categories/Spen
import type CursorStyles from '@styles/utils/cursor/types';
import type CONST from '@src/CONST';
import type {Policy, Report} from '@src/types/onyx';
-import type {Attendee, SplitExpense} from '@src/types/onyx/IOU';
+import type {Attendee} from '@src/types/onyx/IOU';
import type {Errors, Icon, PendingAction} from '@src/types/onyx/OnyxCommon';
import type {SearchPersonalDetails, SearchReport, SearchReportAction, SearchTask, SearchTransaction} from '@src/types/onyx/SearchResults';
import type {ReceiptErrors} from '@src/types/onyx/Transaction';
@@ -390,35 +390,6 @@ type UserListItemProps = ListItemProps & {
FooterComponent?: ReactElement;
};
-type SplitListItemType = ListItem &
- SplitExpense & {
- /** Item header text */
- headerText: string;
-
- /** Merchant or vendor name */
- merchant: string;
-
- /** Currency code */
- currency: string;
-
- /** ID of split expense */
- transactionID: string;
-
- /** Currency symbol */
- currencySymbol: string;
-
- /** Original amount before split */
- originalAmount: number;
-
- /** Indicates whether a split was opened through this transaction */
- isTransactionLinked: boolean;
-
- /** Function for updating amount */
- onSplitExpenseAmountChange: (currentItemTransactionID: string, value: number) => void;
- };
-
-type SplitListItemProps = ListItemProps;
-
type TransactionSelectionListItem = ListItemProps & Transaction;
type InviteMemberListItemProps = UserListItemProps;
@@ -846,7 +817,5 @@ export type {
ReportActionListItemType,
ChatListItemProps,
SortableColumnName,
- SplitListItemProps,
- SplitListItemType,
SearchListItem,
};
diff --git a/src/components/TextInputWithCurrencySymbol/types.ts b/src/components/TextInputWithCurrencySymbol/types.ts
index b0c59971cdcb..8636f1959df1 100644
--- a/src/components/TextInputWithCurrencySymbol/types.ts
+++ b/src/components/TextInputWithCurrencySymbol/types.ts
@@ -80,7 +80,7 @@ type BaseTextInputWithCurrencySymbolProps = {
/** The test ID of TextInput. Used to locate the view in end-to-end tests. */
testID?: string;
-} & Pick;
+} & Pick;
type TextInputWithCurrencySymbolProps = Omit & {
onSelectionChange?: (start: number, end: number) => void;
diff --git a/src/languages/en.ts b/src/languages/en.ts
index 83aff5c3e81a..9e2900e20a5a 100755
--- a/src/languages/en.ts
+++ b/src/languages/en.ts
@@ -164,8 +164,6 @@ import type {
SignUpNewFaceCodeParams,
SizeExceededParams,
SplitAmountParams,
- SplitExpenseEditTitleParams,
- SplitExpenseSubtitleParams,
SpreadCategoriesParams,
SpreadFieldNameParams,
SpreadSheetColumnParams,
@@ -184,7 +182,6 @@ import type {
TermsParams,
ThreadRequestReportNameParams,
ThreadSentMoneyReportNameParams,
- TotalAmountGreaterOrLessThanOriginalParams,
ToValidateLoginParams,
TransferParams,
TrialStartedTitleParams,
@@ -936,13 +933,6 @@ const translations = {
original: 'Original',
split: 'Split',
splitExpense: 'Split expense',
- splitExpenseSubtitle: ({amount, merchant}: SplitExpenseSubtitleParams) => `${amount} from ${merchant}`,
- addSplit: 'Add split',
- totalAmountGreaterThanOriginal: ({amount}: TotalAmountGreaterOrLessThanOriginalParams) => `Total amount is ${amount} greater than the original expense.`,
- totalAmountLessThanOriginal: ({amount}: TotalAmountGreaterOrLessThanOriginalParams) => `Total amount is ${amount} less than the original expense.`,
- splitExpenseZeroAmount: 'Please enter a valid amount before continuing.',
- splitExpenseEditTitle: ({amount, merchant}: SplitExpenseEditTitleParams) => `Edit ${amount} for ${merchant}`,
- removeSplit: 'Remove split',
paySomeone: ({name}: PaySomeoneParams = {}) => `Pay ${name ?? 'someone'}`,
expense: 'Expense',
categorize: 'Categorize',
diff --git a/src/languages/es.ts b/src/languages/es.ts
index b9aff5766bcf..37371a25738b 100644
--- a/src/languages/es.ts
+++ b/src/languages/es.ts
@@ -163,8 +163,6 @@ import type {
SignUpNewFaceCodeParams,
SizeExceededParams,
SplitAmountParams,
- SplitExpenseEditTitleParams,
- SplitExpenseSubtitleParams,
SpreadCategoriesParams,
SpreadFieldNameParams,
SpreadSheetColumnParams,
@@ -183,7 +181,6 @@ import type {
TermsParams,
ThreadRequestReportNameParams,
ThreadSentMoneyReportNameParams,
- TotalAmountGreaterOrLessThanOriginalParams,
ToValidateLoginParams,
TransferParams,
TrialStartedTitleParams,
@@ -931,13 +928,6 @@ const translations = {
original: 'Original',
split: 'Dividir',
splitExpense: 'Dividir gasto',
- splitExpenseSubtitle: ({amount, merchant}: SplitExpenseSubtitleParams) => `${amount} de ${merchant}`,
- addSplit: 'Añadir división',
- totalAmountGreaterThanOriginal: ({amount}: TotalAmountGreaterOrLessThanOriginalParams) => `El importe total es ${amount} mayor que el gasto original.`,
- totalAmountLessThanOriginal: ({amount}: TotalAmountGreaterOrLessThanOriginalParams) => `El importe total es ${amount} menor que el gasto original.`,
- splitExpenseZeroAmount: 'Por favor, introduce un importe válido antes de continuar.',
- splitExpenseEditTitle: ({amount, merchant}: SplitExpenseEditTitleParams) => `Editar ${amount} para ${merchant}`,
- removeSplit: 'Eliminar división',
addExpense: 'Agregar gasto',
expense: 'Gasto',
categorize: 'Categorizar',
diff --git a/src/languages/params.ts b/src/languages/params.ts
index b988af96101d..fa103fc9aac4 100644
--- a/src/languages/params.ts
+++ b/src/languages/params.ts
@@ -686,28 +686,11 @@ type CurrencyInputDisabledTextParams = {
currency: string;
};
-type SplitExpenseSubtitleParams = {
- amount: string;
- merchant: string;
-};
-
-type SplitExpenseEditTitleParams = {
- amount: string;
- merchant: string;
-};
-
-type TotalAmountGreaterOrLessThanOriginalParams = {
- amount: string;
-};
-
type EmployeeInviteMessageParams = {
name: string;
};
export type {
- SplitExpenseEditTitleParams,
- SplitExpenseSubtitleParams,
- TotalAmountGreaterOrLessThanOriginalParams,
AuthenticationErrorParams,
ImportMembersSuccessfulDescriptionParams,
ImportedTagsMessageParams,
diff --git a/src/libs/API/parameters/SplitTransactionParams.ts b/src/libs/API/parameters/SplitTransactionParams.ts
deleted file mode 100644
index 09c345ff3907..000000000000
--- a/src/libs/API/parameters/SplitTransactionParams.ts
+++ /dev/null
@@ -1,24 +0,0 @@
-type SplitTransactionSplitsParam = Array<{
- amount: number;
- category?: string;
- tag?: string;
- created: string;
- merchant?: string;
- comment?: {
- comment?: string;
- };
- nameValuePairs?: {
- comment?: string;
- };
- splitReportActionID?: string;
- transactionThreadReportID?: string;
- createdReportActionIDForThread?: string;
-}>;
-
-type SplitTransactionParams = {
- transactionID: string;
- isReverseSplitOperation: boolean;
- [key: string]: string | boolean;
-};
-
-export type {SplitTransactionParams, SplitTransactionSplitsParam};
diff --git a/src/libs/API/parameters/index.ts b/src/libs/API/parameters/index.ts
index b237ac3a8022..9d993d95f7a9 100644
--- a/src/libs/API/parameters/index.ts
+++ b/src/libs/API/parameters/index.ts
@@ -157,7 +157,6 @@ export type {default as CompleteSplitBillParams} from './CompleteSplitBillParams
export type {default as UpdateMoneyRequestParams} from './UpdateMoneyRequestParams';
export type {default as RequestMoneyParams} from './RequestMoneyParams';
export type {default as SplitBillParams} from './SplitBillParams';
-export type {SplitTransactionParams, SplitTransactionSplitsParam} from './SplitTransactionParams';
export type {default as DeleteMoneyRequestParams} from './DeleteMoneyRequestParams';
export type {default as CreateDistanceRequestParams} from './CreateDistanceRequestParams';
export type {default as StartSplitBillParams} from './StartSplitBillParams';
diff --git a/src/libs/API/types.ts b/src/libs/API/types.ts
index 3566ef25cb92..d10e3b831712 100644
--- a/src/libs/API/types.ts
+++ b/src/libs/API/types.ts
@@ -205,7 +205,6 @@ const WRITE_COMMANDS = {
CREATE_PER_DIEM_REQUEST: 'CreatePerDiemRequest',
SPLIT_BILL: 'SplitBill',
SPLIT_BILL_AND_OPEN_REPORT: 'SplitBillAndOpenReport',
- SPLIT_TRANSACTION: 'Transaction_Split',
DELETE_MONEY_REQUEST: 'DeleteMoneyRequest',
CREATE_DISTANCE_REQUEST: 'CreateDistanceRequest',
START_SPLIT_BILL: 'StartSplitBill',
@@ -673,7 +672,6 @@ type WriteCommandParameters = {
[WRITE_COMMANDS.CREATE_PER_DIEM_REQUEST]: Parameters.CreatePerDiemRequestParams;
[WRITE_COMMANDS.SPLIT_BILL]: Parameters.SplitBillParams;
[WRITE_COMMANDS.SPLIT_BILL_AND_OPEN_REPORT]: Parameters.SplitBillParams;
- [WRITE_COMMANDS.SPLIT_TRANSACTION]: Parameters.SplitTransactionParams;
[WRITE_COMMANDS.DELETE_MONEY_REQUEST]: Parameters.DeleteMoneyRequestParams;
[WRITE_COMMANDS.CREATE_DISTANCE_REQUEST]: Parameters.CreateDistanceRequestParams;
[WRITE_COMMANDS.START_SPLIT_BILL]: Parameters.StartSplitBillParams;
diff --git a/src/libs/DebugUtils.ts b/src/libs/DebugUtils.ts
index 22a00fb14366..6f2b0f862f1b 100644
--- a/src/libs/DebugUtils.ts
+++ b/src/libs/DebugUtils.ts
@@ -1071,7 +1071,6 @@ function validateTransactionDraftProperty(key: keyof Transaction, value: string)
posted: CONST.RED_BRICK_ROAD_PENDING_ACTION,
inserted: CONST.RED_BRICK_ROAD_PENDING_ACTION,
accountant: CONST.RED_BRICK_ROAD_PENDING_ACTION,
- splitExpenses: CONST.RED_BRICK_ROAD_PENDING_ACTION,
},
'string',
);
@@ -1109,7 +1108,6 @@ function validateTransactionDraftProperty(key: keyof Transaction, value: string)
liabilityType: CONST.TRANSACTION.LIABILITY_TYPE,
splits: 'array',
dismissedViolations: 'object',
- splitExpenses: 'array',
});
case 'accountant':
return validateObject>(value, {
diff --git a/src/libs/IOUUtils.ts b/src/libs/IOUUtils.ts
index e7b50ef35c79..94c519f3d2b1 100644
--- a/src/libs/IOUUtils.ts
+++ b/src/libs/IOUUtils.ts
@@ -148,7 +148,6 @@ function isValidMoneyRequestType(iouType: string): boolean {
CONST.IOU.TYPE.REQUEST,
CONST.IOU.TYPE.SUBMIT,
CONST.IOU.TYPE.SPLIT,
- CONST.IOU.TYPE.SPLIT_EXPENSE,
CONST.IOU.TYPE.SEND,
CONST.IOU.TYPE.PAY,
CONST.IOU.TYPE.TRACK,
@@ -186,8 +185,8 @@ function isMovingTransactionFromTrackExpense(action?: IOUAction) {
return false;
}
-function shouldUseTransactionDraft(action: IOUAction | undefined, type?: IOUType) {
- return action === CONST.IOU.ACTION.CREATE || type === CONST.IOU.TYPE.SPLIT_EXPENSE || isMovingTransactionFromTrackExpense(action);
+function shouldUseTransactionDraft(action: IOUAction | undefined) {
+ return action === CONST.IOU.ACTION.CREATE || isMovingTransactionFromTrackExpense(action);
}
function formatCurrentUserToAttendee(currentUser?: PersonalDetails, reportID?: string) {
diff --git a/src/libs/Navigation/AppNavigator/ModalStackNavigators/index.tsx b/src/libs/Navigation/AppNavigator/ModalStackNavigators/index.tsx
index a7f1c14f5e14..a61b24b0cc2e 100644
--- a/src/libs/Navigation/AppNavigator/ModalStackNavigators/index.tsx
+++ b/src/libs/Navigation/AppNavigator/ModalStackNavigators/index.tsx
@@ -124,8 +124,6 @@ const MoneyRequestModalStackNavigator = createModalStackNavigator require('../../../../pages/iou/request/step/IOURequestStepDestination').default,
[SCREENS.MONEY_REQUEST.STEP_TIME_EDIT]: () => require('../../../../pages/iou/request/step/IOURequestStepTime').default,
[SCREENS.MONEY_REQUEST.STEP_SUBRATE_EDIT]: () => require('../../../../pages/iou/request/step/IOURequestStepSubrate').default,
- [SCREENS.MONEY_REQUEST.SPLIT_EXPENSE]: () => require('../../../../pages/iou/SplitExpensePage').default,
- [SCREENS.MONEY_REQUEST.SPLIT_EXPENSE_EDIT]: () => require('../../../../pages/iou/SplitExpenseEditPage').default,
});
const TravelModalStackNavigator = createModalStackNavigator({
diff --git a/src/libs/Navigation/linkingConfig/config.ts b/src/libs/Navigation/linkingConfig/config.ts
index b27ff3d6ebd4..515970cd075f 100644
--- a/src/libs/Navigation/linkingConfig/config.ts
+++ b/src/libs/Navigation/linkingConfig/config.ts
@@ -1342,14 +1342,6 @@ const config: LinkingOptions['config'] = {
[SCREENS.IOU_SEND.ENABLE_PAYMENTS]: ROUTES.IOU_SEND_ENABLE_PAYMENTS,
[SCREENS.IOU_SEND.ADD_BANK_ACCOUNT]: ROUTES.IOU_SEND_ADD_BANK_ACCOUNT,
[SCREENS.IOU_SEND.ADD_DEBIT_CARD]: ROUTES.IOU_SEND_ADD_DEBIT_CARD,
- [SCREENS.MONEY_REQUEST.SPLIT_EXPENSE]: {
- path: ROUTES.SPLIT_EXPENSE.route,
- exact: true,
- },
- [SCREENS.MONEY_REQUEST.SPLIT_EXPENSE_EDIT]: {
- path: ROUTES.SPLIT_EXPENSE_EDIT.route,
- exact: true,
- },
},
},
[SCREENS.RIGHT_MODAL.TRANSACTION_DUPLICATE]: {
diff --git a/src/libs/Navigation/types.ts b/src/libs/Navigation/types.ts
index 1a830a3aa79c..669d8e419010 100644
--- a/src/libs/Navigation/types.ts
+++ b/src/libs/Navigation/types.ts
@@ -1607,8 +1607,6 @@ type RightModalNavigatorParamList = {
[SCREENS.RIGHT_MODAL.SEARCH_SAVED_SEARCH]: NavigatorScreenParams;
[SCREENS.RIGHT_MODAL.MISSING_PERSONAL_DETAILS]: NavigatorScreenParams;
[SCREENS.RIGHT_MODAL.DEBUG]: NavigatorScreenParams;
- [SCREENS.MONEY_REQUEST.SPLIT_EXPENSE]: NavigatorScreenParams;
- [SCREENS.MONEY_REQUEST.SPLIT_EXPENSE_EDIT]: NavigatorScreenParams;
[SCREENS.RIGHT_MODAL.ADD_UNREPORTED_EXPENSE]: NavigatorScreenParams<{reportId: string | undefined}>;
[SCREENS.RIGHT_MODAL.SCHEDULE_CALL]: NavigatorScreenParams;
};
@@ -1992,21 +1990,6 @@ type MissingPersonalDetailsParamList = {
[SCREENS.MISSING_PERSONAL_DETAILS_ROOT]: undefined;
};
-type SplitExpenseParamList = {
- [SCREENS.MONEY_REQUEST.SPLIT_EXPENSE]: {
- reportID: string;
- transactionID: string;
- splitExpenseTransactionID?: string;
- backTo?: Routes;
- };
- [SCREENS.MONEY_REQUEST.SPLIT_EXPENSE_EDIT]: {
- reportID: string;
- transactionID: string;
- splitExpenseTransactionID: string;
- backTo?: Routes;
- };
-};
-
type AddUnreportedExpensesParamList = {
[SCREENS.ADD_UNREPORTED_EXPENSES_ROOT]: {
reportID: string;
@@ -2152,7 +2135,6 @@ export type {
TestDriveModalNavigatorParamList,
WorkspaceScreenName,
TestDriveDemoNavigatorParamList,
- SplitExpenseParamList,
SetParamsAction,
WorkspacesTabNavigatorName,
};
diff --git a/src/libs/ReportSecondaryActionUtils.ts b/src/libs/ReportSecondaryActionUtils.ts
index 1d7aa33f30e0..1c66ed34aa21 100644
--- a/src/libs/ReportSecondaryActionUtils.ts
+++ b/src/libs/ReportSecondaryActionUtils.ts
@@ -1,4 +1,4 @@
-import type {OnyxCollection, OnyxEntry} from 'react-native-onyx';
+import type {OnyxCollection} from 'react-native-onyx';
import type {ValueOf} from 'type-fest';
import CONST from '@src/CONST';
import ONYXKEYS from '@src/ONYXKEYS';
@@ -23,7 +23,6 @@ import {
canEditFieldOfMoneyRequest,
canEditReportPolicy,
canHoldUnholdReportAction,
- getTransactionDetails,
hasOnlyHeldExpenses,
isArchivedReport,
isAwaitingFirstLevelApproval,
@@ -45,13 +44,9 @@ import {
import {getSession} from './SessionUtils';
import {
allHavePendingRTERViolation,
- getOriginalTransactionWithSplitInfo,
- hasReceipt as hasReceiptTransactionUtils,
isCardTransaction as isCardTransactionUtils,
isDuplicate,
isOnHold as isOnHoldTransactionUtils,
- isPending,
- isReceiptBeingScanned,
shouldShowBrokenConnectionViolationForMultipleTransactions,
} from './TransactionUtils';
@@ -65,43 +60,6 @@ function isAddExpenseAction(report: Report, reportTransactions: Transaction[]) {
return canAddTransaction(report);
}
-function isSplitAction(report: Report, reportTransactions: Transaction[], policy?: Policy): boolean {
- if (Number(reportTransactions?.length) !== 1) {
- return false;
- }
-
- const reportTransaction = reportTransactions.at(0);
-
- const isScanning = hasReceiptTransactionUtils(reportTransaction) && isReceiptBeingScanned(reportTransaction);
- if (isPending(reportTransaction) || isScanning || !!reportTransaction?.errors) {
- return false;
- }
-
- const {amount} = getTransactionDetails(reportTransaction) ?? {};
- if (!amount) {
- return false;
- }
-
- const {isExpenseSplit, isBillSplit} = getOriginalTransactionWithSplitInfo(reportTransaction);
- if (isExpenseSplit || isBillSplit) {
- return false;
- }
-
- if (!isExpenseReportUtils(report)) {
- return false;
- }
-
- if (report.stateNum && report.stateNum >= CONST.REPORT.STATE_NUM.APPROVED) {
- return false;
- }
-
- const isSubmitter = isCurrentUserSubmitter(report.reportID);
- const isAdmin = policy?.role === CONST.POLICY.ROLE.ADMIN;
- const isManager = (report.managerID ?? CONST.DEFAULT_NUMBER_ID) === getCurrentUserAccountID();
-
- return isSubmitter || isAdmin || isManager;
-}
-
function isSubmitAction(report: Report, reportTransactions: Transaction[], policy?: Policy, reportNameValuePairs?: ReportNameValuePairs): boolean {
if (isArchivedReport(reportNameValuePairs)) {
return false;
@@ -537,10 +495,6 @@ function getSecondaryReportActions(
options.push(CONST.REPORT.SECONDARY_ACTIONS.HOLD);
}
- if (isSplitAction(report, reportTransactions, policy)) {
- options.push(CONST.REPORT.SECONDARY_ACTIONS.SPLIT);
- }
-
options.push(CONST.REPORT.SECONDARY_ACTIONS.DOWNLOAD_CSV);
options.push(CONST.REPORT.SECONDARY_ACTIONS.DOWNLOAD_PDF);
@@ -566,7 +520,6 @@ function getSecondaryTransactionThreadActions(
parentReport: Report,
reportTransaction: Transaction,
reportActions: ReportAction[],
- policy: OnyxEntry,
): Array> {
const options: Array> = [];
@@ -574,10 +527,6 @@ function getSecondaryTransactionThreadActions(
options.push(CONST.REPORT.TRANSACTION_SECONDARY_ACTIONS.HOLD);
}
- if (isSplitAction(parentReport, [reportTransaction], policy)) {
- options.push(CONST.REPORT.TRANSACTION_SECONDARY_ACTIONS.SPLIT);
- }
-
options.push(CONST.REPORT.TRANSACTION_SECONDARY_ACTIONS.VIEW_DETAILS);
if (isDeleteAction(parentReport, [reportTransaction], reportActions ?? [])) {
diff --git a/src/libs/ReportUtils.ts b/src/libs/ReportUtils.ts
index 8f1c35b42579..eb5b02c36e18 100644
--- a/src/libs/ReportUtils.ts
+++ b/src/libs/ReportUtils.ts
@@ -8418,9 +8418,9 @@ function temporary_getMoneyRequestOptions(
report: OnyxEntry,
policy: OnyxEntry,
reportParticipants: number[],
-): Array> {
+): Array> {
return getMoneyRequestOptions(report, policy, reportParticipants, true) as Array<
- Exclude
+ Exclude
>;
}
diff --git a/src/libs/SearchUIUtils.ts b/src/libs/SearchUIUtils.ts
index e9f9bfab549a..b294cb79715b 100644
--- a/src/libs/SearchUIUtils.ts
+++ b/src/libs/SearchUIUtils.ts
@@ -318,10 +318,8 @@ function getTransactionsSections(data: OnyxTypes.SearchResults['data'], metadata
const shouldShowMerchant = getShouldShowMerchant(data);
const doesDataContainAPastYearTransaction = shouldShowYear(data);
- const keys = Object.keys(data) as TransactionKey[];
-
- return keys
- .filter((key) => isTransactionEntry(key) && data[key]?.reportID !== CONST.REPORT.SPLIT_REPORT_ID)
+ return Object.keys(data)
+ .filter(isTransactionEntry)
.map((key) => {
const transactionItem = data[key];
const report = data[`${ONYXKEYS.COLLECTION.REPORT}${transactionItem.reportID}`];
diff --git a/src/libs/TransactionPreviewUtils.ts b/src/libs/TransactionPreviewUtils.ts
index 319ee171335a..2562dc0e953e 100644
--- a/src/libs/TransactionPreviewUtils.ts
+++ b/src/libs/TransactionPreviewUtils.ts
@@ -17,7 +17,7 @@ import StringUtils from './StringUtils';
import {
compareDuplicateTransactionFields,
getFormattedCreated,
- getOriginalTransactionWithSplitInfo,
+ getTransaction,
hasMissingSmartscanFields,
hasNoticeTypeViolation,
hasPendingRTERViolation,
@@ -109,6 +109,22 @@ type TranslationPathOrText = {
const dotSeparator: TranslationPathOrText = {text: ` ${CONST.DOT_SEPARATOR} `};
+const getOriginalTransactionIfBillIsSplit = (transaction: OnyxEntry) => {
+ const {originalTransactionID, source, splits} = transaction?.comment ?? {};
+
+ if (splits && splits.length > 0) {
+ return {isBillSplit: true, originalTransaction: getTransaction(originalTransactionID) ?? transaction};
+ }
+
+ if (!originalTransactionID || source !== CONST.IOU.TYPE.SPLIT) {
+ return {isBillSplit: false, originalTransaction: transaction};
+ }
+
+ const originalTransaction = getTransaction(originalTransactionID);
+
+ return {isBillSplit: !!originalTransaction, originalTransaction: originalTransaction ?? transaction};
+};
+
function getViolationTranslatePath(violations: OnyxTypes.TransactionViolations, hasFieldErrors: boolean, violationMessage: string, isTransactionOnHold: boolean): TranslationPathOrText {
const violationsCount = violations?.filter((v) => v.type === CONST.VIOLATION_TYPES.VIOLATION).length ?? 0;
@@ -252,7 +268,7 @@ function getTransactionPreviewTextAndTranslationPaths({
}
}
- const amount = isBillSplit ? getOriginalTransactionWithSplitInfo(transaction).originalTransaction?.amount : requestAmount;
+ const amount = isBillSplit ? getOriginalTransactionIfBillIsSplit(transaction).originalTransaction?.amount : requestAmount;
let displayAmountText: TranslationPathOrText = isScanning ? {translationPath: 'iou.receiptStatusTitle'} : {text: convertToDisplayString(amount, requestCurrency)};
if (isFetchingWaypoints && !requestAmount) {
displayAmountText = {translationPath: 'iou.fieldPending'};
@@ -347,5 +363,13 @@ function createTransactionPreviewConditionals({
};
}
-export {getReviewNavigationRoute, getIOUData, getTransactionPreviewTextAndTranslationPaths, createTransactionPreviewConditionals, getViolationTranslatePath, getUniqueActionErrors};
+export {
+ getReviewNavigationRoute,
+ getIOUData,
+ getTransactionPreviewTextAndTranslationPaths,
+ createTransactionPreviewConditionals,
+ getOriginalTransactionIfBillIsSplit,
+ getViolationTranslatePath,
+ getUniqueActionErrors,
+};
export type {TranslationPathOrText};
diff --git a/src/libs/TransactionUtils/index.ts b/src/libs/TransactionUtils/index.ts
index 44656fe3157a..6984159e2d08 100644
--- a/src/libs/TransactionUtils/index.ts
+++ b/src/libs/TransactionUtils/index.ts
@@ -43,7 +43,7 @@ import CONST from '@src/CONST';
import type {IOUType} from '@src/CONST';
import ONYXKEYS from '@src/ONYXKEYS';
import type {OnyxInputOrEntry, Policy, RecentWaypoint, Report, ReviewDuplicates, TaxRate, TaxRates, Transaction, TransactionViolation, TransactionViolations} from '@src/types/onyx';
-import type {Attendee, Participant, SplitExpense} from '@src/types/onyx/IOU';
+import type {Attendee} from '@src/types/onyx/IOU';
import type {PendingAction} from '@src/types/onyx/OnyxCommon';
import type {SearchPolicy, SearchReport, SearchTransaction} from '@src/types/onyx/SearchResults';
import type {Comment, Receipt, TransactionChanges, TransactionCustomUnit, TransactionPendingFieldsKey, Waypoint, WaypointCollection} from '@src/types/onyx/Transaction';
@@ -70,8 +70,6 @@ type TransactionParams = {
source?: string;
filename?: string;
customUnit?: TransactionCustomUnit;
- splitExpenses?: SplitExpense[];
- participants?: Participant[];
};
type BuildOptimisticTransactionParams = {
@@ -263,8 +261,6 @@ function buildOptimisticTransaction(params: BuildOptimisticTransactionParams): T
source = '',
filename = '',
customUnit,
- splitExpenses,
- participants,
} = transactionParams;
// transactionIDs are random, positive, 64-bit numeric strings.
// Because JS can only handle 53-bit numbers, transactionIDs are strings in the front-end (just like reportActionID)
@@ -278,10 +274,6 @@ function buildOptimisticTransaction(params: BuildOptimisticTransactionParams): T
commentJSON.originalTransactionID = originalTransactionID;
}
- if (splitExpenses) {
- commentJSON.splitExpenses = splitExpenses;
- }
-
const isDistanceTransaction = !!pendingFields?.waypoints;
if (isDistanceTransaction) {
// Set the distance unit, which comes from the policy distance unit or the P2P rate data
@@ -313,7 +305,6 @@ function buildOptimisticTransaction(params: BuildOptimisticTransactionParams): T
billable,
reimbursable,
inserted: DateUtils.getDBTime(),
- participants,
};
}
@@ -1275,8 +1266,6 @@ function getTaxName(policy: OnyxEntry, transaction: OnyxEntry {
return allTransactions?.[`${ONYXKEYS.COLLECTION.TRANSACTION}${transactionID}`];
}
@@ -1557,23 +1546,6 @@ function shouldShowRTERViolationMessage(transactions?: Transaction[]) {
return transactions?.length === 1 && hasPendingUI(transactions?.at(0), getTransactionViolations(transactions?.at(0)?.transactionID, allTransactionViolations));
}
-const getOriginalTransactionWithSplitInfo = (transaction: OnyxEntry) => {
- const {originalTransactionID, source, splits} = transaction?.comment ?? {};
- const originalTransaction = allTransactions?.[`${ONYXKEYS.COLLECTION.TRANSACTION}${originalTransactionID}`];
-
- if (splits && splits.length > 0) {
- return {isBillSplit: true, isExpenseSplit: false, originalTransaction: originalTransaction ?? transaction};
- }
-
- if (!originalTransactionID || source !== CONST.IOU.TYPE.SPLIT) {
- return {isBillSplit: false, isExpenseSplit: false, originalTransaction: transaction};
- }
-
- // To determine if it’s a split bill or a split expense, we check for the presence of `comment.splits` on the original transaction.
- // Since both splits use `comment.originalTransaction`, but split expenses won’t have `comment.splits`.
- return {isBillSplit: !!originalTransaction?.comment?.splits, isExpenseSplit: !originalTransaction?.comment?.splits, originalTransaction: originalTransaction ?? transaction};
-};
-
/**
* Return transactions pending action.
*/
@@ -1660,8 +1632,6 @@ export {
hasWarningTypeViolation,
isCustomUnitRateIDForP2P,
getRateID,
- // TODO: Will be handled in this PR https://github.com/Expensify/App/pull/62434
- // eslint-disable-next-line deprecation/deprecation
getTransaction,
compareDuplicateTransactionFields,
getTransactionID,
@@ -1684,7 +1654,6 @@ export {
isPendingCardOrScanningTransaction,
getTransactionOrDraftTransaction,
checkIfShouldShowMarkAsCashButton,
- getOriginalTransactionWithSplitInfo,
getTransactionPendingAction,
};
diff --git a/src/libs/__mocks__/TransactionPreviewUtils.ts b/src/libs/__mocks__/TransactionPreviewUtils.ts
index b4d6662ae05b..30eb80c44e04 100644
--- a/src/libs/__mocks__/TransactionPreviewUtils.ts
+++ b/src/libs/__mocks__/TransactionPreviewUtils.ts
@@ -34,6 +34,7 @@ export {
getTransactionPreviewTextAndTranslationPaths,
createTransactionPreviewConditionals,
getReviewNavigationRoute,
+ getOriginalTransactionIfBillIsSplit,
getViolationTranslatePath,
getUniqueActionErrors,
} from '../TransactionPreviewUtils';
diff --git a/src/libs/actions/IOU.ts b/src/libs/actions/IOU.ts
index 5d99f6a5edfd..20c3fe4a5582 100644
--- a/src/libs/actions/IOU.ts
+++ b/src/libs/actions/IOU.ts
@@ -29,8 +29,6 @@ import type {
SetNameValuePairParams,
ShareTrackedExpenseParams,
SplitBillParams,
- SplitTransactionParams,
- SplitTransactionSplitsParam,
StartSplitBillParams,
SubmitReportParams,
TrackExpenseParams,
@@ -58,7 +56,7 @@ import Log from '@libs/Log';
import isSearchTopmostFullScreenRoute from '@libs/Navigation/helpers/isSearchTopmostFullScreenRoute';
import Navigation from '@libs/Navigation/Navigation';
import {buildNextStep} from '@libs/NextStepUtils';
-import * as NumberUtils from '@libs/NumberUtils';
+import {rand64} from '@libs/NumberUtils';
import {getManagerMcTestParticipant, getPersonalDetailsForAccountIDs} from '@libs/OptionsListUtils';
import {getCustomUnitID} from '@libs/PerDiemRequestUtils';
import Performance from '@libs/Performance';
@@ -216,16 +214,16 @@ import type {SearchDataTypes, SearchPolicy, SearchReport, SearchTransaction} fro
import type {Comment, Receipt, ReceiptSource, Routes, SplitShares, TransactionChanges, TransactionCustomUnit, WaypointCollection} from '@src/types/onyx/Transaction';
import {isEmptyObject} from '@src/types/utils/EmptyObject';
import {clearByKey as clearPdfByOnyxKey} from './CachedPDFPaths';
-import {buildOptimisticPolicyRecentlyUsedCategories, getPolicyCategoriesData} from './Policy/Category';
+import {buildOptimisticPolicyRecentlyUsedCategories} from './Policy/Category';
import {buildAddMembersToWorkspaceOnyxData, buildUpdateWorkspaceMembersRoleOnyxData} from './Policy/Member';
import {buildOptimisticPolicyRecentlyUsedDestinations} from './Policy/PerDiem';
import {buildOptimisticRecentlyUsedCurrencies, buildPolicyData, generatePolicyID} from './Policy/Policy';
-import {buildOptimisticPolicyRecentlyUsedTags, getPolicyTagsData} from './Policy/Tag';
+import {buildOptimisticPolicyRecentlyUsedTags} from './Policy/Tag';
import type {GuidedSetupData} from './Report';
import {buildInviteToRoomOnyxData, completeOnboarding, getCurrentUserAccountID, notifyNewAction} from './Report';
import {clearAllRelatedReportActionErrors} from './ReportActions';
import {getRecentWaypoints, sanitizeRecentWaypoints} from './Transaction';
-import {removeDraftSplitTransaction, removeDraftTransaction, removeDraftTransactions} from './TransactionEdit';
+import {removeDraftTransaction, removeDraftTransactions} from './TransactionEdit';
type IOURequestType = ValueOf;
@@ -371,7 +369,6 @@ type RequestMoneyTransactionParams = Omit & {
receipt?: Receipt;
waypoints?: WaypointCollection;
comment?: string;
- originalTransactionID?: string;
isTestDrive?: boolean;
};
@@ -431,7 +428,6 @@ type MoneyRequestInformationParams = {
existingTransactionID?: string;
existingTransaction?: OnyxEntry;
retryParams?: StartSplitBilActionParams | CreateTrackExpenseParams | RequestMoneyInformation | ReplaceReceipt;
- isSplitExpense?: boolean;
testDriveCommentReportActionID?: string;
};
@@ -3231,7 +3227,6 @@ function getMoneyRequestInformation(moneyRequestInformation: MoneyRequestInforma
existingTransactionID,
moneyRequestReportID = '',
retryParams,
- isSplitExpense,
testDriveCommentReportActionID,
} = moneyRequestInformation;
const {payeeAccountID = userAccountID, payeeEmail = currentUserEmail, participant} = participantParams;
@@ -3280,19 +3275,15 @@ function getMoneyRequestInformation(moneyRequestInformation: MoneyRequestInforma
? buildOptimisticExpenseReport(chatReport.reportID, chatReport.policyID, payeeAccountID, amount, currency)
: buildOptimisticIOUReport(payeeAccountID, payerAccountID, amount, chatReport.reportID, currency);
} else if (isPolicyExpenseChat) {
- // Splitting doesn’t affect the amount, so no adjustment is needed
- // The amount remains constant after the split
- if (!isSplitExpense) {
- iouReport = {...iouReport};
- // Because of the Expense reports are stored as negative values, we subtract the total from the amount
- if (iouReport?.currency === currency) {
- if (!Number.isNaN(iouReport.total) && iouReport.total !== undefined) {
- iouReport.total -= amount;
- }
+ iouReport = {...iouReport};
+ // Because of the Expense reports are stored as negative values, we subtract the total from the amount
+ if (iouReport?.currency === currency) {
+ if (!Number.isNaN(iouReport.total) && iouReport.total !== undefined) {
+ iouReport.total -= amount;
+ }
- if (typeof iouReport.unheldTotal === 'number') {
- iouReport.unheldTotal -= amount;
- }
+ if (typeof iouReport.unheldTotal === 'number') {
+ iouReport.unheldTotal -= amount;
}
}
} else {
@@ -3304,7 +3295,6 @@ function getMoneyRequestInformation(moneyRequestInformation: MoneyRequestInforma
let optimisticTransaction = buildOptimisticTransaction({
existingTransactionID,
existingTransaction,
- originalTransactionID: transactionParams.originalTransactionID,
policy,
transactionParams: {
amount: isExpenseReport(iouReport) ? -amount : amount,
@@ -5186,7 +5176,7 @@ function requestMoney(requestMoneyInformation: RequestMoneyInformation) {
isTestDrive,
} = transactionParams;
- const testDriveCommentReportActionID = isTestDrive ? NumberUtils.rand64() : undefined;
+ const testDriveCommentReportActionID = isTestDrive ? rand64() : undefined;
const sanitizedWaypoints = waypoints ? JSON.stringify(sanitizeRecentWaypoints(waypoints)) : undefined;
@@ -8463,7 +8453,7 @@ function getReportFromHoldRequestsOnyxData(
} {
const {holdReportActions, holdTransactions} = getHoldReportActionsAndTransactions(iouReport?.reportID);
const firstHoldTransaction = holdTransactions.at(0);
- const newParentReportActionID = NumberUtils.rand64();
+ const newParentReportActionID = rand64();
const coefficient = isExpenseReport(iouReport) ? -1 : 1;
const isPolicyExpenseChat = isPolicyExpenseChatReportUtil(chatReport);
@@ -8517,7 +8507,7 @@ function getReportFromHoldRequestsOnyxData(
],
};
- const reportActionID = NumberUtils.rand64();
+ const reportActionID = rand64();
addHoldReportActions[reportActionID] = {
...holdReportAction,
reportActionID,
@@ -11278,406 +11268,6 @@ function getSearchOnyxUpdate({participant, transaction, iouReport}: GetSearchOny
}
}
-/**
- * Create a draft transaction to set up split expense details for the split expense flow
- */
-function initSplitExpense(transaction: OnyxEntry, reportID: string, isOpenCreatedSplit?: boolean) {
- if (!transaction) {
- return;
- }
-
- if (isOpenCreatedSplit) {
- const originalTransactionID = transaction.comment?.originalTransactionID;
- const originalTransaction = allTransactions[`${ONYXKEYS.COLLECTION.TRANSACTION}${originalTransactionID}`];
-
- const relatedTransactions = Object.values(allTransactions).filter((currentTransaction) => {
- const currentReport = allReports?.[`${ONYXKEYS.COLLECTION.REPORT}${currentTransaction?.reportID}`];
- return currentTransaction?.comment?.originalTransactionID === originalTransactionID && !!currentReport && currentReport?.stateNum !== CONST.REPORT.STATUS_NUM.CLOSED;
- });
-
- const transactionDetails = getTransactionDetails(originalTransaction);
-
- const draftTransaction = buildOptimisticTransaction({
- originalTransactionID,
- transactionParams: {
- splitExpenses: relatedTransactions.map((currentTransaction) => {
- const currentTransactionDetails = getTransactionDetails(currentTransaction);
- return {
- transactionID: currentTransaction?.transactionID ?? String(CONST.DEFAULT_NUMBER_ID),
- amount: currentTransactionDetails?.amount ?? 0,
- description: currentTransactionDetails?.comment,
- category: currentTransactionDetails?.category,
- tags: currentTransactionDetails?.tag ? [currentTransactionDetails?.tag] : [],
- created: currentTransaction?.created ?? '',
- };
- }),
- amount: transactionDetails?.amount ?? 0,
- currency: transactionDetails?.currency ?? CONST.CURRENCY.USD,
- merchant: transactionDetails?.merchant ?? '',
- participants: transaction?.participants,
- attendees: transactionDetails?.attendees as Attendee[],
- reportID: originalTransaction?.reportID,
- },
- });
-
- Onyx.set(`${ONYXKEYS.COLLECTION.SPLIT_TRANSACTION_DRAFT}${originalTransactionID}`, draftTransaction);
-
- Navigation.navigate(
- ROUTES.SPLIT_EXPENSE.getRoute(
- originalTransaction?.reportID ?? String(CONST.DEFAULT_NUMBER_ID),
- originalTransactionID,
- transaction.transactionID,
- Navigation.getActiveRouteWithoutParams(),
- ),
- );
- return;
- }
-
- const transactionDetails = getTransactionDetails(transaction);
- const transactionDetailsAmount = transactionDetails?.amount ?? 0;
-
- const draftTransaction = buildOptimisticTransaction({
- originalTransactionID: transaction.transactionID,
- transactionParams: {
- splitExpenses: [
- {
- transactionID: NumberUtils.rand64(),
- amount: Math.floor(transactionDetailsAmount / 2),
- description: transactionDetails?.comment,
- category: transactionDetails?.category,
- tags: transaction?.tag ? [transaction?.tag] : [],
- created: transactionDetails?.created ?? DateUtils.getDBTime(),
- },
- {
- transactionID: NumberUtils.rand64(),
- amount: Math.ceil(transactionDetailsAmount / 2),
- description: transactionDetails?.comment,
- category: transactionDetails?.category,
- tags: transaction?.tag ? [transaction?.tag] : [],
- created: transactionDetails?.created ?? DateUtils.getDBTime(),
- },
- ],
- amount: transactionDetailsAmount,
- currency: transactionDetails?.currency ?? CONST.CURRENCY.USD,
- merchant: transactionDetails?.merchant ?? '',
- participants: transaction?.participants,
- attendees: transactionDetails?.attendees as Attendee[],
- reportID,
- },
- });
-
- Onyx.set(`${ONYXKEYS.COLLECTION.SPLIT_TRANSACTION_DRAFT}${transaction?.transactionID}`, draftTransaction);
-
- Navigation.navigate(ROUTES.SPLIT_EXPENSE.getRoute(reportID ?? String(CONST.DEFAULT_NUMBER_ID), transaction.transactionID, undefined, Navigation.getActiveRoute()));
-}
-
-/**
- * Create a draft transaction to set up split expense details for edit split details
- */
-function initDraftSplitExpenseDataForEdit(draftTransaction: OnyxEntry, splitExpenseTransactionID: string, reportID: string) {
- if (!draftTransaction || !splitExpenseTransactionID) {
- return;
- }
- const originalTransactionID = draftTransaction?.comment?.originalTransactionID;
- const originalTransaction = allTransactions?.[`${ONYXKEYS.COLLECTION.TRANSACTION}${originalTransactionID}`];
- const splitTransactionData = draftTransaction?.comment?.splitExpenses?.find((item) => item.transactionID === splitExpenseTransactionID);
-
- const transactionDetails = getTransactionDetails(originalTransaction);
-
- const editDraftTransaction = buildOptimisticTransaction({
- existingTransactionID: CONST.IOU.OPTIMISTIC_TRANSACTION_ID,
- originalTransactionID,
- transactionParams: {
- amount: Number(splitTransactionData?.amount),
- currency: transactionDetails?.currency ?? CONST.CURRENCY.USD,
- comment: splitTransactionData?.description,
- tag: splitTransactionData?.tags?.at(0),
- merchant: transactionDetails?.merchant ?? '',
- participants: draftTransaction?.participants,
- attendees: transactionDetails?.attendees as Attendee[],
- reportID,
- created: splitTransactionData?.created ?? '',
- category: splitTransactionData?.category ?? '',
- },
- });
-
- Onyx.set(`${ONYXKEYS.COLLECTION.SPLIT_TRANSACTION_DRAFT}${CONST.IOU.OPTIMISTIC_TRANSACTION_ID}`, editDraftTransaction);
-
- Navigation.navigate(ROUTES.SPLIT_EXPENSE_EDIT.getRoute(reportID, originalTransactionID, splitTransactionData?.transactionID, Navigation.getActiveRoute()));
-}
-
-/**
- * Append a new split expense entry to the draft transaction’s splitExpenses array
- */
-function addSplitExpenseField(transaction: OnyxEntry, draftTransaction: OnyxEntry) {
- if (!transaction || !draftTransaction) {
- return;
- }
-
- const transactionDetails = getTransactionDetails(transaction);
-
- Onyx.merge(`${ONYXKEYS.COLLECTION.SPLIT_TRANSACTION_DRAFT}${transaction.transactionID}`, {
- comment: {
- splitExpenses: [
- ...(draftTransaction.comment?.splitExpenses ?? []),
- {
- transactionID: NumberUtils.rand64(),
- amount: 0,
- description: transactionDetails?.comment,
- category: transactionDetails?.category,
- tags: transaction?.tag ? [transaction?.tag] : [],
- created: transactionDetails?.created ?? DateUtils.getDBTime(),
- },
- ],
- },
- });
-}
-
-function removeSplitExpenseField(draftTransaction: OnyxEntry, splitExpenseTransactionID: string) {
- if (!draftTransaction || !splitExpenseTransactionID) {
- return;
- }
-
- const originalTransactionID = draftTransaction?.comment?.originalTransactionID;
-
- const splitExpenses = draftTransaction.comment?.splitExpenses?.filter((item) => item.transactionID !== splitExpenseTransactionID);
-
- Onyx.merge(`${ONYXKEYS.COLLECTION.SPLIT_TRANSACTION_DRAFT}${originalTransactionID}`, {
- comment: {
- splitExpenses,
- },
- });
-}
-
-function updateSplitExpenseField(splitExpenseDraftTransaction: OnyxEntry, splitExpenseTransactionID: string) {
- if (!splitExpenseDraftTransaction || !splitExpenseTransactionID) {
- return;
- }
-
- const originalTransactionID = splitExpenseDraftTransaction?.comment?.originalTransactionID;
-
- const draftTransaction = allDraftSplitTransactions[`${ONYXKEYS.COLLECTION.SPLIT_TRANSACTION_DRAFT}${originalTransactionID}`];
-
- const splitExpenses = draftTransaction?.comment?.splitExpenses?.map((item) => {
- if (item.transactionID === splitExpenseTransactionID) {
- const transactionDetails = getTransactionDetails(splitExpenseDraftTransaction);
-
- return {
- ...item,
- description: transactionDetails?.comment,
- category: transactionDetails?.category,
- tags: splitExpenseDraftTransaction?.tag ? [splitExpenseDraftTransaction?.tag] : [],
- created: transactionDetails?.created ?? DateUtils.getDBTime(),
- };
- }
- return item;
- });
-
- Onyx.merge(`${ONYXKEYS.COLLECTION.SPLIT_TRANSACTION_DRAFT}${originalTransactionID}`, {
- comment: {
- splitExpenses,
- },
- });
-}
-
-function updateSplitExpenseAmountField(draftTransaction: OnyxEntry, currentItemTransactionID: string, amount: number) {
- if (!draftTransaction?.transactionID || !currentItemTransactionID) {
- return;
- }
-
- const updatedSplitExpenses = draftTransaction.comment?.splitExpenses?.map((splitExpense) => {
- if (splitExpense.transactionID === currentItemTransactionID) {
- return {
- ...splitExpense,
- amount,
- };
- }
- return splitExpense;
- });
-
- Onyx.merge(`${ONYXKEYS.COLLECTION.SPLIT_TRANSACTION_DRAFT}${draftTransaction?.comment?.originalTransactionID}`, {
- comment: {
- splitExpenses: updatedSplitExpenses,
- },
- });
-}
-
-function saveSplitTransactions(draftTransaction: OnyxEntry, hash: number) {
- const transactionReport = getReportOrDraftReport(draftTransaction?.reportID);
- const parentTransactionReport = getReportOrDraftReport(transactionReport?.parentReportID);
- const expenseReport = transactionReport?.type === CONST.REPORT.TYPE.EXPENSE ? transactionReport : parentTransactionReport;
-
- const originalTransactionID = draftTransaction?.comment?.originalTransactionID ?? CONST.IOU.OPTIMISTIC_TRANSACTION_ID;
- const originalTransaction = allTransactions?.[`${ONYXKEYS.COLLECTION.TRANSACTION}${originalTransactionID}`];
- const originalTransactionViolations = allTransactionViolations[`${ONYXKEYS.COLLECTION.TRANSACTION_VIOLATIONS}${originalTransactionID}`] ?? [];
- const iouActions = getIOUActionForTransactions([originalTransactionID], expenseReport?.reportID);
-
- const policy = getPolicy(expenseReport?.policyID);
- const policyCategories = getPolicyCategoriesData(expenseReport?.policyID);
- const policyTags = getPolicyTagsData(expenseReport?.policyID);
- const participants = getMoneyRequestParticipantsFromReport(expenseReport);
- const splitExpenses = draftTransaction?.comment?.splitExpenses ?? [];
-
- const splits: SplitTransactionSplitsParam =
- splitExpenses.map((split) => ({
- amount: split.amount,
- category: split.category ?? '',
- tag: split.tags?.[0] ?? '',
- created: DateUtils.extractDate(split.created),
- merchant: draftTransaction?.merchant ?? '',
- transactionID: split.transactionID,
- comment: {
- comment: split.description,
- },
- })) ?? [];
-
- const successData = [] as OnyxUpdate[];
- const failureData = [] as OnyxUpdate[];
- const optimisticData = [] as OnyxUpdate[];
-
- splitExpenses.forEach((splitExpense, index) => {
- const requestMoneyInformation = {
- report: expenseReport,
- participantParams: {
- participant: participants.at(0) ?? ({} as Participant),
- payeeEmail: currentUserPersonalDetails?.login ?? '',
- payeeAccountID: currentUserPersonalDetails?.accountID ?? CONST.DEFAULT_NUMBER_ID,
- },
- policyParams: {
- policy,
- policyCategories,
- policyTags,
- },
- transactionParams: {
- amount: splitExpense.amount ?? 0,
- currency: draftTransaction?.currency ?? CONST.CURRENCY.USD,
- created: splitExpense.created,
- merchant: draftTransaction?.merchant ?? '',
- comment: splitExpense.description,
- category: splitExpense.category,
- tag: splitExpense.tags?.[0],
- originalTransactionID,
- attendees: draftTransaction?.comment?.attendees,
- },
- };
-
- const {report, participantParams, policyParams, transactionParams} = requestMoneyInformation;
- const parsedComment = getParsedComment(transactionParams.comment ?? '');
- transactionParams.comment = parsedComment;
-
- const currentChatReport = getReportOrDraftReport(report?.chatReportID);
- const parentChatReport = getReportOrDraftReport(currentChatReport?.parentReportID);
-
- const existingTransactionID = splitExpense.transactionID;
-
- const {transactionThreadReportID, createdReportActionIDForThread, onyxData, iouAction} = getMoneyRequestInformation({
- participantParams,
- parentChatReport,
- policyParams,
- transactionParams,
- moneyRequestReportID: report?.reportID,
- existingTransactionID,
- isSplitExpense: true,
- });
-
- const split = splits.at(index);
- if (split) {
- // For request params we need to have the transactionThreadReportID, createdReportActionIDForThread and splitReportActionID which we get from moneyRequestInformation
- split.transactionThreadReportID = transactionThreadReportID;
- split.createdReportActionIDForThread = createdReportActionIDForThread;
- split.splitReportActionID = iouAction.reportActionID;
- }
-
- optimisticData.push(...(onyxData.optimisticData ?? []));
- successData.push(...(onyxData.successData ?? []));
- failureData.push(...(onyxData.failureData ?? []));
- });
-
- optimisticData.push({
- onyxMethod: Onyx.METHOD.MERGE,
- key: `${ONYXKEYS.COLLECTION.TRANSACTION}${originalTransactionID}`,
- value: {
- ...originalTransaction,
- reportID: CONST.REPORT.SPLIT_REPORT_ID,
- },
- });
-
- const firstIOU = iouActions.at(0);
- if (firstIOU) {
- const {updatedReportAction, iouReport} = prepareToCleanUpMoneyRequest(originalTransactionID, firstIOU, Permissions.canUseTableReportView(betas));
- optimisticData.push({
- onyxMethod: Onyx.METHOD.MERGE,
- key: `${ONYXKEYS.COLLECTION.REPORT_ACTIONS}${iouReport?.reportID}`,
- value: updatedReportAction,
- });
-
- failureData.push({
- onyxMethod: Onyx.METHOD.MERGE,
- key: `${ONYXKEYS.COLLECTION.REPORT_ACTIONS}${iouReport?.reportID}`,
- value: {
- [firstIOU.reportActionID]: {
- ...firstIOU,
- pendingAction: null,
- },
- },
- });
- }
-
- failureData.push({
- onyxMethod: Onyx.METHOD.MERGE,
- key: `${ONYXKEYS.COLLECTION.TRANSACTION}${originalTransactionID}`,
- value: originalTransaction,
- });
-
- optimisticData.push({
- onyxMethod: Onyx.METHOD.MERGE,
- key: `${ONYXKEYS.COLLECTION.SNAPSHOT}${hash}`,
- value: {
- data: {
- [`${ONYXKEYS.COLLECTION.TRANSACTION}${originalTransactionID}`]: {
- ...originalTransactionViolations,
- reportID: CONST.REPORT.SPLIT_REPORT_ID,
- },
- },
- },
- });
-
- failureData.push({
- onyxMethod: Onyx.METHOD.MERGE,
- key: `${ONYXKEYS.COLLECTION.SNAPSHOT}${hash}`,
- value: {
- data: {
- [`${ONYXKEYS.COLLECTION.TRANSACTION}${originalTransactionID}`]: originalTransactionViolations,
- },
- },
- });
-
- // Prepare splitApiParams for the Transaction_Split API call which requires a specific format for the splits
- // The format is: splits[0][amount], splits[0][category], splits[0][tag], etc.
- const splitApiParams = {} as Record;
- splits.forEach((split, i) => {
- Object.entries(split).forEach(([key, value]) => {
- const formattedValue = value !== null && typeof value === 'object' ? JSON.stringify(value) : value;
- splitApiParams[`splits[${i}][${key}]`] = formattedValue;
- });
- });
-
- const parameters: SplitTransactionParams = {
- ...splitApiParams,
- isReverseSplitOperation: false,
- transactionID: originalTransactionID,
- };
-
- API.write(WRITE_COMMANDS.SPLIT_TRANSACTION, parameters, {optimisticData, successData, failureData});
- InteractionManager.runAfterInteractions(() => removeDraftSplitTransaction(originalTransactionID));
- const isSearchPageTopmostFullScreenRoute = isSearchTopmostFullScreenRoute();
- if (isSearchPageTopmostFullScreenRoute || !transactionReport?.parentReportID) {
- Navigation.dismissModal();
- return;
- }
- Navigation.dismissModalWithReport({reportID: transactionReport?.parentReportID});
-}
-
export {
adjustRemainingSplitShares,
getNextApproverAccountID,
@@ -11771,13 +11361,6 @@ export {
canSubmitReport,
submitPerDiemExpense,
calculateDiffAmount,
- initSplitExpense,
- addSplitExpenseField,
- updateSplitExpenseAmountField,
- saveSplitTransactions,
- initDraftSplitExpenseDataForEdit,
- removeSplitExpenseField,
- updateSplitExpenseField,
reopenReport,
retractReport,
};
diff --git a/src/libs/actions/TransactionEdit.ts b/src/libs/actions/TransactionEdit.ts
index ba50e7700ba2..57cbcffff354 100644
--- a/src/libs/actions/TransactionEdit.ts
+++ b/src/libs/actions/TransactionEdit.ts
@@ -86,14 +86,6 @@ function removeDraftTransaction(transactionID: string | undefined) {
Onyx.set(`${ONYXKEYS.COLLECTION.TRANSACTION_DRAFT}${transactionID}`, null);
}
-function removeDraftSplitTransaction(transactionID: string | undefined) {
- if (!transactionID) {
- return;
- }
-
- Onyx.set(`${ONYXKEYS.COLLECTION.SPLIT_TRANSACTION_DRAFT}${transactionID}`, null);
-}
-
function removeDraftTransactions() {
const draftTransactions = getDraftTransactions();
const draftTransactionsSet = draftTransactions.reduce((acc, item) => {
@@ -103,12 +95,4 @@ function removeDraftTransactions() {
Onyx.multiSet(draftTransactionsSet);
}
-export {
- createBackupTransaction,
- removeBackupTransaction,
- restoreOriginalTransactionFromBackup,
- createDraftTransaction,
- removeDraftTransaction,
- removeDraftTransactions,
- removeDraftSplitTransaction,
-};
+export {createBackupTransaction, removeBackupTransaction, restoreOriginalTransactionFromBackup, createDraftTransaction, removeDraftTransaction, removeDraftTransactions};
diff --git a/src/pages/home/report/ReportActionCompose/AttachmentPickerWithMenuItems.tsx b/src/pages/home/report/ReportActionCompose/AttachmentPickerWithMenuItems.tsx
index 77de23706b3e..1764a3f3bfa9 100644
--- a/src/pages/home/report/ReportActionCompose/AttachmentPickerWithMenuItems.tsx
+++ b/src/pages/home/report/ReportActionCompose/AttachmentPickerWithMenuItems.tsx
@@ -35,10 +35,7 @@ import ONYXKEYS from '@src/ONYXKEYS';
import ROUTES from '@src/ROUTES';
import type * as OnyxTypes from '@src/types/onyx';
-type MoneyRequestOptions = Record<
- Exclude,
- PopoverMenuItem
->;
+type MoneyRequestOptions = Record, PopoverMenuItem>;
type AttachmentPickerWithMenuItemsProps = {
/** The report currently being looked at */
diff --git a/src/pages/iou/SplitExpenseEditPage.tsx b/src/pages/iou/SplitExpenseEditPage.tsx
deleted file mode 100644
index 2b7f85cd2c53..000000000000
--- a/src/pages/iou/SplitExpenseEditPage.tsx
+++ /dev/null
@@ -1,182 +0,0 @@
-import React, {useMemo} from 'react';
-import {View} from 'react-native';
-import {useOnyx} from 'react-native-onyx';
-import FullPageNotFoundView from '@components/BlockingViews/FullPageNotFoundView';
-import Button from '@components/Button';
-import FixedFooter from '@components/FixedFooter';
-import HeaderWithBackButton from '@components/HeaderWithBackButton';
-import MenuItemWithTopDescription from '@components/MenuItemWithTopDescription';
-import ScreenWrapper from '@components/ScreenWrapper';
-import useLocalize from '@hooks/useLocalize';
-import useThemeStyles from '@hooks/useThemeStyles';
-import {removeSplitExpenseField, updateSplitExpenseField} from '@libs/actions/IOU';
-import {convertToDisplayString} from '@libs/CurrencyUtils';
-import Navigation from '@libs/Navigation/Navigation';
-import type {PlatformStackScreenProps} from '@libs/Navigation/PlatformStackNavigation/types';
-import type {SplitExpenseParamList} from '@libs/Navigation/types';
-import {getPolicy} from '@libs/PolicyUtils';
-import type {TransactionDetails} from '@libs/ReportUtils';
-import {getReportOrDraftReport, getTransactionDetails} from '@libs/ReportUtils';
-import CONST from '@src/CONST';
-import ONYXKEYS from '@src/ONYXKEYS';
-import ROUTES from '@src/ROUTES';
-import type SCREENS from '@src/SCREENS';
-import {isEmptyObject} from '@src/types/utils/EmptyObject';
-
-type SplitExpensePageProps = PlatformStackScreenProps;
-
-function SplitExpenseEditPage({route}: SplitExpensePageProps) {
- const styles = useThemeStyles();
- const {translate} = useLocalize();
-
- const {reportID, transactionID, splitExpenseTransactionID = '', backTo} = route.params;
-
- const [splitExpenseDraftTransaction] = useOnyx(`${ONYXKEYS.COLLECTION.SPLIT_TRANSACTION_DRAFT}${CONST.IOU.OPTIMISTIC_TRANSACTION_ID}`, {canBeMissing: false});
- const splitExpenseDraftTransactionDetails = useMemo>(() => getTransactionDetails(splitExpenseDraftTransaction) ?? {}, [splitExpenseDraftTransaction]);
-
- const [transaction] = useOnyx(`${ONYXKEYS.COLLECTION.TRANSACTION}${transactionID}`, {canBeMissing: false});
- const transactionDetails = useMemo>(() => getTransactionDetails(transaction) ?? {}, [transaction]);
- const transactionDetailsAmount = transactionDetails?.amount ?? 0;
-
- const [draftTransactioWithSplitExpenses] = useOnyx(`${ONYXKEYS.COLLECTION.SPLIT_TRANSACTION_DRAFT}${transactionID}`, {canBeMissing: false});
- const splitExpensesList = draftTransactioWithSplitExpenses?.comment?.splitExpenses;
-
- const currentAmount = transactionDetailsAmount >= 0 ? Math.abs(Number(splitExpenseDraftTransactionDetails?.amount)) : Number(splitExpenseDraftTransactionDetails?.amount);
-
- const report = getReportOrDraftReport(reportID);
- const policy = getPolicy(report?.policyID);
-
- return (
-
-
-
- Navigation.goBack(backTo)}
- />
-
- {
- Navigation.navigate(
- ROUTES.MONEY_REQUEST_STEP_DESCRIPTION.getRoute(
- CONST.IOU.ACTION.EDIT,
- CONST.IOU.TYPE.SPLIT_EXPENSE,
- CONST.IOU.OPTIMISTIC_TRANSACTION_ID,
- reportID,
- Navigation.getActiveRoute(),
- ),
- );
- }}
- style={[styles.moneyRequestMenuItem]}
- titleStyle={styles.flex1}
- numberOfLinesTitle={2}
- />
- {!!policy?.areCategoriesEnabled && (
- {
- Navigation.navigate(
- ROUTES.MONEY_REQUEST_STEP_CATEGORY.getRoute(
- CONST.IOU.ACTION.EDIT,
- CONST.IOU.TYPE.SPLIT_EXPENSE,
- CONST.IOU.OPTIMISTIC_TRANSACTION_ID,
- reportID,
- Navigation.getActiveRoute(),
- ),
- );
- }}
- style={[styles.moneyRequestMenuItem]}
- titleStyle={styles.flex1}
- />
- )}
- {!!policy?.areTagsEnabled && (
- {
- Navigation.navigate(
- ROUTES.MONEY_REQUEST_STEP_TAG.getRoute(
- CONST.IOU.ACTION.EDIT,
- CONST.IOU.TYPE.SPLIT_EXPENSE,
- 0,
- CONST.IOU.OPTIMISTIC_TRANSACTION_ID,
- reportID,
- Navigation.getActiveRoute(),
- ),
- );
- }}
- style={[styles.moneyRequestMenuItem]}
- titleStyle={styles.flex1}
- />
- )}
- {
- Navigation.navigate(
- ROUTES.MONEY_REQUEST_STEP_DATE.getRoute(
- CONST.IOU.ACTION.EDIT,
- CONST.IOU.TYPE.SPLIT_EXPENSE,
- CONST.IOU.OPTIMISTIC_TRANSACTION_ID,
- reportID,
- Navigation.getActiveRoute(),
- ),
- );
- }}
- style={[styles.moneyRequestMenuItem]}
- titleStyle={styles.flex1}
- />
-
-
- {Number(splitExpensesList?.length) > 2 && (
-
-
-
-
- );
-}
-SplitExpenseEditPage.displayName = 'SplitExpenseEditPage';
-
-export default SplitExpenseEditPage;
diff --git a/src/pages/iou/SplitExpensePage.tsx b/src/pages/iou/SplitExpensePage.tsx
deleted file mode 100644
index 5dd5f68344e0..000000000000
--- a/src/pages/iou/SplitExpensePage.tsx
+++ /dev/null
@@ -1,216 +0,0 @@
-import React, {useCallback, useEffect, useMemo} from 'react';
-import {View} from 'react-native';
-import {useOnyx} from 'react-native-onyx';
-import FullPageNotFoundView from '@components/BlockingViews/FullPageNotFoundView';
-import Button from '@components/Button';
-import FormHelpMessage from '@components/FormHelpMessage';
-import HeaderWithBackButton from '@components/HeaderWithBackButton';
-import * as Expensicons from '@components/Icon/Expensicons';
-import ScreenWrapper from '@components/ScreenWrapper';
-import {useSearchContext} from '@components/Search/SearchContext';
-import SelectionList from '@components/SelectionList';
-import SplitListItem from '@components/SelectionList/SplitListItem';
-import type {SectionListDataType, SplitListItemType} from '@components/SelectionList/types';
-import useLocalize from '@hooks/useLocalize';
-import useResponsiveLayout from '@hooks/useResponsiveLayout';
-import useThemeStyles from '@hooks/useThemeStyles';
-import {addSplitExpenseField, initDraftSplitExpenseDataForEdit, saveSplitTransactions, updateSplitExpenseAmountField} from '@libs/actions/IOU';
-import {convertToBackendAmount, convertToDisplayString} from '@libs/CurrencyUtils';
-import DateUtils from '@libs/DateUtils';
-import {canUseTouchScreen} from '@libs/DeviceCapabilities';
-import Navigation from '@libs/Navigation/Navigation';
-import type {PlatformStackScreenProps} from '@libs/Navigation/PlatformStackNavigation/types';
-import type {SplitExpenseParamList} from '@libs/Navigation/types';
-import type {TransactionDetails} from '@libs/ReportUtils';
-import {getTransactionDetails} from '@libs/ReportUtils';
-import type {TranslationPathOrText} from '@libs/TransactionPreviewUtils';
-import {isCardTransaction, isPerDiemRequest} from '@libs/TransactionUtils';
-import CONST from '@src/CONST';
-import ONYXKEYS from '@src/ONYXKEYS';
-import type SCREENS from '@src/SCREENS';
-import {isEmptyObject} from '@src/types/utils/EmptyObject';
-
-type SplitExpensePageProps = PlatformStackScreenProps;
-
-function SplitExpensePage({route}: SplitExpensePageProps) {
- const styles = useThemeStyles();
- const {translate} = useLocalize();
-
- const {reportID, transactionID, splitExpenseTransactionID, backTo} = route.params;
-
- const {shouldUseNarrowLayout} = useResponsiveLayout();
-
- const [errorMessage, setErrorMessage] = React.useState(null);
- const {currentSearchHash} = useSearchContext();
-
- const [draftTransaction] = useOnyx(`${ONYXKEYS.COLLECTION.SPLIT_TRANSACTION_DRAFT}${transactionID}`, {canBeMissing: false});
- const [transaction] = useOnyx(`${ONYXKEYS.COLLECTION.TRANSACTION}${transactionID}`, {canBeMissing: false});
- const [currencyList] = useOnyx(ONYXKEYS.CURRENCY_LIST, {canBeMissing: true});
-
- const transactionDetails = useMemo>(() => getTransactionDetails(transaction) ?? {}, [transaction]);
- const transactionDetailsAmount = transactionDetails?.amount ?? 0;
- const sumOfSplitExpenses = useMemo(() => (draftTransaction?.comment?.splitExpenses ?? []).reduce((acc, item) => acc + Math.abs(item.amount ?? 0), 0), [draftTransaction]);
- const currencySymbol = currencyList?.[transactionDetails.currency ?? '']?.symbol ?? transactionDetails.currency ?? CONST.CURRENCY.USD;
-
- const isPerDiem = isPerDiemRequest(transaction);
- const isCard = isCardTransaction(transaction);
-
- useEffect(() => {
- setErrorMessage(null);
- }, [sumOfSplitExpenses, draftTransaction?.comment?.splitExpenses?.length]);
-
- const onAddSplitExpense = useCallback(() => {
- addSplitExpenseField(transaction, draftTransaction);
- }, [draftTransaction, transaction]);
-
- const onSaveSplitExpense = useCallback(() => {
- if (sumOfSplitExpenses > Math.abs(transactionDetailsAmount)) {
- const difference = sumOfSplitExpenses - Math.abs(transactionDetailsAmount);
- setErrorMessage(translate('iou.totalAmountGreaterThanOriginal', {amount: convertToDisplayString(difference, transactionDetails?.currency)}));
- return;
- }
- if (sumOfSplitExpenses < Math.abs(transactionDetailsAmount) && (isPerDiem || isCard)) {
- const difference = Math.abs(transactionDetailsAmount) - sumOfSplitExpenses;
- setErrorMessage(translate('iou.totalAmountLessThanOriginal', {amount: convertToDisplayString(difference, transactionDetails?.currency)}));
- return;
- }
-
- if ((draftTransaction?.comment?.splitExpenses ?? []).find((item) => item.amount === 0)) {
- setErrorMessage(translate('iou.splitExpenseZeroAmount'));
- return;
- }
-
- saveSplitTransactions(draftTransaction, currentSearchHash);
- }, [currentSearchHash, draftTransaction, isCard, isPerDiem, sumOfSplitExpenses, transactionDetailsAmount, transactionDetails?.currency, translate]);
-
- const onSplitExpenseAmountChange = useCallback(
- (currentItemTransactionID: string, value: number) => {
- const amountInCents = convertToBackendAmount(value);
- updateSplitExpenseAmountField(draftTransaction, currentItemTransactionID, amountInCents);
- },
- [draftTransaction],
- );
-
- const getTranslatedText = useCallback((item: TranslationPathOrText) => (item.translationPath ? translate(item.translationPath) : item.text ?? ''), [translate]);
-
- const [sections] = useMemo(() => {
- const dotSeparator: TranslationPathOrText = {text: ` ${CONST.DOT_SEPARATOR} `};
- const isTransactionMadeWithCard = isCardTransaction(transaction);
- const showCashOrCard: TranslationPathOrText = {translationPath: isTransactionMadeWithCard ? 'iou.card' : 'iou.cash'};
-
- const items: SplitListItemType[] = (draftTransaction?.comment?.splitExpenses ?? []).map((item): SplitListItemType => {
- const previewHeaderText: TranslationPathOrText[] = [showCashOrCard];
-
- const date = DateUtils.formatWithUTCTimeZone(
- item.created,
- DateUtils.doesDateBelongToAPastYear(item.created) ? CONST.DATE.MONTH_DAY_YEAR_ABBR_FORMAT : CONST.DATE.MONTH_DAY_ABBR_FORMAT,
- );
- previewHeaderText.unshift({text: date}, dotSeparator);
-
- const headerText = previewHeaderText.reduce((text, currentKey) => {
- return `${text}${getTranslatedText(currentKey)}`;
- }, '');
-
- return {
- ...item,
- headerText,
- originalAmount: transactionDetailsAmount,
- amount: transactionDetailsAmount >= 0 ? Math.abs(Number(item.amount)) : Number(item.amount),
- merchant: draftTransaction?.merchant ?? '',
- currency: draftTransaction?.currency ?? CONST.CURRENCY.USD,
- transactionID: item?.transactionID ?? CONST.IOU.OPTIMISTIC_TRANSACTION_ID,
- currencySymbol,
- onSplitExpenseAmountChange,
- isTransactionLinked: splitExpenseTransactionID === item.transactionID,
- keyForList: item?.transactionID,
- };
- });
-
- const newSections: Array> = [{data: items}];
-
- return [newSections];
- }, [transaction, draftTransaction, getTranslatedText, transactionDetailsAmount, currencySymbol, onSplitExpenseAmountChange, splitExpenseTransactionID]);
-
- const headerContent = useMemo(
- () => (
-
-
-
- ),
- [onAddSplitExpense, shouldUseNarrowLayout, styles.flex1, styles.flexRow, styles.gap2, styles.mb3, styles.ph5, styles.w100, translate],
- );
-
- const footerContent = useMemo(() => {
- return (
- <>
- {!!errorMessage && (
-
- )}
-
- >
- );
- }, [onSaveSplitExpense, styles.mb2, styles.ph1, styles.w100, translate, errorMessage]);
-
- const initiallyFocusedOptionKey = useMemo(
- () => sections.at(0)?.data.find((option) => option.transactionID === splitExpenseTransactionID)?.keyForList,
- [sections, splitExpenseTransactionID],
- );
-
- return (
-
-
-
- Navigation.goBack(backTo)}
- />
- {
- initDraftSplitExpenseDataForEdit(draftTransaction, item.transactionID, reportID);
- }}
- headerContent={headerContent}
- sections={sections}
- initiallyFocusedOptionKey={initiallyFocusedOptionKey}
- ListItem={SplitListItem}
- containerStyle={[styles.flexBasisAuto, styles.pt1]}
- footerContent={footerContent}
- disableKeyboardShortcuts
- shouldSingleExecuteRowSelect
- canSelectMultiple={false}
- shouldPreventDefaultFocusOnSelectRow
- />
-
-
-
- );
-}
-SplitExpensePage.displayName = 'SplitExpensePage';
-
-export default SplitExpensePage;
diff --git a/src/pages/iou/request/IOURequestStartPage.tsx b/src/pages/iou/request/IOURequestStartPage.tsx
index 0af6bb8fecc0..b55aaafa7e66 100644
--- a/src/pages/iou/request/IOURequestStartPage.tsx
+++ b/src/pages/iou/request/IOURequestStartPage.tsx
@@ -60,7 +60,6 @@ function IOURequestStartPage({
[CONST.IOU.TYPE.SEND]: translate('iou.paySomeone', {name: getPayeeName(report)}),
[CONST.IOU.TYPE.PAY]: translate('iou.paySomeone', {name: getPayeeName(report)}),
[CONST.IOU.TYPE.SPLIT]: translate('iou.createExpense'),
- [CONST.IOU.TYPE.SPLIT_EXPENSE]: translate('iou.createExpense'),
[CONST.IOU.TYPE.TRACK]: translate('iou.createExpense'),
[CONST.IOU.TYPE.INVOICE]: translate('workspace.invoices.sendInvoice'),
[CONST.IOU.TYPE.CREATE]: translate('iou.createExpense'),
diff --git a/src/pages/iou/request/step/IOURequestStepCategory.tsx b/src/pages/iou/request/step/IOURequestStepCategory.tsx
index ee31bf0381b5..5cac8b3899f6 100644
--- a/src/pages/iou/request/step/IOURequestStepCategory.tsx
+++ b/src/pages/iou/request/step/IOURequestStepCategory.tsx
@@ -69,8 +69,8 @@ function IOURequestStepCategory({
const theme = useTheme();
const {translate} = useLocalize();
const isEditing = action === CONST.IOU.ACTION.EDIT;
- const isEditingSplit = (iouType === CONST.IOU.TYPE.SPLIT || iouType === CONST.IOU.TYPE.SPLIT_EXPENSE) && isEditing;
- const currentTransaction = isEditingSplit && !lodashIsEmpty(splitDraftTransaction) ? splitDraftTransaction : transaction;
+ const isEditingSplitBill = isEditing && iouType === CONST.IOU.TYPE.SPLIT;
+ const currentTransaction = isEditingSplitBill && !lodashIsEmpty(splitDraftTransaction) ? splitDraftTransaction : transaction;
const transactionCategory = getTransactionDetails(currentTransaction)?.category;
// eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing
@@ -83,22 +83,9 @@ function IOURequestStepCategory({
(!!transactionCategory || hasEnabledOptions(Object.values(policyCategories ?? {})));
const isSplitBill = iouType === CONST.IOU.TYPE.SPLIT;
- const isSplitExpense = iouType === CONST.IOU.TYPE.SPLIT_EXPENSE;
const canEditSplitBill = isSplitBill && reportAction && session?.accountID === reportAction.actorAccountID && areRequiredFieldsEmpty(transaction);
- const canEditSplitExpense = isSplitExpense && !!transaction;
-
// eslint-disable-next-line rulesdir/no-negated-variables
- let shouldShowNotFoundPage = false;
-
- if (isEditing) {
- if (isSplitBill) {
- shouldShowNotFoundPage = !canEditSplitBill;
- } else if (isSplitExpense) {
- shouldShowNotFoundPage = !canEditSplitExpense;
- } else {
- shouldShowNotFoundPage = !isMoneyRequestAction(reportAction) || !canEditMoneyRequest(reportAction);
- }
- }
+ const shouldShowNotFoundPage = isEditing && (isSplitBill ? !canEditSplitBill : !isMoneyRequestAction(reportAction) || !canEditMoneyRequest(reportAction));
const fetchData = () => {
if ((!!policy && !!policyCategories) || !report?.policyID) {
@@ -128,7 +115,7 @@ function IOURequestStepCategory({
if (transaction) {
// In the split flow, when editing we use SPLIT_TRANSACTION_DRAFT to save draft value
- if (isEditingSplit) {
+ if (isEditingSplitBill) {
setDraftSplitTransaction(transaction.transactionID, {category: updatedCategory}, policy);
navigateBack();
return;
diff --git a/src/pages/iou/request/step/IOURequestStepDate.tsx b/src/pages/iou/request/step/IOURequestStepDate.tsx
index 3bb470c62906..28621d484ce7 100644
--- a/src/pages/iou/request/step/IOURequestStepDate.tsx
+++ b/src/pages/iou/request/step/IOURequestStepDate.tsx
@@ -42,9 +42,9 @@ function IOURequestStepDate({
const styles = useThemeStyles();
const {translate} = useLocalize();
const policy = usePolicy(report?.policyID);
- const [policyCategories] = useOnyx(`${ONYXKEYS.COLLECTION.POLICY_CATEGORIES}${report?.policyID}`, {canBeMissing: false});
- const [policyTags] = useOnyx(`${ONYXKEYS.COLLECTION.POLICY_TAGS}${report?.policyID}`, {canBeMissing: false});
- const [splitDraftTransaction] = useOnyx(`${ONYXKEYS.COLLECTION.SPLIT_TRANSACTION_DRAFT}${transactionID}`, {canBeMissing: true});
+ const [policyCategories] = useOnyx(`${ONYXKEYS.COLLECTION.POLICY_CATEGORIES}${report?.policyID}`);
+ const [policyTags] = useOnyx(`${ONYXKEYS.COLLECTION.POLICY_TAGS}${report?.policyID}`);
+ const [splitDraftTransaction] = useOnyx(`${ONYXKEYS.COLLECTION.SPLIT_TRANSACTION_DRAFT}${transactionID}`);
const reportActionsReportID = useMemo(() => {
let actionsReportID;
if (action === CONST.IOU.ACTION.EDIT) {
@@ -54,33 +54,18 @@ function IOURequestStepDate({
}, [action, iouType, report?.reportID, report?.parentReportID]);
const [reportAction] = useOnyx(`${ONYXKEYS.COLLECTION.REPORT_ACTIONS}${reportActionsReportID}`, {
canEvict: false,
- canBeMissing: true,
// eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing
selector: (reportActions) => reportActions?.[`${report?.parentReportActionID || reportActionID}`],
});
- const [session] = useOnyx(ONYXKEYS.SESSION, {canBeMissing: false});
+ const [session] = useOnyx(ONYXKEYS.SESSION);
const isEditing = action === CONST.IOU.ACTION.EDIT;
- const isSplitBill = iouType === CONST.IOU.TYPE.SPLIT;
- const isSplitExpense = iouType === CONST.IOU.TYPE.SPLIT_EXPENSE;
// In the split flow, when editing we use SPLIT_TRANSACTION_DRAFT to save draft value
- const isEditingSplit = (isSplitBill || isSplitExpense) && isEditing;
- const currentCreated = isEditingSplit && !lodashIsEmpty(splitDraftTransaction) ? getFormattedCreated(splitDraftTransaction) : getFormattedCreated(transaction);
- const canEditingSplitBill = isEditingSplit && session && reportAction && session.accountID === reportAction.actorAccountID && areRequiredFieldsEmpty(transaction);
+ const isEditingSplitBill = iouType === CONST.IOU.TYPE.SPLIT && isEditing;
+ const currentCreated = isEditingSplitBill && !lodashIsEmpty(splitDraftTransaction) ? getFormattedCreated(splitDraftTransaction) : getFormattedCreated(transaction);
+ const canEditingSplitBill = isEditingSplitBill && session && reportAction && session.accountID === reportAction.actorAccountID && areRequiredFieldsEmpty(transaction);
const canEditMoneyRequest = isEditing && canEditFieldOfMoneyRequest(reportAction, CONST.EDIT_REQUEST_FIELD.DATE);
- const canEditSplitExpense = isSplitExpense && !!transaction;
-
// eslint-disable-next-line rulesdir/no-negated-variables
- let shouldShowNotFound = false;
-
- if (!isValidMoneyRequestType(iouType)) {
- shouldShowNotFound = true;
- } else if (isEditing) {
- if (isSplitBill) {
- shouldShowNotFound = !canEditMoneyRequest && !canEditingSplitBill;
- } else if (isSplitExpense) {
- shouldShowNotFound = !canEditSplitExpense;
- }
- }
+ const shouldShowNotFound = !isValidMoneyRequestType(iouType) || (isEditing && !canEditMoneyRequest && !canEditingSplitBill);
const navigateBack = () => {
Navigation.goBack(backTo);
@@ -96,7 +81,7 @@ function IOURequestStepDate({
}
// In the split flow, when editing we use SPLIT_TRANSACTION_DRAFT to save draft value
- if (isEditingSplit) {
+ if (isEditingSplitBill) {
setDraftSplitTransaction(transactionID, {created: newCreated});
navigateBack();
return;
diff --git a/src/pages/iou/request/step/IOURequestStepDescription.tsx b/src/pages/iou/request/step/IOURequestStepDescription.tsx
index 83591958f095..a9de8f6f2f2c 100644
--- a/src/pages/iou/request/step/IOURequestStepDescription.tsx
+++ b/src/pages/iou/request/step/IOURequestStepDescription.tsx
@@ -65,17 +65,16 @@ function IOURequestStepDescription({
const styles = useThemeStyles();
const {translate} = useLocalize();
const {inputCallbackRef} = useAutoFocusInput(true);
- const isEditing = action === CONST.IOU.ACTION.EDIT;
// In the split flow, when editing we use SPLIT_TRANSACTION_DRAFT to save draft value
- const isEditingSplit = (iouType === CONST.IOU.TYPE.SPLIT || iouType === CONST.IOU.TYPE.SPLIT_EXPENSE) && isEditing;
- const isTransactionDraft = shouldUseTransactionDraft(action, iouType);
+ const isEditingSplitBill = iouType === CONST.IOU.TYPE.SPLIT && action === CONST.IOU.ACTION.EDIT;
+ const isTransactionDraft = shouldUseTransactionDraft(action);
const currentDescriptionInMarkdown = useMemo(() => {
if (!isTransactionDraft) {
- return Parser.htmlToMarkdown(isEditingSplit && !lodashIsEmpty(splitDraftTransaction) ? splitDraftTransaction?.comment?.comment ?? '' : transaction?.comment?.comment ?? '');
+ return Parser.htmlToMarkdown(isEditingSplitBill && !lodashIsEmpty(splitDraftTransaction) ? splitDraftTransaction?.comment?.comment ?? '' : transaction?.comment?.comment ?? '');
}
- return isEditingSplit && !lodashIsEmpty(splitDraftTransaction) ? splitDraftTransaction?.comment?.comment ?? '' : transaction?.comment?.comment ?? '';
- }, [isTransactionDraft, isEditingSplit, splitDraftTransaction, transaction?.comment?.comment]);
+ return isEditingSplitBill && !lodashIsEmpty(splitDraftTransaction) ? splitDraftTransaction?.comment?.comment ?? '' : transaction?.comment?.comment ?? '';
+ }, [isTransactionDraft, isEditingSplitBill, splitDraftTransaction, transaction?.comment?.comment]);
const descriptionRef = useRef(currentDescriptionInMarkdown);
const isSavedRef = useRef(false);
@@ -123,7 +122,7 @@ function IOURequestStepDescription({
}
// In the split flow, when editing we use SPLIT_TRANSACTION_DRAFT to save draft value
- if (isEditingSplit) {
+ if (isEditingSplitBill) {
setDraftSplitTransaction(transaction?.transactionID, {comment: newComment});
navigateBack();
return;
@@ -138,24 +137,11 @@ function IOURequestStepDescription({
navigateBack();
};
+ const isEditing = action === CONST.IOU.ACTION.EDIT;
const isSplitBill = iouType === CONST.IOU.TYPE.SPLIT;
- const isSplitExpense = iouType === CONST.IOU.TYPE.SPLIT_EXPENSE;
const canEditSplitBill = isSplitBill && reportAction && session?.accountID === reportAction.actorAccountID && areRequiredFieldsEmpty(transaction);
- const canEditSplitExpense = isSplitExpense && !!transaction;
-
// eslint-disable-next-line rulesdir/no-negated-variables
- let shouldShowNotFoundPage = false;
-
- if (isEditing) {
- if (isSplitBill) {
- shouldShowNotFoundPage = !canEditSplitBill;
- } else if (isSplitExpense) {
- shouldShowNotFoundPage = !canEditSplitExpense;
- } else {
- shouldShowNotFoundPage = !isMoneyRequestAction(reportAction) || !canEditMoneyRequest(reportAction);
- }
- }
-
+ const shouldShowNotFoundPage = isEditing && (isSplitBill ? !canEditSplitBill : !isMoneyRequestAction(reportAction) || !canEditMoneyRequest(reportAction));
const isReportInGroupPolicy = !!report?.policyID && report.policyID !== CONST.POLICY.ID_FAKE && getPersonalPolicy()?.id !== report.policyID;
const getDescriptionHint = () => {
return transaction?.category && policyCategories ? policyCategories[transaction?.category]?.commentHint ?? '' : '';
diff --git a/src/pages/iou/request/step/IOURequestStepDestination.tsx b/src/pages/iou/request/step/IOURequestStepDestination.tsx
index 63ec2335d3eb..cc6928079061 100644
--- a/src/pages/iou/request/step/IOURequestStepDestination.tsx
+++ b/src/pages/iou/request/step/IOURequestStepDestination.tsx
@@ -52,7 +52,7 @@ function IOURequestStepDestination({
openedFromStartPage = false,
explicitPolicyID,
}: IOURequestStepDestinationProps) {
- const [policy, policyMetadata] = useOnyx(`${ONYXKEYS.COLLECTION.POLICY}${explicitPolicyID ?? getIOURequestPolicyID(transaction, report)}`, {canBeMissing: false});
+ const [policy, policyMetadata] = useOnyx(`${ONYXKEYS.COLLECTION.POLICY}${explicitPolicyID ?? getIOURequestPolicyID(transaction, report)}`);
const {accountID} = useCurrentUserPersonalDetails();
const policyExpenseReport = policy?.id ? getPolicyExpenseChat(accountID, policy.id) : undefined;
@@ -105,7 +105,6 @@ function IOURequestStepDestination({
[CONST.IOU.TYPE.SEND]: translate('iou.paySomeone', {name: ''}),
[CONST.IOU.TYPE.PAY]: translate('iou.paySomeone', {name: ''}),
[CONST.IOU.TYPE.SPLIT]: translate('iou.createExpense'),
- [CONST.IOU.TYPE.SPLIT_EXPENSE]: translate('iou.createExpense'),
[CONST.IOU.TYPE.TRACK]: translate('iou.createExpense'),
[CONST.IOU.TYPE.INVOICE]: translate('workspace.invoices.sendInvoice'),
[CONST.IOU.TYPE.CREATE]: translate('iou.createExpense'),
diff --git a/src/pages/iou/request/step/IOURequestStepSubrate.tsx b/src/pages/iou/request/step/IOURequestStepSubrate.tsx
index c9a878ef7279..21610e7dbf46 100644
--- a/src/pages/iou/request/step/IOURequestStepSubrate.tsx
+++ b/src/pages/iou/request/step/IOURequestStepSubrate.tsx
@@ -166,7 +166,6 @@ function IOURequestStepSubrate({
[CONST.IOU.TYPE.SEND]: translate('iou.paySomeone', {name: ''}),
[CONST.IOU.TYPE.PAY]: translate('iou.paySomeone', {name: ''}),
[CONST.IOU.TYPE.SPLIT]: translate('iou.createExpense'),
- [CONST.IOU.TYPE.SPLIT_EXPENSE]: translate('iou.createExpense'),
[CONST.IOU.TYPE.TRACK]: translate('iou.createExpense'),
[CONST.IOU.TYPE.INVOICE]: translate('workspace.invoices.sendInvoice'),
[CONST.IOU.TYPE.CREATE]: translate('iou.createExpense'),
diff --git a/src/pages/iou/request/step/IOURequestStepTag.tsx b/src/pages/iou/request/step/IOURequestStepTag.tsx
index 0d8bea5c7095..28ac706e8868 100644
--- a/src/pages/iou/request/step/IOURequestStepTag.tsx
+++ b/src/pages/iou/request/step/IOURequestStepTag.tsx
@@ -40,15 +40,15 @@ function IOURequestStepTag({
},
transaction,
}: IOURequestStepTagProps) {
- const [splitDraftTransaction] = useOnyx(`${ONYXKEYS.COLLECTION.SPLIT_TRANSACTION_DRAFT}${transactionID}`, {canBeMissing: true});
- const [policy] = useOnyx(`${ONYXKEYS.COLLECTION.POLICY}${report?.policyID}`, {canBeMissing: false});
- const [policyCategories] = useOnyx(`${ONYXKEYS.COLLECTION.POLICY_CATEGORIES}${report?.policyID}`, {canBeMissing: false});
- const [policyTags] = useOnyx(`${ONYXKEYS.COLLECTION.POLICY_TAGS}${report?.policyID}`, {canBeMissing: false});
+ const [splitDraftTransaction] = useOnyx(`${ONYXKEYS.COLLECTION.SPLIT_TRANSACTION_DRAFT}${transactionID}`);
+ const [policy] = useOnyx(`${ONYXKEYS.COLLECTION.POLICY}${report?.policyID}`);
+ const [policyCategories] = useOnyx(`${ONYXKEYS.COLLECTION.POLICY_CATEGORIES}${report?.policyID}`);
+ const [policyTags] = useOnyx(`${ONYXKEYS.COLLECTION.POLICY_TAGS}${report?.policyID}`);
let reportID: string | undefined;
if (action === CONST.IOU.ACTION.EDIT) {
reportID = iouType === CONST.IOU.TYPE.SPLIT ? report?.reportID : report?.parentReportID;
}
- const [reportActions] = useOnyx(`${ONYXKEYS.COLLECTION.REPORT_ACTIONS}${reportID}`, {canEvict: false, canBeMissing: true});
+ const [reportActions] = useOnyx(`${ONYXKEYS.COLLECTION.REPORT_ACTIONS}${reportID}`, {canEvict: false});
const session = useSession();
const styles = useThemeStyles();
const {currentSearchHash} = useSearchContext();
@@ -59,32 +59,19 @@ function IOURequestStepTag({
const isEditing = action === CONST.IOU.ACTION.EDIT;
const isSplitBill = iouType === CONST.IOU.TYPE.SPLIT;
- const isSplitExpense = iouType === CONST.IOU.TYPE.SPLIT_EXPENSE;
- const isEditingSplit = (isSplitBill || isSplitExpense) && isEditing;
- const currentTransaction = isEditingSplit && !isEmptyObject(splitDraftTransaction) ? splitDraftTransaction : transaction;
+ const isEditingSplitBill = isEditing && isSplitBill;
+ const currentTransaction = isEditingSplitBill && !isEmptyObject(splitDraftTransaction) ? splitDraftTransaction : transaction;
const transactionTag = getTag(currentTransaction);
const tag = getTag(currentTransaction, tagListIndex);
const reportAction = reportActions?.[report?.parentReportActionID ?? reportActionID] ?? null;
const canEditSplitBill = isSplitBill && reportAction && session?.accountID === reportAction.actorAccountID && areRequiredFieldsEmpty(transaction);
- const canEditSplitExpense = isSplitExpense && !!transaction;
const policyTagLists = useMemo(() => getTagLists(policyTags), [policyTags]);
const shouldShowTag = transactionTag || hasEnabledTags(policyTagLists);
// eslint-disable-next-line rulesdir/no-negated-variables
- let shouldShowNotFoundPage = false;
-
- if (!isReportInGroupPolicy(report)) {
- shouldShowNotFoundPage = true;
- } else if (isEditing) {
- if (isSplitBill) {
- shouldShowNotFoundPage = !canEditSplitBill;
- } else if (isSplitExpense) {
- shouldShowNotFoundPage = !canEditSplitExpense;
- } else {
- shouldShowNotFoundPage = !isMoneyRequestAction(reportAction) || !canEditMoneyRequest(reportAction);
- }
- }
+ const shouldShowNotFoundPage =
+ !isReportInGroupPolicy(report) || (isEditing && (isSplitBill ? !canEditSplitBill : !isMoneyRequestAction(reportAction) || !canEditMoneyRequest(reportAction)));
const navigateBack = () => {
Navigation.goBack(backTo);
@@ -94,7 +81,7 @@ function IOURequestStepTag({
const isSelectedTag = selectedTag.searchText === tag;
const searchText = selectedTag.searchText ?? '';
const updatedTag = insertTagIntoTransactionTagsString(transactionTag, isSelectedTag ? '' : searchText, tagListIndex);
- if (isEditingSplit) {
+ if (isEditingSplitBill) {
setDraftSplitTransaction(transactionID, {tag: updatedTag});
navigateBack();
return;
diff --git a/src/pages/iou/request/step/IOURequestStepTime.tsx b/src/pages/iou/request/step/IOURequestStepTime.tsx
index 4ec360a465e0..f8817c6ae8f2 100644
--- a/src/pages/iou/request/step/IOURequestStepTime.tsx
+++ b/src/pages/iou/request/step/IOURequestStepTime.tsx
@@ -44,9 +44,9 @@ function IOURequestStepTime({
report,
}: IOURequestStepTimeProps) {
const styles = useThemeStyles();
- const [policy] = useOnyx(`${ONYXKEYS.COLLECTION.POLICY}${getIOURequestPolicyID(transaction, report)}`, {canBeMissing: true});
- const [allPolicies] = useOnyx(ONYXKEYS.COLLECTION.POLICY, {canBeMissing: false});
- const [session] = useOnyx(ONYXKEYS.SESSION, {canBeMissing: false});
+ const [policy] = useOnyx(`${ONYXKEYS.COLLECTION.POLICY}${getIOURequestPolicyID(transaction, report)}`);
+ const [allPolicies] = useOnyx(ONYXKEYS.COLLECTION.POLICY);
+ const [session] = useOnyx(ONYXKEYS.SESSION);
const {translate} = useLocalize();
const currentDateAttributes = transaction?.comment?.customUnit?.attributes?.dates;
const currentStartDate = currentDateAttributes?.start ? DateUtils.extractDate(currentDateAttributes.start) : undefined;
@@ -115,7 +115,6 @@ function IOURequestStepTime({
[CONST.IOU.TYPE.SEND]: translate('iou.paySomeone', {name: ''}),
[CONST.IOU.TYPE.PAY]: translate('iou.paySomeone', {name: ''}),
[CONST.IOU.TYPE.SPLIT]: translate('iou.createExpense'),
- [CONST.IOU.TYPE.SPLIT_EXPENSE]: translate('iou.createExpense'),
[CONST.IOU.TYPE.TRACK]: translate('iou.createExpense'),
[CONST.IOU.TYPE.INVOICE]: translate('workspace.invoices.sendInvoice'),
[CONST.IOU.TYPE.CREATE]: translate('iou.createExpense'),
diff --git a/src/pages/iou/request/step/withFullTransactionOrNotFound.tsx b/src/pages/iou/request/step/withFullTransactionOrNotFound.tsx
index 9054c4f5ea10..81ae9371f5a2 100644
--- a/src/pages/iou/request/step/withFullTransactionOrNotFound.tsx
+++ b/src/pages/iou/request/step/withFullTransactionOrNotFound.tsx
@@ -59,18 +59,12 @@ export default function
diff --git a/src/styles/index.ts b/src/styles/index.ts
index 65acf2470d25..546276a20006 100644
--- a/src/styles/index.ts
+++ b/src/styles/index.ts
@@ -5372,14 +5372,6 @@ const styles = (theme: ThemeColors) =>
backgroundColor: colors.green700,
},
- splitItemBottomContent: {
- flexDirection: 'row',
- alignItems: 'center',
- marginTop: 12,
- justifyContent: 'space-between',
- minHeight: 16,
- },
-
volumeSliderOverlay: {
width: 4,
height: 60,
diff --git a/src/types/onyx/IOU.ts b/src/types/onyx/IOU.ts
index 7fabb7e20b11..9d4d960ab6b3 100644
--- a/src/types/onyx/IOU.ts
+++ b/src/types/onyx/IOU.ts
@@ -124,27 +124,6 @@ type Split = {
taxAmount?: number;
};
-/** Model for one portion of a shared expense */
-type SplitExpense = {
- /** Unique identifier of this split expense */
- transactionID: string;
-
- /** Amount allocated to this split */
- amount: number;
-
- /** Description of this split */
- description?: string;
-
- /** Category assigned to this split */
- category?: string;
-
- /** Tags associated with this split */
- tags?: string[];
-
- /** Timestamp when this split was created */
- created: string;
-};
-
/** Model of IOU request */
type IOU = {
/** ID of the IOU request */
@@ -233,4 +212,4 @@ type Accountant = {
};
export default IOU;
-export type {Participant, Split, Attendee, Accountant, SplitExpense};
+export type {Participant, Split, Attendee, Accountant};
diff --git a/src/types/onyx/Transaction.ts b/src/types/onyx/Transaction.ts
index f27c0775f3e9..75983b0ef1fa 100644
--- a/src/types/onyx/Transaction.ts
+++ b/src/types/onyx/Transaction.ts
@@ -3,7 +3,7 @@ import type {CreateTrackExpenseParams, IOURequestType, ReplaceReceipt, RequestMo
import type CONST from '@src/CONST';
import type ONYXKEYS from '@src/ONYXKEYS';
import type CollectionDataSet from '@src/types/utils/CollectionDataSet';
-import type {Accountant, Attendee, Participant, Split, SplitExpense} from './IOU';
+import type {Accountant, Attendee, Participant, Split} from './IOU';
import type * as OnyxCommon from './OnyxCommon';
import type {Unit} from './Policy';
import type RecentWaypoint from './RecentWaypoint';
@@ -84,9 +84,6 @@ type Comment = {
/** In split transactions this is a collection of participant split data */
splits?: Split[];
- /** Collection of split expenses */
- splitExpenses?: SplitExpense[];
-
/** Violations that were dismissed */
dismissedViolations?: Partial>>;
diff --git a/tests/actions/IOUTest.ts b/tests/actions/IOUTest.ts
index 6ba4aa411f96..e229c98e1ebf 100644
--- a/tests/actions/IOUTest.ts
+++ b/tests/actions/IOUTest.ts
@@ -5,7 +5,6 @@ import type {OnyxCollection, OnyxEntry, OnyxInputValue} from 'react-native-onyx'
import Onyx from 'react-native-onyx';
import useReportWithTransactionsAndViolations from '@hooks/useReportWithTransactionsAndViolations';
import {
- addSplitExpenseField,
calculateDiffAmount,
canApproveIOU,
canCancelPayment,
@@ -15,7 +14,6 @@ import {
createDistanceRequest,
deleteMoneyRequest,
initMoneyRequest,
- initSplitExpense,
payMoneyRequest,
putOnHold,
replaceReceipt,
@@ -30,7 +28,6 @@ import {
unholdRequest,
updateMoneyRequestAmountAndCurrency,
updateMoneyRequestCategory,
- updateSplitExpenseAmountField,
} from '@libs/actions/IOU';
import {createWorkspace, deleteWorkspace, generatePolicyID, setWorkspaceApprovalMode} from '@libs/actions/Policy/Policy';
import {addComment, deleteReport, notifyNewAction, openReport} from '@libs/actions/Report';
@@ -95,8 +92,6 @@ jest.mock('@src/libs/Navigation/Navigation', () => ({
removeScreenByKey: jest.fn(),
isNavigationReady: jest.fn(() => Promise.resolve()),
getReportRouteByID: jest.fn(),
- getActiveRouteWithoutParams: jest.fn(),
- getActiveRoute: jest.fn(),
}));
jest.mock('@src/libs/Navigation/navigationRef', () => ({
@@ -5857,164 +5852,6 @@ describe('actions/IOU', () => {
});
});
- describe('initSplitExpense', () => {
- it('should initialize split expense with correct transaction details', async () => {
- const transaction: Transaction = {
- transactionID: '123',
- amount: 100,
- currency: 'USD',
- merchant: 'Test Merchant',
- comment: {
- comment: 'Test comment',
- splitExpenses: [],
- attendees: [],
- type: CONST.TRANSACTION.TYPE.CUSTOM_UNIT,
- },
- category: 'Food',
- tag: 'lunch',
- created: DateUtils.getDBTime(),
- reportID: '456',
- };
-
- const reportID = '456';
-
- initSplitExpense(transaction, reportID);
- await waitForBatchedUpdates();
-
- const draftTransaction = await getOnyxValue(`${ONYXKEYS.COLLECTION.SPLIT_TRANSACTION_DRAFT}${transaction.transactionID}`);
-
- expect(draftTransaction).toBeTruthy();
-
- const splitExpenses = draftTransaction?.comment?.splitExpenses;
- expect(splitExpenses).toHaveLength(2);
- expect(draftTransaction?.amount).toBe(100);
- expect(draftTransaction?.currency).toBe('USD');
- expect(draftTransaction?.merchant).toBe('Test Merchant');
- expect(draftTransaction?.reportID).toBe(reportID);
-
- expect(splitExpenses?.[0].amount).toBe(50);
- expect(splitExpenses?.[0].description).toBe('Test comment');
- expect(splitExpenses?.[0].category).toBe('Food');
- expect(splitExpenses?.[0].tags).toEqual(['lunch']);
-
- expect(splitExpenses?.[1].amount).toBe(50);
- expect(splitExpenses?.[1].description).toBe('Test comment');
- expect(splitExpenses?.[1].category).toBe('Food');
- expect(splitExpenses?.[1].tags).toEqual(['lunch']);
- });
- it('should not initialize split expense for null transaction', async () => {
- const transaction: Transaction | undefined = undefined;
- const reportID = '456';
-
- initSplitExpense(transaction, reportID);
- await waitForBatchedUpdates();
-
- expect(transaction).toBeFalsy();
- });
- });
-
- describe('addSplitExpenseField', () => {
- it('should add new split expense field to draft transaction', async () => {
- const transaction: Transaction = {
- transactionID: '123',
- amount: 100,
- currency: 'USD',
- merchant: 'Test Merchant',
- comment: {
- comment: 'Test comment',
- splitExpenses: [],
- attendees: [],
- type: CONST.TRANSACTION.TYPE.CUSTOM_UNIT,
- },
- category: 'Food',
- tag: 'lunch',
- created: DateUtils.getDBTime(),
- reportID: '456',
- };
-
- const draftTransaction: Transaction = {
- transactionID: '123',
- amount: 100,
- currency: 'USD',
- merchant: 'Test Merchant',
- comment: {
- comment: 'Test comment',
- splitExpenses: [
- {
- transactionID: '789',
- amount: 50,
- description: 'Test comment',
- category: 'Food',
- tags: ['lunch'],
- created: DateUtils.getDBTime(),
- },
- ],
- attendees: [],
- type: CONST.TRANSACTION.TYPE.CUSTOM_UNIT,
- },
- category: 'Food',
- tag: 'lunch',
- created: DateUtils.getDBTime(),
- reportID: '456',
- };
-
- addSplitExpenseField(transaction, draftTransaction);
- await waitForBatchedUpdates();
-
- const updatedDraftTransaction = await getOnyxValue(`${ONYXKEYS.COLLECTION.SPLIT_TRANSACTION_DRAFT}${transaction.transactionID}`);
- expect(updatedDraftTransaction).toBeTruthy();
-
- const splitExpenses = updatedDraftTransaction?.comment?.splitExpenses;
- expect(splitExpenses).toHaveLength(2);
- expect(splitExpenses?.[1].amount).toBe(0);
- expect(splitExpenses?.[1].description).toBe('Test comment');
- expect(splitExpenses?.[1].category).toBe('Food');
- expect(splitExpenses?.[1].tags).toEqual(['lunch']);
- });
- });
-
- describe('updateSplitExpenseAmountField', () => {
- it('should update amount expense field to draft transaction', async () => {
- const originalTransactionID = '123';
- const currentTransactionID = '789';
- const draftTransaction: Transaction = {
- transactionID: '234',
- amount: 100,
- currency: 'USD',
- merchant: 'Test Merchant',
- comment: {
- comment: 'Test comment',
- originalTransactionID,
- splitExpenses: [
- {
- transactionID: currentTransactionID,
- amount: 50,
- description: 'Test comment',
- category: 'Food',
- tags: ['lunch'],
- created: DateUtils.getDBTime(),
- },
- ],
- attendees: [],
- type: CONST.TRANSACTION.TYPE.CUSTOM_UNIT,
- },
- category: 'Food',
- tag: 'lunch',
- created: DateUtils.getDBTime(),
- reportID: '456',
- };
-
- updateSplitExpenseAmountField(draftTransaction, currentTransactionID, 20);
- await waitForBatchedUpdates();
-
- const updatedDraftTransaction = await getOnyxValue(`${ONYXKEYS.COLLECTION.SPLIT_TRANSACTION_DRAFT}${originalTransactionID}`);
- expect(updatedDraftTransaction).toBeTruthy();
-
- const splitExpenses = updatedDraftTransaction?.comment?.splitExpenses;
- expect(splitExpenses?.[0].amount).toBe(20);
- });
- });
-
describe('replaceReceipt', () => {
it('should replace the receipt of the transaction', async () => {
const transactionID = '123';
diff --git a/tests/unit/ReportSecondaryActionUtilsTest.ts b/tests/unit/ReportSecondaryActionUtilsTest.ts
index 027958abeaa2..73c183f4daa8 100644
--- a/tests/unit/ReportSecondaryActionUtilsTest.ts
+++ b/tests/unit/ReportSecondaryActionUtilsTest.ts
@@ -898,10 +898,9 @@ describe('getSecondaryTransactionThreadActions', () => {
it('should always return VIEW_DETAILS', () => {
const report = {} as unknown as Report;
- const policy = {} as unknown as Policy;
const result = [CONST.REPORT.TRANSACTION_SECONDARY_ACTIONS.VIEW_DETAILS];
- expect(getSecondaryTransactionThreadActions(report, {} as Transaction, [], policy)).toEqual(result);
+ expect(getSecondaryTransactionThreadActions(report, {} as Transaction, [])).toEqual(result);
});
it('include HOLD option ', () => {
@@ -917,10 +916,8 @@ describe('getSecondaryTransactionThreadActions', () => {
comment: {},
} as unknown as Transaction;
- const policy = {} as unknown as Policy;
-
jest.spyOn(ReportUtils, 'canHoldUnholdReportAction').mockReturnValueOnce({canHoldRequest: true, canUnholdRequest: true});
- const result = getSecondaryTransactionThreadActions(report, transaction, [actionR14932], policy);
+ const result = getSecondaryTransactionThreadActions(report, transaction, [actionR14932]);
expect(result.includes(CONST.REPORT.SECONDARY_ACTIONS.HOLD)).toBe(true);
});
@@ -933,11 +930,9 @@ describe('getSecondaryTransactionThreadActions', () => {
stateNum: CONST.REPORT.STATE_NUM.OPEN,
} as unknown as Report;
- const policy = {} as unknown as Policy;
-
await Onyx.merge(`${ONYXKEYS.COLLECTION.REPORT}${REPORT_ID}`, report);
- const result = getSecondaryTransactionThreadActions(report, {} as Transaction, [], policy);
+ const result = getSecondaryTransactionThreadActions(report, {} as Transaction, []);
expect(result.includes(CONST.REPORT.SECONDARY_ACTIONS.DELETE)).toBe(true);
});
});