Skip to content

Commit cab0b7b

Browse files
authored
Merge pull request Expensify#88916 from dukenv0307/fix/66412-part-10
refactor buildOptimisticCreatedReportAction to use 1 param
2 parents e726ea5 + 8006e1b commit cab0b7b

14 files changed

Lines changed: 58 additions & 33 deletions

File tree

src/libs/ReportUtils.ts

Lines changed: 36 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -7955,16 +7955,34 @@ function buildOptimisticGroupChatReport(
79557955
});
79567956
}
79577957

7958+
type BuildOptimisticCreatedReportActionParams = {
7959+
emailCreatingAction: string;
7960+
created?: string;
7961+
optimisticReportActionID?: string;
7962+
// TODO: currentUserAccountID, currentUserDisplayName, currentUserEmail, currentUserAvatar will be required eventually. Refactor issue: https://github.com/Expensify/App/issues/66412
7963+
currentUserAccountID?: number;
7964+
currentUserDisplayName?: string;
7965+
currentUserEmail?: string;
7966+
currentUserAvatar?: AvatarSource;
7967+
};
7968+
79587969
/**
79597970
* Returns the necessary reportAction onyx data to indicate that the chat has been created optimistically
7960-
* @param [created] - Action created time
79617971
*/
7962-
function buildOptimisticCreatedReportAction(emailCreatingAction: string, created = DateUtils.getDBTime(), optimisticReportActionID?: string): OptimisticCreatedReportAction {
7972+
function buildOptimisticCreatedReportAction({
7973+
emailCreatingAction,
7974+
created = DateUtils.getDBTime(),
7975+
optimisticReportActionID,
7976+
currentUserAccountID,
7977+
currentUserDisplayName,
7978+
currentUserEmail,
7979+
currentUserAvatar,
7980+
}: BuildOptimisticCreatedReportActionParams): OptimisticCreatedReportAction {
79637981
return {
79647982
reportActionID: optimisticReportActionID ?? rand64(),
79657983
actionName: CONST.REPORT.ACTIONS.TYPE.CREATED,
79667984
pendingAction: CONST.RED_BRICK_ROAD_PENDING_ACTION.ADD,
7967-
actorAccountID: deprecatedCurrentUserAccountID,
7985+
actorAccountID: currentUserAccountID ?? deprecatedCurrentUserAccountID,
79687986
message: [
79697987
{
79707988
type: CONST.REPORT.MESSAGE.TYPE.TEXT,
@@ -7981,11 +7999,11 @@ function buildOptimisticCreatedReportAction(emailCreatingAction: string, created
79817999
{
79828000
type: CONST.REPORT.MESSAGE.TYPE.TEXT,
79838001
style: 'strong',
7984-
text: getCurrentUserDisplayNameOrEmail(),
8002+
text: currentUserDisplayName ?? currentUserEmail ?? getCurrentUserDisplayNameOrEmail(),
79858003
},
79868004
],
79878005
automatic: false,
7988-
avatar: getCurrentUserAvatar(),
8006+
avatar: currentUserAvatar ?? getCurrentUserAvatar(),
79898007
created,
79908008
shouldShow: true,
79918009
};
@@ -8518,7 +8536,7 @@ function buildOptimisticAnnounceChat(policyID: string, accountIDs: number[], cur
85188536
currentUserAccountID,
85198537
});
85208538

8521-
const announceCreatedAction = buildOptimisticCreatedReportAction(CONST.POLICY.OWNER_EMAIL_FAKE);
8539+
const announceCreatedAction = buildOptimisticCreatedReportAction({emailCreatingAction: CONST.POLICY.OWNER_EMAIL_FAKE});
85228540
announceRoomOnyxData.onyxOptimisticData.push(
85238541
{
85248542
onyxMethod: Onyx.METHOD.SET,
@@ -8631,7 +8649,7 @@ function buildOptimisticWorkspaceChats(
86318649
}),
86328650
};
86338651
const adminsChatReportID = adminsChatData.reportID;
8634-
const adminsCreatedAction = buildOptimisticCreatedReportAction(CONST.POLICY.OWNER_EMAIL_FAKE);
8652+
const adminsCreatedAction = buildOptimisticCreatedReportAction({emailCreatingAction: CONST.POLICY.OWNER_EMAIL_FAKE});
86358653
const adminsReportActionData = {
86368654
[adminsCreatedAction.reportActionID]: adminsCreatedAction,
86378655
};
@@ -8649,7 +8667,7 @@ function buildOptimisticWorkspaceChats(
86498667
});
86508668

86518669
const expenseChatReportID = expenseChatData.reportID;
8652-
const expenseReportCreatedAction = buildOptimisticCreatedReportAction(currentUserEmail ?? '');
8670+
const expenseReportCreatedAction = buildOptimisticCreatedReportAction({emailCreatingAction: currentUserEmail ?? ''});
86538671
const expenseReportActionData = {
86548672
[expenseReportCreatedAction.reportActionID]: expenseReportCreatedAction,
86558673
};
@@ -8837,11 +8855,14 @@ function buildOptimisticMoneyRequestEntities({
88378855
OptimisticChatReport | undefined,
88388856
OptimisticCreatedReportAction | null,
88398857
] {
8840-
const createdActionForChat = buildOptimisticCreatedReportAction(payeeEmail, undefined, optimisticCreatedReportActionID);
8858+
const createdActionForChat = buildOptimisticCreatedReportAction({emailCreatingAction: payeeEmail, optimisticReportActionID: optimisticCreatedReportActionID});
88418859

88428860
// The `CREATED` action must be optimistically generated before the IOU action so that it won't appear after the IOU action in the chat.
88438861
const iouActionCreationTime = DateUtils.getDBTime();
8844-
const createdActionForIOUReport = buildOptimisticCreatedReportAction(payeeEmail, DateUtils.subtractMillisecondsFromDateTime(iouActionCreationTime, 1));
8862+
const createdActionForIOUReport = buildOptimisticCreatedReportAction({
8863+
emailCreatingAction: payeeEmail,
8864+
created: DateUtils.subtractMillisecondsFromDateTime(iouActionCreationTime, 1),
8865+
});
88458866

88468867
const iouAction = buildOptimisticIOUReportAction({
88478868
type,
@@ -8863,7 +8884,8 @@ function buildOptimisticMoneyRequestEntities({
88638884

88648885
// Create optimistic transactionThread and the `CREATED` action for it, if existingTransactionThreadReportID is undefined
88658886
const transactionThread = shouldGenerateTransactionThreadReport ? buildTransactionThread(iouAction, iouReport, currentUserAccountID, existingTransactionThreadReportID) : undefined;
8866-
const createdActionForTransactionThread = !!existingTransactionThreadReportID || !shouldGenerateTransactionThreadReport ? null : buildOptimisticCreatedReportAction(payeeEmail);
8887+
const createdActionForTransactionThread =
8888+
!!existingTransactionThreadReportID || !shouldGenerateTransactionThreadReport ? null : buildOptimisticCreatedReportAction({emailCreatingAction: payeeEmail});
88678889

88688890
// The IOU action and the transactionThread are co-dependent as parent-child, so we need to link them together
88698891
iouAction.childReportID = existingTransactionThreadReportID ?? transactionThread?.reportID;
@@ -10484,7 +10506,7 @@ function getTaskAssigneeChatOnyxData(
1048410506
// You're able to assign a task to someone you haven't chatted with before - so we need to optimistically create the chat and the chat reportActions
1048510507
// Only add the assignee chat report to onyx if we haven't already set it optimistically
1048610508
if ((isOptimisticAssigneeChatReport ?? assigneeChatReportMetadata?.isOptimisticReport) && assigneeChatReport?.pendingFields?.createChat !== CONST.RED_BRICK_ROAD_PENDING_ACTION.ADD) {
10487-
optimisticChatCreatedReportAction = buildOptimisticCreatedReportAction(assigneeChatReportID);
10509+
optimisticChatCreatedReportAction = buildOptimisticCreatedReportAction({emailCreatingAction: assigneeChatReportID});
1048810510
optimisticData.push(
1048910511
{
1049010512
onyxMethod: Onyx.METHOD.MERGE,
@@ -11875,7 +11897,7 @@ function prepareOnboardingOnyxData({
1187511897
);
1187611898
const emailCreatingAction =
1187711899
engagementChoice === CONST.ONBOARDING_CHOICES.MANAGE_TEAM ? (allPersonalDetails?.[actorAccountID]?.login ?? CONST.EMAIL.CONCIERGE) : CONST.EMAIL.CONCIERGE;
11878-
const taskCreatedAction = buildOptimisticCreatedReportAction(emailCreatingAction);
11900+
const taskCreatedAction = buildOptimisticCreatedReportAction({emailCreatingAction});
1187911901
const taskReportAction = buildOptimisticTaskCommentReportAction(currentTask.reportID, taskTitle, 0, `task for ${taskTitle}`, targetChatReportID, actorAccountID, index + 3);
1188011902
currentTask.parentReportActionID = taskReportAction.reportAction.reportActionID;
1188111903

@@ -12315,7 +12337,7 @@ function prepareOnboardingOnyxData({
1231512337
if (!selfDMReport) {
1231612338
const currentTime = DateUtils.getDBTime();
1231712339
selfDMReport = buildOptimisticSelfDMReport(currentTime);
12318-
createdAction = buildOptimisticCreatedReportAction(deprecatedCurrentUserEmail ?? '', currentTime);
12340+
createdAction = buildOptimisticCreatedReportAction({emailCreatingAction: deprecatedCurrentUserEmail ?? '', created: currentTime});
1231912341
selfDMParameters = {reportID: selfDMReport.reportID, createdReportActionID: createdAction.reportActionID};
1232012342
optimisticData.push(
1232112343
{

src/libs/actions/IOU/BulkEdit.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -450,7 +450,7 @@ function updateMultipleMoneyRequests({
450450
const hasCreatedAction = didCreateThreadInThisIteration || Object.values(threadReportActions).some((action) => action?.actionName === CONST.REPORT.ACTIONS.TYPE.CREATED);
451451
const optimisticCreatedValue: Record<string, Partial<OnyxTypes.ReportAction>> = {};
452452
if (!hasCreatedAction) {
453-
const optimisticCreatedAction = buildOptimisticCreatedReportAction(CONST.REPORT.OWNER_EMAIL_FAKE);
453+
const optimisticCreatedAction = buildOptimisticCreatedReportAction({emailCreatingAction: CONST.REPORT.OWNER_EMAIL_FAKE});
454454
optimisticCreatedAction.pendingAction = null;
455455
backfilledCreatedActionID = optimisticCreatedAction.reportActionID;
456456
optimisticCreatedValue[optimisticCreatedAction.reportActionID] = optimisticCreatedAction;

src/libs/actions/IOU/Duplicate.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -342,7 +342,7 @@ function mergeDuplicates({
342342

343343
if (optimisticTransactionThreadReportID) {
344344
const iouAction = getIOUActionForReportID(params.reportID, params.transactionID);
345-
const optimisticCreatedAction = buildOptimisticCreatedReportAction(currentUserLogin);
345+
const optimisticCreatedAction = buildOptimisticCreatedReportAction({emailCreatingAction: currentUserLogin});
346346
const optimisticTransactionThreadReport = buildTransactionThread(iouAction, expenseReport, currentUserAccountID, undefined, optimisticTransactionThreadReportID);
347347

348348
allParams.transactionThreadReportID = optimisticTransactionThreadReportID;

src/libs/actions/IOU/Hold.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,7 @@ function putOnHold(
7474
transactionThreadReport = buildTransactionThread(iouAction, moneyRequestReport, currentUserAccountID, undefined, reportID);
7575
}
7676

77-
const optimisticCreatedAction = buildOptimisticCreatedReportAction(currentUserLogin);
77+
const optimisticCreatedAction = buildOptimisticCreatedReportAction({emailCreatingAction: currentUserLogin});
7878

7979
const optimisticData: Array<
8080
OnyxUpdate<

src/libs/actions/IOU/PerDiem.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -603,7 +603,7 @@ function getPerDiemExpenseInformationForSelfDM(perDiemExpenseInformation: PerDie
603603
if (!chatReport) {
604604
const currentTime = DateUtils.getDBTime();
605605
const optimisticSelfDMReport = buildOptimisticSelfDMReport(currentTime);
606-
const selfDMCreatedReportAction = buildOptimisticCreatedReportAction(currentUserEmailParam, currentTime);
606+
const selfDMCreatedReportAction = buildOptimisticCreatedReportAction({emailCreatingAction: currentUserEmailParam, created: currentTime});
607607
optimisticSelfDMReportID = optimisticSelfDMReport.reportID;
608608
optimisticSelfDMCreatedReportActionID = selfDMCreatedReportAction.reportActionID;
609609
chatReport = optimisticSelfDMReport;

src/libs/actions/IOU/Split.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -438,7 +438,7 @@ function startSplitBill({
438438
const filename = splitTransaction.receipt?.filename;
439439

440440
// Note: The created action must be optimistically generated before the IOU action so there's no chance that the created action appears after the IOU action in the chat
441-
const splitChatCreatedReportAction = buildOptimisticCreatedReportAction(currentUserEmailForIOUSplit);
441+
const splitChatCreatedReportAction = buildOptimisticCreatedReportAction({emailCreatingAction: currentUserEmailForIOUSplit});
442442
const splitIOUReportAction = buildOptimisticIOUReportAction({
443443
type: CONST.IOU.REPORT_ACTION_TYPE.SPLIT,
444444
amount: 0,
@@ -1335,7 +1335,7 @@ function createSplitsAndOnyxData({
13351335
}
13361336

13371337
// Note: The created action must be optimistically generated before the IOU action so there's no chance that the created action appears after the IOU action in the chat
1338-
const splitCreatedReportAction = buildOptimisticCreatedReportAction(currentUserEmailForIOUSplit);
1338+
const splitCreatedReportAction = buildOptimisticCreatedReportAction({emailCreatingAction: currentUserEmailForIOUSplit});
13391339
const splitIOUReportAction = buildOptimisticIOUReportAction({
13401340
type: CONST.IOU.REPORT_ACTION_TYPE.SPLIT,
13411341
amount,

src/libs/actions/IOU/TrackExpense.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -878,7 +878,7 @@ function getTrackExpenseInformation(params: GetTrackExpenseInformationParams): T
878878
if (!chatReport) {
879879
const currentTime = DateUtils.getDBTime();
880880
const selfDMReport = buildOptimisticSelfDMReport(currentTime);
881-
const selfDMCreatedReportAction = buildOptimisticCreatedReportAction(currentUserEmailParam, currentTime);
881+
const selfDMCreatedReportAction = buildOptimisticCreatedReportAction({emailCreatingAction: currentUserEmailParam, created: currentTime});
882882
optimisticReportID = selfDMReport.reportID;
883883
optimisticReportActionID = selfDMCreatedReportAction.reportActionID;
884884
chatReport = selfDMReport;

src/libs/actions/Policy/Policy.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1645,7 +1645,7 @@ function createPolicyExpenseChats(
16451645
notificationPreference: CONST.REPORT.NOTIFICATION_PREFERENCE.ALWAYS,
16461646
};
16471647
}
1648-
const optimisticCreatedAction = ReportUtils.buildOptimisticCreatedReportAction(login);
1648+
const optimisticCreatedAction = ReportUtils.buildOptimisticCreatedReportAction({emailCreatingAction: login});
16491649

16501650
workspaceMembersChats.reportCreationData[login] = {
16511651
reportID: optimisticReport.reportID,

src/libs/actions/Report/index.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1592,7 +1592,7 @@ function openReport(params: OpenReportActionParams) {
15921592
// TODO: allPersonalDetails fallback should be removed in follow-up PRs https://github.com/Expensify/App/issues/73656
15931593
emailCreatingAction = (personalDetails ?? allPersonalDetails)?.[newReportObject.ownerAccountID]?.login ?? '';
15941594
}
1595-
const optimisticCreatedAction = buildOptimisticCreatedReportAction(emailCreatingAction);
1595+
const optimisticCreatedAction = buildOptimisticCreatedReportAction({emailCreatingAction});
15961596
optimisticData.push(
15971597
{
15981598
onyxMethod: Onyx.METHOD.SET,
@@ -1838,7 +1838,7 @@ function createGroupChat(
18381838
];
18391839

18401840
// Create optimistic created action
1841-
const optimisticCreatedAction = buildOptimisticCreatedReportAction(CONST.REPORT.OWNER_EMAIL_FAKE);
1841+
const optimisticCreatedAction = buildOptimisticCreatedReportAction({emailCreatingAction: CONST.REPORT.OWNER_EMAIL_FAKE});
18421842
optimisticData.push({
18431843
onyxMethod: Onyx.METHOD.SET,
18441844
key: `${ONYXKEYS.COLLECTION.REPORT_ACTIONS}${reportID}`,
@@ -3953,7 +3953,7 @@ function removeFailedReport(reportID: string | undefined) {
39533953

39543954
/** Add a policy report (workspace room) optimistically and navigate to it. */
39553955
function addPolicyReport(policyReport: OptimisticChatReport) {
3956-
const createdReportAction = buildOptimisticCreatedReportAction(CONST.POLICY.OWNER_EMAIL_FAKE);
3956+
const createdReportAction = buildOptimisticCreatedReportAction({emailCreatingAction: CONST.POLICY.OWNER_EMAIL_FAKE});
39573957

39583958
// Onyx.set is used on the optimistic data so that it is present before navigating to the workspace room. With Onyx.merge the workspace room reportID is not present when
39593959
// fetchReportIfNeeded is called on the ReportScreen, so openReport is called which is unnecessary since the optimistic data will be stored in Onyx.
@@ -6023,7 +6023,7 @@ function deleteAppReport({
60236023
const currentTime = DateUtils.getDBTime();
60246024
const optimisticSelfDMReport = buildOptimisticSelfDMReport(currentTime);
60256025
selfDMReportID = optimisticSelfDMReport.reportID;
6026-
createdAction = buildOptimisticCreatedReportAction(currentUserEmailParam ?? '', currentTime);
6026+
createdAction = buildOptimisticCreatedReportAction({emailCreatingAction: currentUserEmailParam ?? '', created: currentTime});
60276027
selfDMParameters = {reportID: optimisticSelfDMReport.reportID, createdReportActionID: createdAction.reportActionID};
60286028
optimisticData.push(
60296029
{

src/libs/actions/Task.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -138,7 +138,7 @@ function createTaskAndNavigate(params: CreateTaskAndNavigateParams) {
138138
let assigneeChatReportOnyxData;
139139

140140
// Parent ReportAction indicating that a task has been created
141-
const optimisticTaskCreatedAction = ReportUtils.buildOptimisticCreatedReportAction(currentUserEmail);
141+
const optimisticTaskCreatedAction = ReportUtils.buildOptimisticCreatedReportAction({emailCreatingAction: currentUserEmail});
142142
const optimisticAddCommentReport = ReportUtils.buildOptimisticTaskCommentReportAction(taskReportID, title, assigneeAccountID, `task for ${title}`, parentReportID);
143143
optimisticTaskReport.parentReportActionID = optimisticAddCommentReport.reportAction.reportActionID;
144144

0 commit comments

Comments
 (0)