Skip to content

Commit 7ff35ce

Browse files
committed
Merge branch 'claude-addLicenseTextToAboutPage' of github.com:Expensify/App into claude-addLicenseTextToAboutPage
2 parents a331368 + 7aa57a7 commit 7ff35ce

9 files changed

Lines changed: 2128 additions & 1577 deletions

File tree

package-lock.json

Lines changed: 2093 additions & 1538 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/components/AvatarWithDisplayName.tsx

Lines changed: 3 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -14,13 +14,13 @@ import useTheme from '@hooks/useTheme';
1414
import useThemeStyles from '@hooks/useThemeStyles';
1515
import Navigation from '@libs/Navigation/Navigation';
1616
import {getPersonalDetailsForAccountIDs} from '@libs/OptionsListUtils';
17+
import {getReportName} from '@libs/ReportNameUtils';
1718
import type {DisplayNameWithTooltips} from '@libs/ReportUtils';
1819
import {
1920
canEditReportTitle,
2021
getChatRoomSubtitle,
2122
getDisplayNamesWithTooltips,
2223
getParentNavigationSubtitle,
23-
getReportName,
2424
getReportStatusColorStyle,
2525
getReportStatusTranslation,
2626
isChatThread,
@@ -193,17 +193,10 @@ function AvatarWithDisplayName({
193193
// We need to use isSmallScreenWidth instead of shouldUseNarrowLayout to display the edit button only on large screens
194194
// eslint-disable-next-line rulesdir/prefer-shouldUseNarrowLayout-instead-of-isSmallScreenWidth
195195
const {isSmallScreenWidth} = useResponsiveLayout();
196-
const [parentReport] = useOnyx(`${ONYXKEYS.COLLECTION.REPORT}${report?.parentReportID}`);
197-
const [invoiceReceiverPolicy] = useOnyx(
198-
`${ONYXKEYS.COLLECTION.POLICY}${parentReport?.invoiceReceiver && 'policyID' in parentReport.invoiceReceiver ? parentReport.invoiceReceiver.policyID : undefined}`,
199-
{},
200-
);
196+
201197
const reportAttributes = useReportAttributes();
202-
const parentReportActionParam = report?.parentReportActionID ? parentReportActions?.[report.parentReportActionID] : undefined;
203198
const isReportArchived = useReportIsArchived(report?.reportID);
204-
// This will be fixed as part of https://github.com/Expensify/Expensify/issues/507850
205-
// eslint-disable-next-line @typescript-eslint/no-deprecated
206-
const title = getReportName({report, parentReportActionParam, personalDetails, invoiceReceiverPolicy, reportAttributes, isReportArchived});
199+
const title = getReportName(report, reportAttributes);
207200
const isParentReportArchived = useReportIsArchived(report?.parentReportID);
208201
const subtitle = getChatRoomSubtitle(report, true, isReportArchived);
209202
const parentNavigationSubtitleData = getParentNavigationSubtitle(report, isParentReportArchived, reportAttributes);

src/components/ReportWelcomeText.tsx

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import useLocalize from '@hooks/useLocalize';
66
import useMappedPersonalDetails, {personalDetailMapper} from '@hooks/useMappedPersonalDetails';
77
import useOnyx from '@hooks/useOnyx';
88
import usePreferredPolicy from '@hooks/usePreferredPolicy';
9+
import useReportAttributes from '@hooks/useReportAttributes';
910
import useReportIsArchived from '@hooks/useReportIsArchived';
1011
import useThemeStyles from '@hooks/useThemeStyles';
1112
import Navigation from '@libs/Navigation/Navigation';
@@ -43,6 +44,7 @@ function ReportWelcomeText({report, policy}: ReportWelcomeTextProps) {
4344
const {translate, localeCompare} = useLocalize();
4445
const styles = useThemeStyles();
4546
const {environmentURL} = useEnvironment();
47+
const reportAttributes = useReportAttributes();
4648
const [personalDetails] = useMappedPersonalDetails(personalDetailMapper);
4749
const {isRestrictedToPreferredPolicy} = usePreferredPolicy();
4850
const isPolicyExpenseChat = isPolicyExpenseChatReportUtils(report);
@@ -79,7 +81,7 @@ function ReportWelcomeText({report, policy}: ReportWelcomeTextProps) {
7981
)}`,
8082
)
8183
.join(', ');
82-
const reportName = getReportName(report);
84+
const reportName = getReportName(report, reportAttributes);
8385
const shouldShowUsePlusButtonText =
8486
moneyRequestOptions.includes(CONST.IOU.TYPE.PAY) ||
8587
moneyRequestOptions.includes(CONST.IOU.TYPE.SUBMIT) ||

src/libs/ReportUtils.ts

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4467,7 +4467,7 @@ function isHoldCreator(transaction: OnyxEntry<Transaction>, reportID: string | u
44674467
* For title fields, its considered disabled if `deletable` prop is `true` (https://github.com/Expensify/App/issues/35043#issuecomment-1911275433)
44684468
* For non title fields, its considered disabled if:
44694469
* 1. The user is not admin of the report
4470-
* 2. Report is settled or it is closed
4470+
* 2. Report is settled, closed, approved, or submitted and already forwarded for review
44714471
*/
44724472
function isReportFieldDisabled(report: OnyxEntry<Report>, reportField: OnyxEntry<PolicyReportField>, policy: OnyxEntry<Policy>): boolean {
44734473
if (isInvoiceReport(report)) {
@@ -4478,7 +4478,8 @@ function isReportFieldDisabled(report: OnyxEntry<Report>, reportField: OnyxEntry
44784478
const isTitleField = isReportFieldOfTypeTitle(reportField);
44794479
const isAdmin = isPolicyAdmin(policy);
44804480
const isApproved = isReportApproved({report});
4481-
if (!isAdmin && (isReportSettled || isReportClosed || isApproved)) {
4481+
const isForwardedForSubmitter = isReportOwner(report) && isExpenseReport(report) && isProcessingReport(report) && !isAwaitingFirstLevelApproval(report);
4482+
if (!isAdmin && (isReportSettled || isReportClosed || isApproved || isForwardedForSubmitter)) {
44824483
return true;
44834484
}
44844485

src/pages/RoomInvitePage.tsx

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ import useCurrentUserPersonalDetails from '@hooks/useCurrentUserPersonalDetails'
1818
import useDebouncedState from '@hooks/useDebouncedState';
1919
import useLocalize from '@hooks/useLocalize';
2020
import useOnyx from '@hooks/useOnyx';
21+
import useReportAttributes from '@hooks/useReportAttributes';
2122
import useReportIsArchived from '@hooks/useReportIsArchived';
2223
import useThemeStyles from '@hooks/useThemeStyles';
2324
import {inviteToRoom, inviteToRoomAction, searchUserInServer} from '@libs/actions/Report';
@@ -37,8 +38,9 @@ import {addSMSDomainIfPhoneNumber, parsePhoneNumber} from '@libs/PhoneNumber';
3738
import type {MemberEmailsToAccountIDs} from '@libs/PolicyUtils';
3839
import {isPolicyEmployee as isPolicyEmployeeUtil} from '@libs/PolicyUtils';
3940
import {getReportAction} from '@libs/ReportActionsUtils';
41+
import {getReportName} from '@libs/ReportNameUtils';
4042
import type {OptionData} from '@libs/ReportUtils';
41-
import {getReportName, isHiddenForCurrentUser, isPolicyExpenseChat} from '@libs/ReportUtils';
43+
import {isHiddenForCurrentUser, isPolicyExpenseChat} from '@libs/ReportUtils';
4244
import CONST from '@src/CONST';
4345
import type {TranslationPaths} from '@src/languages/types';
4446
import ONYXKEYS from '@src/ONYXKEYS';
@@ -60,6 +62,7 @@ function RoomInvitePage({
6062
},
6163
}: RoomInvitePageProps) {
6264
const styles = useThemeStyles();
65+
const reportAttributes = useReportAttributes();
6366
const {translate, formatPhoneNumber} = useLocalize();
6467
const [userSearchPhrase] = useOnyx(ONYXKEYS.ROOM_MEMBERS_USER_SEARCH_PHRASE);
6568
const [countryCode = CONST.DEFAULT_COUNTRY_CODE] = useOnyx(ONYXKEYS.COUNTRY_CODE);
@@ -199,8 +202,7 @@ function RoomInvitePage({
199202
const shouldParserToHTML = reportAction?.actionName !== CONST.REPORT.ACTIONS.TYPE.ADD_COMMENT;
200203
const backRoute = reportID && (!isPolicyEmployee || isReportArchived ? ROUTES.REPORT_WITH_ID_DETAILS.getRoute(reportID, backTo) : ROUTES.ROOM_MEMBERS.getRoute(reportID, backTo));
201204

202-
// eslint-disable-next-line @typescript-eslint/no-deprecated
203-
const reportName = getReportName({report});
205+
const reportName = getReportName(report, reportAttributes);
204206

205207
const ancestors = useAncestors(report);
206208

src/pages/RoomMembersPage.tsx

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ import useLocalize from '@hooks/useLocalize';
2222
import useMobileSelectionMode from '@hooks/useMobileSelectionMode';
2323
import useNetwork from '@hooks/useNetwork';
2424
import useOnyx from '@hooks/useOnyx';
25+
import useReportAttributes from '@hooks/useReportAttributes';
2526
import useReportIsArchived from '@hooks/useReportIsArchived';
2627
import useResponsiveLayout from '@hooks/useResponsiveLayout';
2728
import useSearchBackPress from '@hooks/useSearchBackPress';
@@ -37,9 +38,9 @@ import Parser from '@libs/Parser';
3738
import {getDisplayNameOrDefault, getPersonalDetailsByIDs} from '@libs/PersonalDetailsUtils';
3839
import {isPolicyAdmin, isPolicyEmployee as isPolicyEmployeeUtils} from '@libs/PolicyUtils';
3940
import {getReportAction} from '@libs/ReportActionsUtils';
41+
import {getReportName} from '@libs/ReportNameUtils';
4042
import {
4143
getReportForHeader,
42-
getReportName,
4344
getReportPersonalDetailsParticipants,
4445
isChatThread,
4546
isDefaultRoom,
@@ -66,6 +67,7 @@ function RoomMembersPage({report, policy}: RoomMembersPageProps) {
6667
const reportAction = useMemo(() => getReportAction(report?.parentReportID, report?.parentReportActionID), [report?.parentReportID, report?.parentReportActionID]);
6768
const shouldParserToHTML = reportAction?.actionName !== CONST.REPORT.ACTIONS.TYPE.ADD_COMMENT;
6869
const styles = useThemeStyles();
70+
const reportAttributes = useReportAttributes();
6971
const [session] = useOnyx(ONYXKEYS.SESSION);
7072
const [reportMetadata] = useOnyx(`${ONYXKEYS.COLLECTION.REPORT_METADATA}${report?.reportID}`);
7173
const currentUserAccountID = Number(session?.accountID);
@@ -440,8 +442,9 @@ function RoomMembersPage({report, policy}: RoomMembersPageProps) {
440442
>
441443
<HeaderWithBackButton
442444
title={selectionModeHeader ? translate('common.selectMultiple') : translate('workspace.common.members')}
443-
// eslint-disable-next-line @typescript-eslint/no-deprecated
444-
subtitle={StringUtils.lineBreaksToSpaces(shouldParserToHTML ? Parser.htmlToText(getReportName({report: reportForSubtitle})) : getReportName({report: reportForSubtitle}))}
445+
subtitle={StringUtils.lineBreaksToSpaces(
446+
shouldParserToHTML ? Parser.htmlToText(getReportName(reportForSubtitle, reportAttributes)) : getReportName(reportForSubtitle, reportAttributes),
447+
)}
445448
onBackButtonPress={() => {
446449
if (isMobileSelectionModeEnabled) {
447450
setSelectedMembers([]);

src/pages/ShareCodePage.tsx

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,12 +15,14 @@ import useCurrentUserPersonalDetails from '@hooks/useCurrentUserPersonalDetails'
1515
import useEnvironment from '@hooks/useEnvironment';
1616
import {useMemoizedLazyExpensifyIcons} from '@hooks/useLazyAsset';
1717
import useLocalize from '@hooks/useLocalize';
18+
import useReportAttributes from '@hooks/useReportAttributes';
1819
import useReportIsArchived from '@hooks/useReportIsArchived';
1920
import useStyleUtils from '@hooks/useStyleUtils';
2021
import useThemeStyles from '@hooks/useThemeStyles';
2122
import Clipboard from '@libs/Clipboard';
2223
import Navigation from '@libs/Navigation/Navigation';
2324
import type {BackToParams} from '@libs/Navigation/types';
25+
import {getReportName} from '@libs/ReportNameUtils';
2426
import {
2527
getChatRoomSubtitle,
2628
getDefaultWorkspaceAvatar,
@@ -29,7 +31,6 @@ import {
2931
getParticipantsAccountIDsForDisplay,
3032
getPolicyName,
3133
getReportForHeader,
32-
getReportName,
3334
isExpenseReport,
3435
isMoneyRequestReport,
3536
} from '@libs/ReportUtils';
@@ -76,6 +77,7 @@ function ShareCodePage({report, policy, backTo}: ShareCodePageProps) {
7677
const qrCodeRef = useRef<QRShareWithDownloadHandle>(null);
7778

7879
const currentUserPersonalDetails = useCurrentUserPersonalDetails();
80+
const reportAttributes = useReportAttributes();
7981
const isParentReportArchived = useReportIsArchived(report?.parentReportID);
8082
const isReportArchived = useReportIsArchived(report?.reportID);
8183
const isReport = !!report?.reportID;
@@ -100,8 +102,7 @@ function ShareCodePage({report, policy, backTo}: ShareCodePageProps) {
100102

101103
const reportForTitle = useMemo(() => getReportForHeader(report), [report]);
102104

103-
// eslint-disable-next-line @typescript-eslint/no-deprecated
104-
const title = isReport ? getReportName({report: reportForTitle}) : (currentUserPersonalDetails.displayName ?? '');
105+
const title = isReport ? getReportName(reportForTitle, reportAttributes) : (currentUserPersonalDetails.displayName ?? '');
105106
const urlWithTrailingSlash = addTrailingForwardSlash(environmentURL);
106107
const url = isReport
107108
? `${urlWithTrailingSlash}${ROUTES.REPORT_WITH_ID.getRoute(report.reportID)}`

src/pages/TripChatNameEditPage.tsx

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,11 +7,12 @@ import ScreenWrapper from '@components/ScreenWrapper';
77
import TextInput from '@components/TextInput';
88
import useAutoFocusInput from '@hooks/useAutoFocusInput';
99
import useLocalize from '@hooks/useLocalize';
10+
import useReportAttributes from '@hooks/useReportAttributes';
1011
import useThemeStyles from '@hooks/useThemeStyles';
1112
import Navigation from '@libs/Navigation/Navigation';
1213
import type {PlatformStackScreenProps} from '@libs/Navigation/PlatformStackNavigation/types';
1314
import type {NewChatNavigatorParamList} from '@libs/Navigation/types';
14-
import {getReportName} from '@libs/ReportUtils';
15+
import {getReportName} from '@libs/ReportNameUtils';
1516
import StringUtils from '@libs/StringUtils';
1617
import {updateChatName} from '@userActions/Report';
1718
import CONST from '@src/CONST';
@@ -28,12 +29,12 @@ type TripChatNameEditPageProps = Partial<PlatformStackScreenProps<NewChatNavigat
2829

2930
function TripChatNameEditPage({report}: TripChatNameEditPageProps) {
3031
const styles = useThemeStyles();
32+
const reportAttributes = useReportAttributes();
3133
const {translate} = useLocalize();
3234
const {inputCallbackRef} = useAutoFocusInput();
3335

3436
const reportID = report?.reportID;
35-
// eslint-disable-next-line @typescript-eslint/no-deprecated
36-
const currentChatName = getReportName({report});
37+
const currentChatName = getReportName(report, reportAttributes);
3738

3839
const validate = (values: FormOnyxValues<typeof ONYXKEYS.FORMS.NEW_CHAT_NAME_FORM>): Errors => {
3940
const errors: Errors = {};

src/pages/media/AttachmentModalScreen/routes/report/ReportAvatarModalContent.tsx

Lines changed: 7 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,9 @@
11
import React, {useMemo} from 'react';
22
import useDefaultAvatars from '@hooks/useDefaultAvatars';
33
import useOnyx from '@hooks/useOnyx';
4-
import {getDefaultGroupAvatar, getPolicyName, getReportName, getWorkspaceIcon, isGroupChat, isThread, isUserCreatedPolicyRoom} from '@libs/ReportUtils';
4+
import useReportAttributes from '@hooks/useReportAttributes';
5+
import {getReportName} from '@libs/ReportNameUtils';
6+
import {getDefaultGroupAvatar, getPolicyName, getWorkspaceIcon, isGroupChat, isThread, isUserCreatedPolicyRoom} from '@libs/ReportUtils';
57
import {getFullSizeAvatar} from '@libs/UserAvatarUtils';
68
import type {AttachmentModalBaseContentProps} from '@pages/media/AttachmentModalScreen/AttachmentModalBaseContent/types';
79
import AttachmentModalContainer from '@pages/media/AttachmentModalScreen/AttachmentModalContainer';
@@ -17,29 +19,20 @@ function ReportAvatarModalContent({navigation, route}: AttachmentModalScreenProp
1719
const [report] = useOnyx(`${ONYXKEYS.COLLECTION.REPORT}${reportID}`);
1820
const [policy] = useOnyx(`${ONYXKEYS.COLLECTION.POLICY}${policyID}`);
1921
const [isLoadingApp = true] = useOnyx(ONYXKEYS.IS_LOADING_APP);
22+
const reportAttributes = useReportAttributes();
2023

2124
const attachment: AttachmentModalBaseContentProps = useMemo(() => {
2225
if (isGroupChat(report) && !isThread(report)) {
2326
return {
2427
source: report?.avatarUrl ? getFullSizeAvatar({avatarSource: report.avatarUrl, defaultAvatars}) : getDefaultGroupAvatar(report?.reportID),
25-
// eslint-disable-next-line @typescript-eslint/no-deprecated
26-
headerTitle: getReportName({report}),
28+
headerTitle: getReportName(report, reportAttributes),
2729
isWorkspaceAvatar: false,
2830
};
2931
}
3032
if (isUserCreatedPolicyRoom(report) && report?.avatarUrl) {
3133
return {
3234
source: getFullSizeAvatar({avatarSource: report.avatarUrl, defaultAvatars}),
33-
// eslint-disable-next-line @typescript-eslint/no-deprecated
34-
headerTitle: getReportName({report}),
35-
isWorkspaceAvatar: false,
36-
};
37-
}
38-
if (isUserCreatedPolicyRoom(report) && report?.avatarUrl) {
39-
return {
40-
source: getFullSizeAvatar({avatarSource: report.avatarUrl, defaultAvatars}),
41-
// eslint-disable-next-line @typescript-eslint/no-deprecated
42-
headerTitle: getReportName({report}),
35+
headerTitle: getReportName(report, reportAttributes),
4336
isWorkspaceAvatar: false,
4437
};
4538
}
@@ -51,7 +44,7 @@ function ReportAvatarModalContent({navigation, route}: AttachmentModalScreenProp
5144
originalFileName: policy?.originalFileName ?? policy?.id ?? report?.policyID,
5245
isWorkspaceAvatar: true,
5346
};
54-
}, [policy, report, defaultAvatars]);
47+
}, [policy, report, defaultAvatars, reportAttributes]);
5548

5649
const onDownloadAttachment = useDownloadAttachment();
5750

0 commit comments

Comments
 (0)