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
8 changes: 6 additions & 2 deletions src/libs/ReportUtils.ts
Original file line number Diff line number Diff line change
Expand Up @@ -743,6 +743,7 @@ type BaseOptimisticMoneyRequestEntities = {
linkedTrackedExpenseReportAction?: ReportAction;
optimisticCreatedReportActionID?: string;
reportActionID?: string;
currentUserAccountID: number;
};

type OptimisticMoneyRequestEntities = BaseOptimisticMoneyRequestEntities & {shouldGenerateTransactionThreadReport?: boolean};
Expand Down Expand Up @@ -8760,10 +8761,11 @@ function buildOptimisticExportIntegrationAction(integration: ConnectionName, mar
function buildTransactionThread(
reportAction: OnyxEntry<ReportAction | OptimisticIOUReportAction>,
moneyRequestReport: OnyxEntry<Report>,
currentUserAccountID: number,
existingTransactionThreadReportID?: string,
optimisticTransactionThreadReportID?: string,
): OptimisticChatReport {
const participantAccountIDs = [...new Set([deprecatedCurrentUserAccountID, Number(reportAction?.actorAccountID)])].filter(Boolean) as number[];
const participantAccountIDs = [...new Set([currentUserAccountID, Number(reportAction?.actorAccountID)])].filter(Boolean);
const existingTransactionThreadReport = getReportOrDraftReport(existingTransactionThreadReportID);

if (existingTransactionThreadReportID && existingTransactionThreadReport) {
Expand All @@ -8787,6 +8789,7 @@ function buildTransactionThread(
parentReportID: moneyRequestReport?.reportID,
optimisticReportID: optimisticTransactionThreadReportID,
chatReportID: moneyRequestReport?.reportID,
currentUserAccountID,
});
}

Expand Down Expand Up @@ -8824,6 +8827,7 @@ function buildOptimisticMoneyRequestEntities({
optimisticCreatedReportActionID,
shouldGenerateTransactionThreadReport = true,
reportActionID,
currentUserAccountID,
}: OptimisticMoneyRequestEntities): [
OptimisticCreatedReportAction,
OptimisticCreatedReportAction,
Expand Down Expand Up @@ -8856,7 +8860,7 @@ function buildOptimisticMoneyRequestEntities({
});

// Create optimistic transactionThread and the `CREATED` action for it, if existingTransactionThreadReportID is undefined
const transactionThread = shouldGenerateTransactionThreadReport ? buildTransactionThread(iouAction, iouReport, existingTransactionThreadReportID) : undefined;
const transactionThread = shouldGenerateTransactionThreadReport ? buildTransactionThread(iouAction, iouReport, currentUserAccountID, existingTransactionThreadReportID) : undefined;
const createdActionForTransactionThread = !!existingTransactionThreadReportID || !shouldGenerateTransactionThreadReport ? null : buildOptimisticCreatedReportAction(payeeEmail);

// The IOU action and the transactionThread are co-dependent as parent-child, so we need to link them together
Expand Down
2 changes: 1 addition & 1 deletion src/libs/actions/IOU/Duplicate.ts
Original file line number Diff line number Diff line change
Expand Up @@ -278,7 +278,7 @@ function mergeDuplicates({transactionThreadReportID: optimisticTransactionThread
if (optimisticTransactionThreadReportID) {
const iouAction = getIOUActionForReportID(params.reportID, params.transactionID);
const optimisticCreatedAction = buildOptimisticCreatedReportAction(currentUserLogin);
const optimisticTransactionThreadReport = buildTransactionThread(iouAction, expenseReport, undefined, optimisticTransactionThreadReportID);
const optimisticTransactionThreadReport = buildTransactionThread(iouAction, expenseReport, currentUserAccountID, undefined, optimisticTransactionThreadReportID);

allParams.transactionThreadReportID = optimisticTransactionThreadReportID;
allParams.createdReportActionIDForThread = optimisticCreatedAction?.reportActionID;
Expand Down
2 changes: 1 addition & 1 deletion src/libs/actions/IOU/Hold.ts
Original file line number Diff line number Diff line change
Expand Up @@ -71,7 +71,7 @@ function putOnHold(
transactionThreadReport = allReports?.[`${ONYXKEYS.COLLECTION.REPORT}${initialReportID}`] ?? ({} as OnyxTypes.Report);
} else {
const moneyRequestReport = getReportOrDraftReport(transaction?.reportID);
transactionThreadReport = buildTransactionThread(iouAction, moneyRequestReport, undefined, reportID);
transactionThreadReport = buildTransactionThread(iouAction, moneyRequestReport, currentUserAccountID, undefined, reportID);
}

const optimisticCreatedAction = buildOptimisticCreatedReportAction(currentUserLogin);
Expand Down
2 changes: 2 additions & 0 deletions src/libs/actions/IOU/PerDiem.ts
Original file line number Diff line number Diff line change
Expand Up @@ -448,6 +448,7 @@ function getPerDiemExpenseInformation(perDiemExpenseInformation: PerDiemExpenseI
payeeEmail,
participants: [participant],
transactionID: optimisticTransaction.transactionID,
currentUserAccountID: currentUserAccountIDParam,
});

let reportPreviewAction = shouldCreateNewMoneyRequestReport ? null : getReportPreviewAction(chatReport.reportID, iouReport.reportID);
Expand Down Expand Up @@ -728,6 +729,7 @@ function getPerDiemExpenseInformationForSelfDM(perDiemExpenseInformation: PerDie
participants: [participant],
transactionID: optimisticTransaction.transactionID,
isPersonalTrackingExpense: true,
currentUserAccountID: currentUserAccountIDParam,
});

onyxData.optimisticData?.push(
Expand Down
2 changes: 2 additions & 0 deletions src/libs/actions/IOU/RejectMoneyRequest.ts
Original file line number Diff line number Diff line change
Expand Up @@ -372,6 +372,7 @@ function prepareRejectMoneyRequestData(
transactionID: transaction.transactionID,
existingTransactionThreadReportID: childReportID,
shouldGenerateTransactionThreadReport: false,
currentUserAccountID: currentUserAccountIDParam,
});
createdIOUReportActionID = iouAction.reportActionID;

Expand Down Expand Up @@ -463,6 +464,7 @@ function prepareRejectMoneyRequestData(
transactionID: transaction.transactionID,
existingTransactionThreadReportID: childReportID,
shouldGenerateTransactionThreadReport: false,
currentUserAccountID: currentUserAccountIDParam,
});

reportPreviewAction = buildOptimisticReportPreview(policyExpenseChat, newExpenseReport, undefined, transaction, undefined);
Expand Down
1 change: 1 addition & 0 deletions src/libs/actions/IOU/SendInvoice.ts
Original file line number Diff line number Diff line change
Expand Up @@ -683,6 +683,7 @@ function getSendInvoiceInformation({
payeeEmail: receiver.login ?? '',
participants: [receiver],
transactionID: optimisticTransaction.transactionID,
currentUserAccountID,
});

// STEP 6: Build Onyx Data
Expand Down
1 change: 1 addition & 0 deletions src/libs/actions/IOU/SendMoney.ts
Original file line number Diff line number Diff line change
Expand Up @@ -143,6 +143,7 @@ function getSendMoneyParams({
transactionID: optimisticTransaction.transactionID,
paymentType: paymentMethodType,
isSendMoneyFlow: true,
currentUserAccountID,
});

const reportPreviewAction = buildOptimisticReportPreview(chatReport, optimisticIOUReport);
Expand Down
2 changes: 2 additions & 0 deletions src/libs/actions/IOU/Split.ts
Original file line number Diff line number Diff line change
Expand Up @@ -1049,6 +1049,7 @@ function completeSplitBill(
payeeEmail: currentUserEmailForIOUSplit,
participants: [participant],
transactionID: oneOnOneTransaction.transactionID,
currentUserAccountID: sessionAccountID,
});

let oneOnOneReportPreviewAction = getReportPreviewAction(oneOnOneChatReport?.reportID, oneOnOneIOUReport?.reportID);
Expand Down Expand Up @@ -3014,6 +3015,7 @@ function createSplitsAndOnyxData({
payeeEmail: currentUserEmailForIOUSplit,
participants: [participant],
transactionID: oneOnOneTransaction.transactionID,
currentUserAccountID,
});

// Add optimistic personal details for new participants
Expand Down
1 change: 1 addition & 0 deletions src/libs/actions/IOU/TrackExpense.ts
Original file line number Diff line number Diff line change
Expand Up @@ -1101,6 +1101,7 @@ function getTrackExpenseInformation(params: GetTrackExpenseInformationParams): T
isPersonalTrackingExpense: !shouldUseMoneyReport,
existingTransactionThreadReportID: linkedTrackedExpenseReportAction?.childReportID,
linkedTrackedExpenseReportAction,
currentUserAccountID: currentUserAccountIDParam,
});

let reportPreviewAction: OnyxInputValue<OnyxTypes.ReportAction<typeof CONST.REPORT.ACTIONS.TYPE.REPORT_PREVIEW>> = null;
Expand Down
1 change: 1 addition & 0 deletions src/libs/actions/IOU/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2194,6 +2194,7 @@ function getMoneyRequestInformation(moneyRequestInformation: MoneyRequestInforma
linkedTrackedExpenseReportAction,
shouldGenerateTransactionThreadReport,
reportActionID: currentReportActionID,
currentUserAccountID: currentUserAccountIDParam,
});

let reportPreviewAction = shouldCreateNewMoneyRequestReport ? null : getReportPreviewAction(chatReport.reportID, iouReport.reportID);
Expand Down
2 changes: 1 addition & 1 deletion src/libs/actions/Report/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -1965,7 +1965,7 @@ function createTransactionThreadReport(
}

const optimisticTransactionThreadReportID = generateReportID();
const optimisticTransactionThread = buildTransactionThread(iouReportAction, reportToUse, undefined, optimisticTransactionThreadReportID);
const optimisticTransactionThread = buildTransactionThread(iouReportAction, reportToUse, currentUserAccountID, undefined, optimisticTransactionThreadReportID);
const shouldAddPendingFields = transaction?.pendingAction === CONST.RED_BRICK_ROAD_PENDING_ACTION.ADD || iouReportAction?.pendingAction === CONST.RED_BRICK_ROAD_PENDING_ACTION.ADD;
const participantAccountIDsForDetails = [currentUserAccountID];
if (iouReportAction?.actorAccountID && iouReportAction.actorAccountID !== currentUserAccountID) {
Expand Down
2 changes: 1 addition & 1 deletion src/libs/actions/Transaction.ts
Original file line number Diff line number Diff line change
Expand Up @@ -1357,7 +1357,7 @@ function changeTransactionsReport({
let transactionThreadReportID = newIOUAction.childReportID;
let transactionThreadCreatedReportActionID;
if (!transactionThreadReportID) {
const optimisticTransactionThread = buildTransactionThread(newIOUAction, reportID === CONST.REPORT.UNREPORTED_REPORT_ID ? undefined : newReport);
const optimisticTransactionThread = buildTransactionThread(newIOUAction, reportID === CONST.REPORT.UNREPORTED_REPORT_ID ? undefined : newReport, accountID);
const optimisticCreatedActionForTransactionThread = buildOptimisticCreatedReportAction(email ?? '');
transactionThreadReportID = optimisticTransactionThread.reportID;
transactionThreadCreatedReportActionID = optimisticCreatedActionForTransactionThread.reportActionID;
Expand Down
12 changes: 6 additions & 6 deletions tests/actions/IOUTest/DeleteMoneyRequestTest.ts
Original file line number Diff line number Diff line change
Expand Up @@ -503,7 +503,7 @@ describe('actions/IOU/DeleteMoneyRequest', () => {
jest.advanceTimersByTime(10);

// Given a transaction thread
thread = buildTransactionThread(createIOUAction, iouReport);
thread = buildTransactionThread(createIOUAction, iouReport, TEST_USER_ACCOUNT_ID);

expect(thread.participants).toStrictEqual({[CARLOS_ACCOUNT_ID]: {notificationPreference: CONST.REPORT.NOTIFICATION_PREFERENCE.HIDDEN, role: CONST.REPORT.ROLE.ADMIN}});

Expand Down Expand Up @@ -611,7 +611,7 @@ describe('actions/IOU/DeleteMoneyRequest', () => {
jest.advanceTimersByTime(10);

// Given a transaction thread
thread = buildTransactionThread(createIOUAction, iouReport);
thread = buildTransactionThread(createIOUAction, iouReport, TEST_USER_ACCOUNT_ID);

Onyx.connect({
key: `${ONYXKEYS.COLLECTION.REPORT_ACTIONS}${thread.reportID}`,
Expand Down Expand Up @@ -750,7 +750,7 @@ describe('actions/IOU/DeleteMoneyRequest', () => {
await waitForBatchedUpdates();

// Given a transaction thread
thread = buildTransactionThread(createIOUAction, iouReport);
thread = buildTransactionThread(createIOUAction, iouReport, TEST_USER_ACCOUNT_ID);

expect(thread.participants).toEqual({[CARLOS_ACCOUNT_ID]: {notificationPreference: CONST.REPORT.NOTIFICATION_PREFERENCE.HIDDEN, role: CONST.REPORT.ROLE.ADMIN}});

Expand Down Expand Up @@ -889,7 +889,7 @@ describe('actions/IOU/DeleteMoneyRequest', () => {
// Given a thread report

jest.advanceTimersByTime(10);
thread = buildTransactionThread(createIOUAction, iouReport);
thread = buildTransactionThread(createIOUAction, iouReport, TEST_USER_ACCOUNT_ID);

expect(thread.participants).toStrictEqual({[CARLOS_ACCOUNT_ID]: {notificationPreference: CONST.REPORT.NOTIFICATION_PREFERENCE.HIDDEN, role: CONST.REPORT.ROLE.ADMIN}});

Expand Down Expand Up @@ -1211,7 +1211,7 @@ describe('actions/IOU/DeleteMoneyRequest', () => {

// Given a thread report
jest.advanceTimersByTime(10);
thread = buildTransactionThread(createIOUAction, iouReport);
thread = buildTransactionThread(createIOUAction, iouReport, TEST_USER_ACCOUNT_ID);

expect(thread.participants).toStrictEqual({[CARLOS_ACCOUNT_ID]: {notificationPreference: CONST.REPORT.NOTIFICATION_PREFERENCE.HIDDEN, role: CONST.REPORT.ROLE.ADMIN}});

Expand Down Expand Up @@ -1391,7 +1391,7 @@ describe('actions/IOU/DeleteMoneyRequest', () => {
await waitForBatchedUpdates();

// Given a transaction thread
thread = buildTransactionThread(createIOUAction, iouReport);
thread = buildTransactionThread(createIOUAction, iouReport, TEST_USER_ACCOUNT_ID);

expect(thread.participants).toEqual({[CARLOS_ACCOUNT_ID]: {notificationPreference: CONST.REPORT.NOTIFICATION_PREFERENCE.HIDDEN, role: CONST.REPORT.ROLE.ADMIN}});

Expand Down
4 changes: 2 additions & 2 deletions tests/actions/IOUTest/DuplicateTest.ts
Original file line number Diff line number Diff line change
Expand Up @@ -411,8 +411,8 @@ describe('actions/Duplicate', () => {
});
await waitForBatchedUpdates();

const transactionThreadReport1 = buildTransactionThread(iouAction1, expenseReport);
const transactionThreadReport2 = buildTransactionThread(iouAction2, expenseReport);
const transactionThreadReport1 = buildTransactionThread(iouAction1, expenseReport, RORY_ACCOUNT_ID);
const transactionThreadReport2 = buildTransactionThread(iouAction2, expenseReport, RORY_ACCOUNT_ID);

expect(transactionThreadReport1.participants).toEqual({
[RORY_ACCOUNT_ID]: {notificationPreference: CONST.REPORT.NOTIFICATION_PREFERENCE.HIDDEN, role: CONST.REPORT.ROLE.ADMIN},
Expand Down
16 changes: 8 additions & 8 deletions tests/actions/IOUTest/HoldTest.ts
Original file line number Diff line number Diff line change
Expand Up @@ -113,7 +113,7 @@ describe('actions/IOU/Hold', () => {
participants: [],
transactionID: transaction.transactionID,
});
const transactionThread = buildTransactionThread(iouAction, iouReport);
const transactionThread = buildTransactionThread(iouAction, iouReport, RORY_ACCOUNT_ID);

const actions: OnyxInputValue<ReportActions> = {[`${ONYXKEYS.COLLECTION.REPORT_ACTIONS}${iouAction.reportActionID}`]: iouAction};
const reportCollectionDataSet: ReportCollectionDataSet = {
Expand Down Expand Up @@ -242,8 +242,8 @@ describe('actions/IOU/Hold', () => {
participants: [],
transactionID: transaction2.transactionID,
});
const transactionThread1 = buildTransactionThread(iouAction1, iouReport);
const transactionThread2 = buildTransactionThread(iouAction2, iouReport);
const transactionThread1 = buildTransactionThread(iouAction1, iouReport, RORY_ACCOUNT_ID);
const transactionThread2 = buildTransactionThread(iouAction2, iouReport, RORY_ACCOUNT_ID);

const transactionCollectionDataSet: TransactionCollectionDataSet = {
[`${ONYXKEYS.COLLECTION.TRANSACTION}${transaction1.transactionID}`]: transaction1,
Expand Down Expand Up @@ -333,8 +333,8 @@ describe('actions/IOU/Hold', () => {
participants: [],
transactionID: transaction2.transactionID,
});
const transactionThread1 = buildTransactionThread(iouAction1, iouReport);
const transactionThread2 = buildTransactionThread(iouAction2, iouReport);
const transactionThread1 = buildTransactionThread(iouAction1, iouReport, RORY_ACCOUNT_ID);
const transactionThread2 = buildTransactionThread(iouAction2, iouReport, RORY_ACCOUNT_ID);

const transactionCollectionDataSet: TransactionCollectionDataSet = {
[`${ONYXKEYS.COLLECTION.TRANSACTION}${transaction1.transactionID}`]: transaction1,
Expand Down Expand Up @@ -387,7 +387,7 @@ describe('actions/IOU/Hold', () => {
participants: [],
transactionID: transaction.transactionID,
});
const transactionThread = buildTransactionThread(iouAction, iouReport);
const transactionThread = buildTransactionThread(iouAction, iouReport, RORY_ACCOUNT_ID);

const transactionCollectionDataSet: TransactionCollectionDataSet = {
[`${ONYXKEYS.COLLECTION.TRANSACTION}${transaction.transactionID}`]: transaction,
Expand Down Expand Up @@ -450,7 +450,7 @@ describe('actions/IOU/Hold', () => {
participants: [],
transactionID: transaction.transactionID,
});
const transactionThread = buildTransactionThread(iouAction, iouReport);
const transactionThread = buildTransactionThread(iouAction, iouReport, RORY_ACCOUNT_ID);

const actions: OnyxInputValue<ReportActions> = {[`${ONYXKEYS.COLLECTION.REPORT_ACTIONS}${iouAction.reportActionID}`]: iouAction};
const reportCollectionDataSet: ReportCollectionDataSet = {
Expand Down Expand Up @@ -523,7 +523,7 @@ describe('actions/IOU/Hold', () => {
participants: [],
transactionID: transaction.transactionID,
});
const transactionThread = buildTransactionThread(iouAction, iouReport);
const transactionThread = buildTransactionThread(iouAction, iouReport, RORY_ACCOUNT_ID);

const actions: OnyxInputValue<ReportActions> = {[`${ONYXKEYS.COLLECTION.REPORT_ACTIONS}${iouAction.reportActionID}`]: iouAction};
const reportCollectionDataSet: ReportCollectionDataSet = {
Expand Down
10 changes: 8 additions & 2 deletions tests/actions/IOUTest/TrackExpenseTest.ts
Original file line number Diff line number Diff line change
Expand Up @@ -1880,7 +1880,10 @@ describe('actions/IOU/TrackExpense', () => {
// Given initial environment is set up
await waitForBatchedUpdates();

expect(thread.participants).toEqual({[CARLOS_ACCOUNT_ID]: {notificationPreference: CONST.REPORT.NOTIFICATION_PREFERENCE.HIDDEN, role: CONST.REPORT.ROLE.ADMIN}});
expect(thread.participants).toEqual({
[RORY_ACCOUNT_ID]: {notificationPreference: CONST.REPORT.NOTIFICATION_PREFERENCE.HIDDEN, role: CONST.REPORT.ROLE.ADMIN},
[CARLOS_ACCOUNT_ID]: {notificationPreference: CONST.REPORT.NOTIFICATION_PREFERENCE.HIDDEN, role: CONST.REPORT.ROLE.MEMBER},
});

const participantAccountIDs = Object.keys(thread.participants ?? {}).map(Number);
const userLogins = getLoginsByAccountIDs(participantAccountIDs);
Expand Down Expand Up @@ -1988,7 +1991,10 @@ describe('actions/IOU/TrackExpense', () => {
// Given initial environment is set up
await waitForBatchedUpdates();

expect(thread.participants).toEqual({[CARLOS_ACCOUNT_ID]: {notificationPreference: CONST.REPORT.NOTIFICATION_PREFERENCE.HIDDEN, role: CONST.REPORT.ROLE.ADMIN}});
expect(thread.participants).toEqual({
[RORY_ACCOUNT_ID]: {notificationPreference: CONST.REPORT.NOTIFICATION_PREFERENCE.HIDDEN, role: CONST.REPORT.ROLE.ADMIN},
[CARLOS_ACCOUNT_ID]: {notificationPreference: CONST.REPORT.NOTIFICATION_PREFERENCE.HIDDEN, role: CONST.REPORT.ROLE.MEMBER},
});

const participantAccountIDs = Object.keys(thread.participants ?? {}).map(Number);
const userLogins = getLoginsByAccountIDs(participantAccountIDs);
Expand Down
4 changes: 2 additions & 2 deletions tests/actions/MergeTransactionTest.ts
Original file line number Diff line number Diff line change
Expand Up @@ -958,7 +958,7 @@ describe('mergeTransactionRequest', () => {
await Onyx.set(`${ONYXKEYS.COLLECTION.REPORT_ACTIONS}${chatReport.reportID}`, {[previewAction.reportActionID]: previewAction});
await Onyx.set(`${ONYXKEYS.COLLECTION.MERGE_TRANSACTION}${mergeTransactionID}`, mergeTransaction);

const thread = buildTransactionThread(sourceIOUAction, sourceReport);
const thread = buildTransactionThread(sourceIOUAction, sourceReport, TEST_ACCOUNT_ID);

expect(thread.participants).toEqual({
[TEST_ACCOUNT_ID]: {notificationPreference: CONST.REPORT.NOTIFICATION_PREFERENCE.HIDDEN, role: CONST.REPORT.ROLE.ADMIN},
Expand Down Expand Up @@ -1141,7 +1141,7 @@ describe('mergeTransactionRequest', () => {
await Onyx.set(`${ONYXKEYS.COLLECTION.REPORT_ACTIONS}${selfDMReport.reportID}`, {[sourceIOUAction.reportActionID]: sourceIOUAction});
await Onyx.set(`${ONYXKEYS.COLLECTION.MERGE_TRANSACTION}${mergeTransactionID}`, mergeTransaction);

const thread = buildTransactionThread(sourceIOUAction, selfDMReport);
const thread = buildTransactionThread(sourceIOUAction, selfDMReport, TEST_ACCOUNT_ID);

expect(thread.participants).toEqual({
[TEST_ACCOUNT_ID]: {notificationPreference: CONST.REPORT.NOTIFICATION_PREFERENCE.HIDDEN, role: CONST.REPORT.ROLE.ADMIN},
Expand Down
Loading
Loading