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

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
13 changes: 6 additions & 7 deletions src/libs/actions/IOU/SplitTransactionUpdate.ts
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,6 @@ import Parser from '@libs/Parser';
import {getLoginByAccountID} from '@libs/PersonalDetailsUtils';
import {getDistanceRateCustomUnitRate} from '@libs/PolicyUtils';
import {
getAllReportActions,
getIOUActionForReportID,
getIOUActionForTransactionID,
getLastVisibleAction,
Expand Down Expand Up @@ -300,11 +299,11 @@ function updateSplitTransactions({
if (isReverseSplitOperation) {
const revertSplitTransactionID = splitExpenses.at(0)?.transactionID;
const revertSplitTransaction = allTransactionsList?.[`${ONYXKEYS.COLLECTION.TRANSACTION}${revertSplitTransactionID}`];
const revertSplitReportActions = getAllReportActions(revertSplitTransaction?.reportID);
const revertSplitReportActions = allReportActionsList?.[`${ONYXKEYS.COLLECTION.REPORT_ACTIONS}${revertSplitTransaction?.reportID}`] ?? {};
splitThreadReportAction = revertSplitTransactionID ? getIOUActionForTransactionID(Object.values(revertSplitReportActions ?? {}), revertSplitTransactionID) : undefined;
splitTransactionThreadReportID = splitThreadReportAction?.childReportID;
if (splitTransactionThreadReportID) {
const splitTransactionThreadActions = getAllReportActions(splitTransactionThreadReportID);
const splitTransactionThreadActions = allReportActionsList?.[`${ONYXKEYS.COLLECTION.REPORT_ACTIONS}${splitTransactionThreadReportID}`] ?? {};
splitThreadComments = Object.values(splitTransactionThreadActions).filter(
(action): action is OnyxTypes.ReportAction =>
isActionOfType(action, CONST.REPORT.ACTIONS.TYPE.ADD_COMMENT) && !isDeletedAction(action) && (action.actorAccountID ?? CONST.DEFAULT_NUMBER_ID) > 0,
Expand Down Expand Up @@ -390,7 +389,7 @@ function updateSplitTransactions({
expenseReport?.reportID,
allReportActionsList?.[`${ONYXKEYS.COLLECTION.REPORT_ACTIONS}${expenseReport?.chatReportID}`],
);
const transactionReportActions = getAllReportActions(firstIOU?.childReportID);
const transactionReportActions = allReportActionsList?.[`${ONYXKEYS.COLLECTION.REPORT_ACTIONS}${firstIOU?.childReportID}`] ?? {};
const expenseReportNameValuePairs = allReportNameValuePairsList?.[`${ONYXKEYS.COLLECTION.REPORT_NAME_VALUE_PAIRS}${expenseReport?.reportID}`];
const isArchivedExpenseReport = isArchivedReport(expenseReportNameValuePairs);
const canUserPerformWriteAction = chatReport ? !!canUserPerformWriteActionReportUtils(chatReport, isArchivedExpenseReport) : true;
Expand Down Expand Up @@ -598,7 +597,7 @@ function updateSplitTransactions({
reportActionsReportID = splitTransaction?.reportID;
}

const splitReportActions = getAllReportActions(reportActionsReportID);
const splitReportActions = allReportActionsList?.[`${ONYXKEYS.COLLECTION.REPORT_ACTIONS}${reportActionsReportID}`] ?? {};
const currentReportAction = Object.values(splitReportActions).find((action) => {
const transactionID = isMoneyRequestAction(action) ? (getOriginalMessage(action)?.IOUTransactionID ?? CONST.DEFAULT_NUMBER_ID) : CONST.DEFAULT_NUMBER_ID;
return transactionID === existingTransactionID;
Expand Down Expand Up @@ -1148,7 +1147,7 @@ function updateSplitTransactions({
if (isReverseSplitOperation && transactionThreadReportID) {
const remainingTransaction = allTransactionsList?.[`${ONYXKEYS.COLLECTION.TRANSACTION}${splitExpense.transactionID}`];
const remainTransactionThreadReportAction = getIOUActionForReportID(splitExpense.reportID, splitExpense.transactionID);
const allReportActions = getAllReportActions(remainTransactionThreadReportAction?.childReportID);
const allReportActions = allReportActionsList?.[`${ONYXKEYS.COLLECTION.REPORT_ACTIONS}${remainTransactionThreadReportAction?.childReportID}`] ?? {};
const isRemainingTransactionOnHold = isOnHold(remainingTransaction);
const remainingHoldReportAction = getReportAction(remainTransactionThreadReportAction?.childReportID, `${remainingTransaction?.comment?.hold ?? ''}`);

Expand Down Expand Up @@ -1348,7 +1347,7 @@ function updateSplitTransactions({
const isSelfDMTransaction = splitTransaction?.reportID === CONST.REPORT.UNREPORTED_REPORT_ID;
const selfDMReportIDForLookup = originalSelfDMReportID ?? selfDMReport?.reportID;
const reportActionsReportID = isSelfDMTransaction ? selfDMReportIDForLookup : splitTransaction?.reportID;
const splitReportActions = getAllReportActions(reportActionsReportID);
const splitReportActions = allReportActionsList?.[`${ONYXKEYS.COLLECTION.REPORT_ACTIONS}${reportActionsReportID}`] ?? {};
const reportNameValuePairs = allReportNameValuePairsList?.[`${ONYXKEYS.COLLECTION.REPORT_NAME_VALUE_PAIRS}${splitTransaction?.reportID}`];
const splitReportID = isSelfDMTransaction ? (selfDMReportIDForLookup ?? String(CONST.DEFAULT_NUMBER_ID)) : (splitTransaction?.reportID ?? String(CONST.DEFAULT_NUMBER_ID));
const splitTransactionReport = allReportsList?.[`${ONYXKEYS.COLLECTION.REPORT}${splitReportID}`];
Expand Down
50 changes: 35 additions & 15 deletions tests/actions/IOUTest/SplitTest.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3756,6 +3756,7 @@ describe('updateSplitTransactionsFromSplitExpensesFlow', () => {
let allTransactions: OnyxCollection<Transaction>;
let allReports: OnyxCollection<Report>;
let allReportNameValuePairs: OnyxCollection<ReportNameValuePairs>;
let allReportActions: OnyxCollection<ReportActions>;
await getOnyxData({
key: ONYXKEYS.COLLECTION.TRANSACTION,
callback: (value) => {
Expand All @@ -3774,6 +3775,12 @@ describe('updateSplitTransactionsFromSplitExpensesFlow', () => {
allReportNameValuePairs = value;
},
});
await getOnyxData({
key: ONYXKEYS.COLLECTION.REPORT_ACTIONS,
callback: (value) => {
allReportActions = value;
},
});

const reportID = originalReportID ?? String(CONST.DEFAULT_NUMBER_ID);
const allPolicyTags = await getAllPolicyTags();
Expand All @@ -3784,7 +3791,7 @@ describe('updateSplitTransactionsFromSplitExpensesFlow', () => {
allTransactionsList: allTransactions,
betas: [CONST.BETAS.ALL],
allReportsList: allReports,
allReportActionsList: undefined,
allReportActionsList: allReportActions,
allReportNameValuePairsList: allReportNameValuePairs,
transactionData: {
reportID,
Expand Down Expand Up @@ -3830,8 +3837,8 @@ describe('updateSplitTransactionsFromSplitExpensesFlow', () => {
const splitTx1 = allTransactions?.[`${ONYXKEYS.COLLECTION.TRANSACTION}${splitTransactionID1}`];
await getOnyxData({
key: `${ONYXKEYS.COLLECTION.REPORT_ACTIONS}${splitTx1?.reportID}`,
callback: (allReportActions) => {
const iouAction = Object.values(allReportActions ?? {}).find(
callback: (reportActions) => {
const iouAction = Object.values(reportActions ?? {}).find(
(action): action is ReportAction<typeof CONST.REPORT.ACTIONS.TYPE.IOU> =>
isMoneyRequestAction(action) && getOriginalMessage(action)?.IOUTransactionID === splitTransactionID1,
);
Expand Down Expand Up @@ -3885,6 +3892,12 @@ describe('updateSplitTransactionsFromSplitExpensesFlow', () => {
allReportNameValuePairs = value;
},
});
await getOnyxData({
key: ONYXKEYS.COLLECTION.REPORT_ACTIONS,
callback: (value) => {
allReportActions = value;
},
});

reports = getTransactionAndExpenseReports(reportID);

Expand All @@ -3893,7 +3906,7 @@ describe('updateSplitTransactionsFromSplitExpensesFlow', () => {
allTransactionsList: allTransactions,
betas: [CONST.BETAS.ALL],
allReportsList: allReports,
allReportActionsList: undefined,
allReportActionsList: allReportActions,
allReportNameValuePairsList: allReportNameValuePairs,
transactionData: {
reportID,
Expand Down Expand Up @@ -3941,8 +3954,8 @@ describe('updateSplitTransactionsFromSplitExpensesFlow', () => {
let newIOUAction: ReportAction | undefined;
await getOnyxData({
key: `${ONYXKEYS.COLLECTION.REPORT_ACTIONS}${revertExpenseReportID}`,
callback: (allReportActions) => {
newIOUAction = Object.values(allReportActions ?? {}).findLast(
callback: (reportActions) => {
newIOUAction = Object.values(reportActions ?? {}).findLast(
(action): action is ReportAction<typeof CONST.REPORT.ACTIONS.TYPE.IOU> =>
isMoneyRequestAction(action) && getOriginalMessage(action)?.IOUTransactionID === originalTransactionID,
);
Expand Down Expand Up @@ -4947,6 +4960,7 @@ describe('updateSplitTransactionsFromSplitExpensesFlow', () => {
let allTransactions: OnyxCollection<Transaction>;
let allReports: OnyxCollection<Report>;
let allReportNameValuePairs: OnyxCollection<ReportNameValuePairs>;
let allReportActions: OnyxCollection<ReportActions>;

await getOnyxData({
key: ONYXKEYS.COLLECTION.TRANSACTION,
Expand All @@ -4966,6 +4980,12 @@ describe('updateSplitTransactionsFromSplitExpensesFlow', () => {
allReportNameValuePairs = value;
},
});
await getOnyxData({
key: ONYXKEYS.COLLECTION.REPORT_ACTIONS,
callback: (value) => {
allReportActions = value;
},
});

const reportID = draftTransaction?.reportID ?? String(CONST.DEFAULT_NUMBER_ID);
const allPolicyTags = await getAllPolicyTags();
Expand All @@ -4976,7 +4996,7 @@ describe('updateSplitTransactionsFromSplitExpensesFlow', () => {
getCurrencyDecimals: getCurrencyDecimalsLocal,
allTransactionsList: allTransactions,
allReportsList: allReports,
allReportActionsList: undefined,
allReportActionsList: allReportActions,
allReportNameValuePairsList: allReportNameValuePairs,
transactionData: {
reportID,
Expand Down Expand Up @@ -5609,7 +5629,7 @@ describe('updateSplitTransactions', () => {

const splitToN = async (numberOfSplitTransaction: number, expenseReport: OnyxEntry<Report>, originalTransactionID: string, firstIOU?: ReportAction) => {
const splitTransactionIDs = new Array(numberOfSplitTransaction).fill(true).map(() => rand64());
const {allTransactions, allReports, allReportNameValuePairs} = await getCollections();
const {allTransactions, allReports, allReportNameValuePairs, allReportActions} = await getCollections();
const reportID = expenseReport?.reportID ?? CONST.REPORT.UNREPORTED_REPORT_ID;
const allPolicyTags = await getAllPolicyTags();
const reports = getTransactionAndExpenseReports(reportID);
Expand All @@ -5618,7 +5638,7 @@ describe('updateSplitTransactions', () => {
getCurrencyDecimals: getCurrencyDecimalsLocal,
allTransactionsList: allTransactions,
allReportsList: allReports,
allReportActionsList: undefined,
allReportActionsList: allReportActions,
allReportNameValuePairsList: allReportNameValuePairs,
transactionData: {
reportID: expenseReport?.reportID ?? String(CONST.DEFAULT_NUMBER_ID),
Expand Down Expand Up @@ -5942,7 +5962,7 @@ describe('updateSplitTransactions', () => {
const writeSpy = jest.spyOn(APIlib, 'write').mockImplementation((...args) => originalWrite(...args));

const remainingSplitTransaction = await getOnyxValue(`${ONYXKEYS.COLLECTION.TRANSACTION}${splitTransactionID1}`);
const {allTransactions, allReports, allReportNameValuePairs} = await getCollections();
const {allTransactions, allReports, allReportNameValuePairs, allReportActions} = await getCollections();
const allPolicyTags = await getAllPolicyTags();
const reports = getTransactionAndExpenseReports(expenseReport.reportID);
const splitExpenses: SplitExpense[] = [{transactionID: splitTransactionID1, reportID: remainingSplitTransaction?.reportID, amount, created: DateUtils.getDBTime()}];
Expand All @@ -5951,7 +5971,7 @@ describe('updateSplitTransactions', () => {
getCurrencyDecimals: getCurrencyDecimalsLocal,
allTransactionsList: allTransactions,
allReportsList: allReports,
allReportActionsList: undefined,
allReportActionsList: allReportActions,
allReportNameValuePairsList: allReportNameValuePairs,
transactionData: {
reportID: expenseReport.reportID,
Expand Down Expand Up @@ -6056,7 +6076,7 @@ describe('updateSplitTransactions', () => {
await waitForBatchedUpdates();

const remainingSplitTransaction = await getOnyxValue(`${ONYXKEYS.COLLECTION.TRANSACTION}${splitTransactionID1}`);
const {allTransactions, allReports: allReports2, allReportNameValuePairs} = await getCollections();
const {allTransactions, allReports: allReports2, allReportNameValuePairs, allReportActions: allReportActions2} = await getCollections();
const allPolicyTags = await getAllPolicyTags();
const reports = getTransactionAndExpenseReports(expenseReport.reportID);
const splitExpenses: SplitExpense[] = [{transactionID: splitTransactionID1, reportID: remainingSplitTransaction?.reportID, amount, created: DateUtils.getDBTime()}];
Expand All @@ -6065,7 +6085,7 @@ describe('updateSplitTransactions', () => {
getCurrencyDecimals: getCurrencyDecimalsLocal,
allTransactionsList: allTransactions,
allReportsList: allReports2,
allReportActionsList: undefined,
allReportActionsList: allReportActions2,
allReportNameValuePairsList: allReportNameValuePairs,
transactionData: {
reportID: expenseReport.reportID,
Expand Down Expand Up @@ -6132,15 +6152,15 @@ describe('updateSplitTransactions', () => {

// Split the original transaction into three parts, then delete one without reverting.
const {splitTransactionID1, splitTransactionID2} = await splitToThree(expenseReport, originalTransactionID, iouAction);
const {allTransactions, allReports, allReportNameValuePairs} = await getCollections();
const {allTransactions, allReports, allReportNameValuePairs, allReportActions: allReportActions2} = await getCollections();
const allPolicyTags = await getAllPolicyTags();
const reports = getTransactionAndExpenseReports(expenseReport.reportID);

updateSplitTransactions({
getCurrencyDecimals: getCurrencyDecimalsLocal,
allTransactionsList: allTransactions,
allReportsList: allReports,
allReportActionsList: undefined,
allReportActionsList: allReportActions2,
allReportNameValuePairsList: allReportNameValuePairs,
transactionData: {
reportID: expenseReport.reportID,
Expand Down
9 changes: 8 additions & 1 deletion tests/actions/TransactionTest.ts
Original file line number Diff line number Diff line change
Expand Up @@ -1289,6 +1289,7 @@ describe('actions/Transaction', () => {
let allTransactions: OnyxCollection<Transaction>;
let allReports: OnyxCollection<Report>;
let allReportNameValuePairs: OnyxCollection<ReportNameValuePairs>;
let allReportActions: OnyxCollection<ReportActions>;

await getOnyxData({
key: ONYXKEYS.COLLECTION.TRANSACTION,
Expand All @@ -1308,6 +1309,12 @@ describe('actions/Transaction', () => {
allReportNameValuePairs = value;
},
});
await getOnyxData({
key: ONYXKEYS.COLLECTION.REPORT_ACTIONS,
callback: (value) => {
allReportActions = value;
},
});

const reportID = draftTransaction?.reportID ?? String(CONST.DEFAULT_NUMBER_ID);
const reports = getTransactionAndExpenseReports(reportID);
Expand All @@ -1316,7 +1323,7 @@ describe('actions/Transaction', () => {
updateSplitTransactionsFromSplitExpensesFlow({
allTransactionsList: allTransactions,
allReportsList: allReports,
allReportActionsList: undefined,
allReportActionsList: allReportActions,
allReportNameValuePairsList: allReportNameValuePairs,
transactionData: {
reportID,
Expand Down
Loading