Skip to content
Closed
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
7 changes: 3 additions & 4 deletions src/pages/inbox/sidebar/SidebarLinks.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -56,21 +56,20 @@ function SidebarLinks({insets, optionListItems, priorityMode = CONST.PRIORITY_MO
// or when continuously clicking different LHNs, only apply to small screen
// since getTopmostReportId always returns on other devices
const reportActionID = Navigation.getTopmostReportActionId();
const actionTargetReportActionID = option.actionTargetReportActionID;

// Prevent opening a new Report page if the user quickly taps on another conversation
// before the first one is displayed.
const shouldBlockReportNavigation = Navigation.getActiveRoute() !== `/${ROUTES.INBOX}` && shouldUseNarrowLayout;

if (
(option.reportID === Navigation.getTopmostReportId() && !reportActionID && !actionTargetReportActionID) ||
(shouldUseNarrowLayout && isActiveReport(option.reportID) && !reportActionID && !actionTargetReportActionID) ||
(option.reportID === Navigation.getTopmostReportId() && !reportActionID) ||
(shouldUseNarrowLayout && isActiveReport(option.reportID) && !reportActionID) ||
shouldBlockReportNavigation
) {
cancelSpan(`${CONST.TELEMETRY.SPAN_OPEN_REPORT}_${option.reportID}`);
return;
}
Navigation.navigate(ROUTES.REPORT_WITH_ID.getRoute(option.reportID, actionTargetReportActionID));
Navigation.navigate(ROUTES.REPORT_WITH_ID.getRoute(option.reportID));
},
[shouldUseNarrowLayout, isActiveReport],
);
Expand Down
47 changes: 2 additions & 45 deletions tests/unit/ReportUtilsTest.ts
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,6 @@ import {getOriginalMessage, getReportAction, isWhisperAction} from '@libs/Report
import {buildReportNameFromParticipantNames, computeReportName as computeReportNameOriginal, getGroupChatName, getPolicyExpenseChatName, getReportName} from '@libs/ReportNameUtils';
import type {OptionData} from '@libs/ReportUtils';
import {
buildOptimisticAnnounceChat,
buildOptimisticApprovedReportAction,
buildOptimisticCancelPaymentReportAction,
buildOptimisticCardAssignedReportAction,
Expand Down Expand Up @@ -785,10 +784,9 @@ describe('ReportUtils', () => {
},
adminsChatReportID,
selectedInterestedFeatures: ['areCompanyCardsEnabled'],
companySize: CONST.ONBOARDING_COMPANY_SIZE.SMALL,
companySize: CONST.ONBOARDING_COMPANY_SIZE.MICRO,
});
// Without the beta, tasks SHOULD be generated (old behavior) — uses SMALL (not MICRO)
// because MICRO + MANAGE_TEAM users bypass the beta gate and get followups directly
// Without the beta, tasks SHOULD be generated (old behavior)
expect(result?.guidedSetupData).toHaveLength(3);
const taskReportIDs =
result?.guidedSetupData.reduce<string[]>((acc, item) => {
Expand Down Expand Up @@ -7038,47 +7036,6 @@ describe('ReportUtils', () => {
});
});

describe('buildOptimisticAnnounceChat', () => {
it('should return empty data when there are fewer than 3 participants', () => {
const result = buildOptimisticAnnounceChat('policyID123', [1, 2], 1);
expect(result.announceChatReportID).toBe('');
expect(result.announceChatReportActionID).toBe('');
});

it('should create an announce chat when there are 3 or more participants', () => {
const currentUser = 100;
const result = buildOptimisticAnnounceChat('policyID123', [100, 200, 300], currentUser);
expect(result.announceChatReportID).not.toBe('');
expect(result.announceChatReportActionID).not.toBe('');
expect(result.announceChatData.onyxOptimisticData.length).toBeGreaterThan(0);
expect(result.announceChatData.onyxSuccessData.length).toBeGreaterThan(0);
expect(result.announceChatData.onyxFailureData.length).toBeGreaterThan(0);
});

it('should not assign a role to participants for workspace chat type', () => {
const currentUser = 100;
const result = buildOptimisticAnnounceChat('policyID123', [100, 200, 300], currentUser);
const reportData = result.announceChatData.onyxOptimisticData.find((data) => data.key.startsWith(`${ONYXKEYS.COLLECTION.REPORT}`));
const report = reportData?.value as Report | undefined;
expect(report?.participants?.[currentUser]?.role).toBeUndefined();
});

it('should create announce chat with POLICY_ANNOUNCE chat type', () => {
const currentUser = 100;
const result = buildOptimisticAnnounceChat('policyID123', [100, 200, 300], currentUser);
const reportData = result.announceChatData.onyxOptimisticData.find((data) => data.key.startsWith(`${ONYXKEYS.COLLECTION.REPORT}`) && !data.key.includes('Draft'));
const report = reportData?.value as Report | undefined;
expect(report?.chatType).toBe(CONST.REPORT.CHAT_TYPE.POLICY_ANNOUNCE);
});

it('should set writeCapability to ADMINS for announce chat', () => {
const result = buildOptimisticAnnounceChat('policyID123', [100, 200, 300], 100);
const reportData = result.announceChatData.onyxOptimisticData.find((data) => data.key.startsWith(`${ONYXKEYS.COLLECTION.REPORT}`) && !data.key.includes('Draft'));
const report = reportData?.value as Report | undefined;
expect(report?.writeCapability).toBe(CONST.REPORT.WRITE_CAPABILITIES.ADMINS);
});
});

describe('getWorkspaceNameUpdatedMessage', () => {
it('return the encoded workspace name updated message', () => {
const action = {
Expand Down
Loading