Skip to content

Commit ef4a58b

Browse files
authored
Merge pull request Expensify#71152 from nkdengineer/fix/70154
You briefly shown when delete the last message
2 parents e4aabe2 + b2cd67a commit ef4a58b

4 files changed

Lines changed: 48 additions & 55 deletions

File tree

src/libs/ReportUtils.ts

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ import mapValues from 'lodash/mapValues';
1010
import lodashMaxBy from 'lodash/maxBy';
1111
import type {ColorValue} from 'react-native';
1212
import {InteractionManager} from 'react-native';
13-
import type {OnyxCollection, OnyxEntry, OnyxUpdate} from 'react-native-onyx';
13+
import type {NullishDeep, OnyxCollection, OnyxEntry, OnyxUpdate} from 'react-native-onyx';
1414
import Onyx from 'react-native-onyx';
1515
import type {SvgProps} from 'react-native-svg';
1616
import type {OriginalMessageChangePolicy, OriginalMessageExportIntegration, OriginalMessageModifiedExpense} from 'src/types/onyx/OriginalMessage';
@@ -3771,7 +3771,11 @@ function buildOptimisticCancelPaymentReportAction(expenseReportID: string, amoun
37713771
* @param [actionsToMerge] - the optimistic merge actions that needs to be considered while fetching last visible message
37723772
37733773
*/
3774-
function getLastVisibleMessage(reportID: string | undefined, isReportArchived: boolean | undefined, actionsToMerge: ReportActions = {}): LastVisibleMessage {
3774+
function getLastVisibleMessage(
3775+
reportID: string | undefined,
3776+
isReportArchived: boolean | undefined,
3777+
actionsToMerge: Record<string, NullishDeep<ReportAction> | null> = {},
3778+
): LastVisibleMessage {
37753779
const report = getReportOrDraftReport(reportID);
37763780
const lastVisibleAction = getLastVisibleActionReportActionsUtils(reportID, canUserPerformWriteAction(report, isReportArchived), actionsToMerge);
37773781

src/libs/actions/IOU.ts

Lines changed: 4 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -258,7 +258,7 @@ import {buildAddMembersToWorkspaceOnyxData, buildUpdateWorkspaceMembersRoleOnyxD
258258
import {buildOptimisticRecentlyUsedCurrencies, buildPolicyData, generatePolicyID} from './Policy/Policy';
259259
import {buildOptimisticPolicyRecentlyUsedTags, getPolicyTagsData} from './Policy/Tag';
260260
import type {GuidedSetupData} from './Report';
261-
import {buildInviteToRoomOnyxData, completeOnboarding, getCurrentUserAccountID, notifyNewAction} from './Report';
261+
import {buildInviteToRoomOnyxData, completeOnboarding, getCurrentUserAccountID, notifyNewAction, optimisticReportLastData} from './Report';
262262
import {clearAllRelatedReportActionErrors} from './ReportActions';
263263
import {getRecentWaypoints, sanitizeRecentWaypoints} from './Transaction';
264264
import {removeDraftSplitTransaction, removeDraftTransaction, removeDraftTransactions} from './TransactionEdit';
@@ -8688,16 +8688,8 @@ function deleteMoneyRequest(
86888688
canUserPerformWriteAction = !!canUserPerformWriteActionReportUtils(chatReport, isChatIOUReportArchived);
86898689
}
86908690

8691-
const lastMessageText = getLastVisibleMessage(
8692-
iouReport?.chatReportID,
8693-
canUserPerformWriteAction,
8694-
reportPreviewAction?.reportActionID ? {[reportPreviewAction.reportActionID]: null} : {},
8695-
)?.lastMessageText;
8696-
const lastVisibleActionCreated = getLastVisibleAction(
8697-
iouReport?.chatReportID,
8698-
canUserPerformWriteAction,
8699-
reportPreviewAction?.reportActionID ? {[reportPreviewAction.reportActionID]: null} : {},
8700-
)?.created;
8691+
const optimisticReportActions = reportPreviewAction?.reportActionID ? {[reportPreviewAction.reportActionID]: null} : {};
8692+
const optimisticLastReportData = optimisticReportLastData(iouReport?.chatReportID ?? String(CONST.DEFAULT_NUMBER_ID), optimisticReportActions, canUserPerformWriteAction);
87018693

87028694
if (chatReport) {
87038695
optimisticData.push({
@@ -8706,8 +8698,7 @@ function deleteMoneyRequest(
87068698
value: {
87078699
hasOutstandingChildRequest: hasOutstandingChildRequest(chatReport, iouReport?.reportID),
87088700
iouReportID: null,
8709-
lastMessageText,
8710-
lastVisibleActionCreated,
8701+
...optimisticLastReportData,
87118702
},
87128703
});
87138704
}

src/libs/actions/Report.ts

Lines changed: 35 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -1948,23 +1948,14 @@ function deleteReportComment(reportID: string | undefined, reportAction: ReportA
19481948

19491949
// If we are deleting the last visible message, let's find the previous visible one (or set an empty one if there are none) and update the lastMessageText in the LHN.
19501950
// Similarly, if we are deleting the last read comment we will want to update the lastVisibleActionCreated to use the previous visible message.
1951-
let optimisticReport: Partial<Report> = {
1952-
lastMessageText: '',
1953-
lastVisibleActionCreated: '',
1954-
};
1955-
const {lastMessageText = ''} = getLastVisibleMessage(originalReportID, isOriginalReportArchived, optimisticReportActions as ReportActions);
19561951
const report = allReports?.[`${ONYXKEYS.COLLECTION.REPORT}${reportID}`];
19571952
const canUserPerformWriteAction = canUserPerformWriteActionReportUtils(report, isReportArchived);
1958-
if (lastMessageText) {
1959-
const lastVisibleAction = ReportActionsUtils.getLastVisibleAction(originalReportID, canUserPerformWriteAction, optimisticReportActions as ReportActions);
1960-
const lastVisibleActionCreated = lastVisibleAction?.created;
1961-
const lastActorAccountID = lastVisibleAction?.actorAccountID;
1962-
optimisticReport = {
1963-
lastMessageText,
1964-
lastVisibleActionCreated,
1965-
lastActorAccountID,
1966-
};
1967-
}
1953+
const optimisticLastReportData = optimisticReportLastData(originalReportID, optimisticReportActions as ReportActions, canUserPerformWriteAction, isOriginalReportArchived);
1954+
1955+
const optimisticReport: Partial<Report> = {
1956+
...optimisticLastReportData,
1957+
};
1958+
19681959
const didCommentMentionCurrentUser = ReportActionsUtils.didMessageMentionCurrentUser(reportAction);
19691960
if (didCommentMentionCurrentUser && reportAction.created === report?.lastMentionedTime) {
19701961
const reportActionsForReport = allReportActions?.[reportID];
@@ -4115,6 +4106,21 @@ function removeFromGroupChat(reportID: string, accountIDList: number[]) {
41154106
removeFromRoom(reportID, accountIDList);
41164107
}
41174108

4109+
function optimisticReportLastData(
4110+
reportID: string,
4111+
optimisticReportActions: Record<string, NullishDeep<ReportAction> | null> = {},
4112+
canUserPerformWriteAction?: boolean,
4113+
isReportArchived?: boolean,
4114+
) {
4115+
const lastMessageText = getLastVisibleMessage(reportID, isReportArchived, optimisticReportActions).lastMessageText ?? '';
4116+
const lastVisibleAction = ReportActionsUtils.getLastVisibleAction(reportID, canUserPerformWriteAction, optimisticReportActions);
4117+
return {
4118+
lastMessageText,
4119+
lastVisibleActionCreated: lastVisibleAction?.created ?? '',
4120+
lastActorAccountID: lastMessageText ? lastVisibleAction?.actorAccountID : CONST.DEFAULT_NUMBER_ID,
4121+
};
4122+
}
4123+
41184124
/** Flag a comment as offensive */
41194125
function flagComment(reportAction: OnyxEntry<ReportAction>, severity: string, originalReport: OnyxEntry<Report> | undefined, isOriginalReportArchived = false) {
41204126
const originalReportID = originalReport?.reportID;
@@ -4168,28 +4174,21 @@ function flagComment(reportAction: OnyxEntry<ReportAction>, severity: string, or
41684174
},
41694175
];
41704176

4171-
let optimisticReport: Partial<Report> = {
4172-
lastMessageText: '',
4173-
lastVisibleActionCreated: '',
4174-
};
4175-
4176-
const {lastMessageText = ''} = getLastVisibleMessage(originalReportID, isOriginalReportArchived, {
4177-
[reportActionID]: {...reportAction, message: [updatedMessage], pendingAction: CONST.RED_BRICK_ROAD_PENDING_ACTION.UPDATE},
4178-
} as ReportActions);
4177+
const report = allReports?.[`${ONYXKEYS.COLLECTION.REPORT}${originalReportID}`];
4178+
const canUserPerformWriteAction = canUserPerformWriteActionReportUtils(report);
41794179

4180-
const canUserPerformWriteAction = canUserPerformWriteActionReportUtils(originalReport, isOriginalReportArchived);
4181-
if (lastMessageText) {
4182-
const lastVisibleAction = ReportActionsUtils.getLastVisibleAction(originalReportID, canUserPerformWriteAction, {
4180+
const optimisticLastReportData = optimisticReportLastData(
4181+
originalReportID ?? String(CONST.DEFAULT_NUMBER_ID),
4182+
{
41834183
[reportActionID]: {...reportAction, message: [updatedMessage], pendingAction: CONST.RED_BRICK_ROAD_PENDING_ACTION.UPDATE},
4184-
} as ReportActions);
4185-
const lastVisibleActionCreated = lastVisibleAction?.created;
4186-
const lastActorAccountID = lastVisibleAction?.actorAccountID;
4187-
optimisticReport = {
4188-
lastMessageText,
4189-
lastVisibleActionCreated,
4190-
lastActorAccountID,
4191-
};
4192-
}
4184+
} as ReportActions,
4185+
canUserPerformWriteAction,
4186+
isOriginalReportArchived,
4187+
);
4188+
4189+
const optimisticReport: Partial<Report> = {
4190+
...optimisticLastReportData,
4191+
};
41934192

41944193
if (shouldHideMessage) {
41954194
optimisticData.push({
@@ -6271,5 +6270,6 @@ export {
62716270
removeFailedReport,
62726271
createTransactionThreadReport,
62736272
openUnreportedExpense,
6273+
optimisticReportLastData,
62746274
setOptimisticTransactionThread,
62756275
};

src/libs/actions/Task.ts

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ import type {ReportActions} from '@src/types/onyx/ReportAction';
2626
import type ReportAction from '@src/types/onyx/ReportAction';
2727
import type {OnyxData} from '@src/types/onyx/Request';
2828
import {isEmptyObject} from '@src/types/utils/EmptyObject';
29-
import {getMostRecentReportID, navigateToConciergeChatAndDeleteReport, notifyNewAction} from './Report';
29+
import {getMostRecentReportID, navigateToConciergeChatAndDeleteReport, notifyNewAction, optimisticReportLastData} from './Report';
3030
import {setSelfTourViewed} from './Welcome';
3131

3232
type OptimisticReport = Pick<OnyxTypes.Report, 'reportName' | 'managerID' | 'pendingFields' | 'participants'>;
@@ -1081,6 +1081,7 @@ function deleteTask(report: OnyxEntry<OnyxTypes.Report>, isReportArchived: boole
10811081
const optimisticReportActions = parentReportAction?.reportActionID ? {[parentReportAction?.reportActionID]: optimisticReportAction} : {};
10821082
const hasOutstandingChildTask = getOutstandingChildTask(report);
10831083

1084+
const optimisticLastReportData = optimisticReportLastData(parentReport?.reportID ?? String(CONST.DEFAULT_NUMBER_ID), optimisticReportActions as ReportActions, canUserPerformWriteAction);
10841085
const optimisticData: OnyxUpdate[] = [
10851086
{
10861087
onyxMethod: Onyx.METHOD.MERGE,
@@ -1096,10 +1097,7 @@ function deleteTask(report: OnyxEntry<OnyxTypes.Report>, isReportArchived: boole
10961097
onyxMethod: Onyx.METHOD.MERGE,
10971098
key: `${ONYXKEYS.COLLECTION.REPORT}${parentReport?.reportID}`,
10981099
value: {
1099-
lastMessageText:
1100-
ReportActionsUtils.getLastVisibleMessage(parentReport?.reportID, canUserPerformWriteAction, optimisticReportActions as OnyxTypes.ReportActions).lastMessageText ?? '',
1101-
lastVisibleActionCreated: ReportActionsUtils.getLastVisibleAction(parentReport?.reportID, canUserPerformWriteAction, optimisticReportActions as OnyxTypes.ReportActions)
1102-
?.created,
1100+
...optimisticLastReportData,
11031101
hasOutstandingChildTask,
11041102
},
11051103
},

0 commit comments

Comments
 (0)