Skip to content

Commit

Permalink
fix: improve getOneTransactionThreadReportID performance
Browse files Browse the repository at this point in the history
  • Loading branch information
OlimpiaZurek committed Jul 25, 2024
1 parent 1084706 commit aa69f38
Showing 1 changed file with 19 additions and 11 deletions.
30 changes: 19 additions & 11 deletions src/libs/ReportActionsUtils.ts
Original file line number Diff line number Diff line change
Expand Up @@ -966,28 +966,31 @@ function getOneTransactionThreadReportID(reportID: string, reportActions: OnyxEn
return;
}

const reportActionsArray = Object.values(reportActions ?? {});
const reportActionsArray = Array.isArray(reportActions) ? reportActions : Object.values(reportActions ?? {});
if (!reportActionsArray.length) {
return;
}

// Get all IOU report actions for the report.
const iouRequestTypes: Array<ValueOf<typeof CONST.IOU.REPORT_ACTION_TYPE>> = [
const iouRequestTypes = new Set<ValueOf<typeof CONST.IOU.REPORT_ACTION_TYPE>>([
CONST.IOU.REPORT_ACTION_TYPE.CREATE,
CONST.IOU.REPORT_ACTION_TYPE.SPLIT,
CONST.IOU.REPORT_ACTION_TYPE.PAY,
CONST.IOU.REPORT_ACTION_TYPE.TRACK,
];
]);

const iouRequestActions = reportActionsArray.filter((action) => {
const iouRequestActions = [];
for (const action of reportActionsArray) {
if (!isMoneyRequestAction(action)) {
return false;
// eslint-disable-next-line no-continue
continue;
}

const originalMessage = getOriginalMessage(action);
const actionType = originalMessage?.type;
return (
if (
actionType &&
(iouRequestTypes.includes(actionType) ?? []) &&
iouRequestTypes.has(actionType) &&
action.childReportID &&
// Include deleted IOU reportActions if:
// - they have an assocaited IOU transaction ID or
Expand All @@ -997,22 +1000,27 @@ function getOneTransactionThreadReportID(reportID: string, reportActions: OnyxEn
// eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing
(isMessageDeleted(action) && action.childVisibleActionCount) ||
(action.pendingAction === CONST.RED_BRICK_ROAD_PENDING_ACTION.DELETE && (isOffline ?? isNetworkOffline)))
);
});
) {
iouRequestActions.push(action);
}
}

// If we don't have any IOU request actions, or we have more than one IOU request actions, this isn't a oneTransaction report
if (!iouRequestActions.length || iouRequestActions.length > 1) {
return;
}

const singleAction = iouRequestActions[0];
const originalMessage = getOriginalMessage(singleAction);

// If there's only one IOU request action associated with the report but it's been deleted, then we don't consider this a oneTransaction report
// and want to display it using the standard view
if (isMoneyRequestAction(iouRequestActions[0]) && (getOriginalMessage(iouRequestActions[0])?.deleted ?? '') !== '') {
if (isMoneyRequestAction(singleAction) && (originalMessage?.deleted ?? '') !== '') {
return;
}

// Ensure we have a childReportID associated with the IOU report action
return iouRequestActions[0].childReportID;
return singleAction.childReportID;
}

/**
Expand Down

0 comments on commit aa69f38

Please sign in to comment.