Skip to content

Commit 45e91e9

Browse files
authored
Merge pull request Expensify#68509 from nkdengineer/fix/67096
fix: remove call to getReportNameValuePairs() in method getParentNavigationSubtitle
2 parents a8be325 + c98dd6b commit 45e91e9

6 files changed

Lines changed: 56 additions & 9 deletions

File tree

src/components/AvatarWithDisplayName.tsx

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import type {OnyxEntry} from 'react-native-onyx';
55
import type {ValueOf} from 'type-fest';
66
import useLocalize from '@hooks/useLocalize';
77
import useOnyx from '@hooks/useOnyx';
8+
import useReportIsArchived from '@hooks/useReportIsArchived';
89
import useStyleUtils from '@hooks/useStyleUtils';
910
import useTheme from '@hooks/useTheme';
1011
import useThemeStyles from '@hooks/useThemeStyles';
@@ -169,7 +170,8 @@ function AvatarWithDisplayName({
169170
const parentReportActionParam = report?.parentReportActionID ? parentReportActions?.[report.parentReportActionID] : undefined;
170171
const title = getReportName(report, undefined, parentReportActionParam, personalDetails, invoiceReceiverPolicy, reportAttributes);
171172
const subtitle = getChatRoomSubtitle(report, {isCreateExpenseFlow: true});
172-
const parentNavigationSubtitleData = getParentNavigationSubtitle(report);
173+
const isReportArchived = useReportIsArchived(report?.reportID);
174+
const parentNavigationSubtitleData = getParentNavigationSubtitle(report, isReportArchived);
173175
const isMoneyRequestOrReport = isMoneyRequestReport(report) || isMoneyRequest(report) || isTrackExpenseReport(report) || isInvoiceReport(report);
174176
const ownerPersonalDetails = getPersonalDetailsForAccountIDs(report?.ownerAccountID ? [report.ownerAccountID] : [], personalDetails);
175177
const displayNamesWithTooltips = getDisplayNamesWithTooltips(Object.values(ownerPersonalDetails), false, localeCompare);

src/libs/ReportUtils.ts

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5526,7 +5526,7 @@ function getPendingChatMembers(accountIDs: number[], previousPendingChatMembers:
55265526
/**
55275527
* Gets the parent navigation subtitle for the report
55285528
*/
5529-
function getParentNavigationSubtitle(report: OnyxEntry<Report>): ParentNavigationSummaryParams {
5529+
function getParentNavigationSubtitle(report: OnyxEntry<Report>, isReportArchived = false): ParentNavigationSummaryParams {
55305530
const parentReport = getParentReport(report);
55315531
if (isEmptyObject(parentReport)) {
55325532
const ownerAccountID = report?.ownerAccountID;
@@ -5550,9 +5550,7 @@ function getParentNavigationSubtitle(report: OnyxEntry<Report>): ParentNavigatio
55505550
if (isInvoiceReport(report) || isInvoiceRoom(parentReport)) {
55515551
let reportName = `${getPolicyName({report: parentReport})} & ${getInvoicePayerName(parentReport)}`;
55525552

5553-
// This will get removed as part of https://github.com/Expensify/App/issues/59961
5554-
// eslint-disable-next-line deprecation/deprecation
5555-
if (isArchivedNonExpenseReport(parentReport, !!getReportNameValuePairs(parentReport?.reportID)?.private_isArchived)) {
5553+
if (isArchivedNonExpenseReport(parentReport, isReportArchived)) {
55565554
reportName += ` (${translateLocal('common.archived')})`;
55575555
}
55585556

src/pages/ReportDetailsPage.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -198,7 +198,7 @@ function ReportDetailsPage({policy, report, route, reportMetadata}: ReportDetail
198198
const isReportArchived = useReportIsArchived(report?.reportID);
199199
const isArchivedRoom = useMemo(() => isArchivedNonExpenseReport(report, isReportArchived), [report, isReportArchived]);
200200
const shouldDisableRename = useMemo(() => shouldDisableRenameUtil(report, isReportArchived), [report, isReportArchived]);
201-
const parentNavigationSubtitleData = getParentNavigationSubtitle(report);
201+
const parentNavigationSubtitleData = getParentNavigationSubtitle(report, isReportArchived);
202202
const base62ReportID = getBase62ReportID(Number(report.reportID));
203203
// eslint-disable-next-line react-compiler/react-compiler, react-hooks/exhaustive-deps -- policy is a dependency because `getChatRoomSubtitle` calls `getPolicyName` which in turn retrieves the value from the `policy` value stored in Onyx
204204
const chatRoomSubtitle = useMemo(() => {

src/pages/ShareCodePage.tsx

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ import ScrollView from '@components/ScrollView';
1515
import useCurrentUserPersonalDetails from '@hooks/useCurrentUserPersonalDetails';
1616
import useEnvironment from '@hooks/useEnvironment';
1717
import useLocalize from '@hooks/useLocalize';
18+
import useReportIsArchived from '@hooks/useReportIsArchived';
1819
import useStyleUtils from '@hooks/useStyleUtils';
1920
import useThemeStyles from '@hooks/useThemeStyles';
2021
import Clipboard from '@libs/Clipboard';
@@ -75,6 +76,7 @@ function ShareCodePage({report, policy, backTo}: ShareCodePageProps) {
7576
const currentUserPersonalDetails = useCurrentUserPersonalDetails();
7677

7778
const isReport = !!report?.reportID;
79+
const isReportArchived = useReportIsArchived(report?.reportID);
7880

7981
const subtitle = useMemo(() => {
8082
if (isReport) {
@@ -88,11 +90,11 @@ function ShareCodePage({report, policy, backTo}: ShareCodePageProps) {
8890
.join(' & ');
8991
}
9092

91-
return getParentNavigationSubtitle(report).workspaceName ?? getChatRoomSubtitle(report);
93+
return getParentNavigationSubtitle(report, isReportArchived).workspaceName ?? getChatRoomSubtitle(report);
9294
}
9395

9496
return currentUserPersonalDetails.login;
95-
}, [report, currentUserPersonalDetails, isReport]);
97+
}, [isReport, currentUserPersonalDetails.login, report, isReportArchived]);
9698

9799
const title = isReport ? getReportName(report) : (currentUserPersonalDetails.displayName ?? '');
98100
const urlWithTrailingSlash = addTrailingForwardSlash(environmentURL);

src/pages/home/HeaderView.tsx

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ import useLoadingBarVisibility from '@hooks/useLoadingBarVisibility';
2626
import useLocalize from '@hooks/useLocalize';
2727
import useOnyx from '@hooks/useOnyx';
2828
import usePolicy from '@hooks/usePolicy';
29+
import useReportIsArchived from '@hooks/useReportIsArchived';
2930
import useResponsiveLayout from '@hooks/useResponsiveLayout';
3031
import useSubscriptionPlan from '@hooks/useSubscriptionPlan';
3132
import useTheme from '@hooks/useTheme';
@@ -133,7 +134,8 @@ function HeaderView({report, parentReportAction, onNavigationMenuButtonClicked,
133134
// Use sorted display names for the title for group chats on native small screen widths
134135
const title = getReportName(reportHeaderData, policy, parentReportAction, personalDetails, invoiceReceiverPolicy);
135136
const subtitle = getChatRoomSubtitle(reportHeaderData);
136-
const parentNavigationSubtitleData = getParentNavigationSubtitle(reportHeaderData);
137+
const isReportHeaderDataArchived = useReportIsArchived(reportHeaderData?.reportID);
138+
const parentNavigationSubtitleData = getParentNavigationSubtitle(reportHeaderData, isReportHeaderDataArchived);
137139
const reportDescription = Parser.htmlToText(getReportDescription(report));
138140
const policyName = getPolicyName({report, returnEmptyIfNotFound: true});
139141
const policyDescription = getPolicyDescriptionText(policy);

tests/unit/ReportUtilsTest.ts

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@ import {
4444
getInvoiceChatByParticipants,
4545
getMoneyReportPreviewName,
4646
getMostRecentlyVisitedReport,
47+
getParentNavigationSubtitle,
4748
getParticipantsList,
4849
getPolicyExpenseChat,
4950
getReasonAndReportActionThatRequiresAttention,
@@ -921,6 +922,48 @@ describe('ReportUtils', () => {
921922
});
922923
});
923924

925+
describe('getParentNavigationSubtitle', () => {
926+
const baseArchivedPolicyExpenseChat = {
927+
reportID: '2',
928+
lastReadTime: '2024-02-01 04:56:47.233',
929+
parentReportActionID: '1',
930+
parentReportID: '1',
931+
reportName: 'Base Report',
932+
type: CONST.REPORT.TYPE.INVOICE,
933+
};
934+
935+
const reports: Report[] = [
936+
{
937+
reportID: '1',
938+
lastReadTime: '2024-02-01 04:56:47.233',
939+
reportName: 'Report',
940+
policyName: 'A workspace',
941+
invoiceReceiver: {type: CONST.REPORT.INVOICE_RECEIVER_TYPE.INDIVIDUAL, accountID: 1},
942+
},
943+
baseArchivedPolicyExpenseChat,
944+
];
945+
946+
beforeAll(() => {
947+
const reportCollectionDataSet = toCollectionDataSet(ONYXKEYS.COLLECTION.REPORT, reports, (report) => report.reportID);
948+
Onyx.multiSet({
949+
...reportCollectionDataSet,
950+
});
951+
return waitForBatchedUpdates();
952+
});
953+
954+
it('should return the correct parent navigation subtitle for the archived invoice report', () => {
955+
const actual = getParentNavigationSubtitle(baseArchivedPolicyExpenseChat, true);
956+
const normalizedActual = {...actual, reportName: actual.reportName?.replace(/\u00A0/g, ' ')};
957+
expect(normalizedActual).toEqual({reportName: 'A workspace & Ragnar Lothbrok (archived)'});
958+
});
959+
960+
it('should return the correct parent navigation subtitle for the non archived invoice report', () => {
961+
const actual = getParentNavigationSubtitle(baseArchivedPolicyExpenseChat, false);
962+
const normalizedActual = {...actual, reportName: actual.reportName?.replace(/\u00A0/g, ' ')};
963+
expect(normalizedActual).toEqual({reportName: 'A workspace & Ragnar Lothbrok'});
964+
});
965+
});
966+
924967
describe('requiresAttentionFromCurrentUser', () => {
925968
afterEach(async () => {
926969
await Onyx.clear();

0 commit comments

Comments
 (0)