Skip to content
Merged
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
2 changes: 1 addition & 1 deletion src/components/AvatarWithDisplayName.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -201,7 +201,7 @@ function AvatarWithDisplayName({
const isReportArchived = useReportIsArchived(report?.reportID);
const title = getReportName(report, reportAttributes);
const isParentReportArchived = useReportIsArchived(report?.parentReportID);
const subtitle = getChatRoomSubtitle(report, policy, conciergeReportID, true, isReportArchived);
const subtitle = getChatRoomSubtitle(report, policy, conciergeReportID, translate, true, isReportArchived);
const parentNavigationSubtitleData = getParentNavigationSubtitle(report, policy, conciergeReportID, isParentReportArchived, reportAttributes);
const isMoneyRequestOrReport = isMoneyRequestReport(report) || isMoneyRequest(report) || isTrackExpenseReport(report) || isInvoiceReport(report);
const ownerPersonalDetails = getPersonalDetailsForAccountIDs(report?.ownerAccountID ? [report.ownerAccountID] : [], personalDetails);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -242,7 +242,7 @@ function MoneyRequestReportPreviewContent({

let payerOrApproverName;
if (isPolicyExpenseChat || isTripRoom) {
payerOrApproverName = getPolicyName({report: chatReport, policy});
payerOrApproverName = getPolicyName({report: chatReport, policy, unavailableTranslation: translate('workspace.common.unavailable')});
} else if (isInvoiceRoom) {
payerOrApproverName = getInvoicePayerName(chatReport, invoiceReceiverPolicy, invoiceReceiverPersonalDetail);
} else {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ import React from 'react';
import {View} from 'react-native';
import Avatar from '@components/Avatar';
import TextWithTooltip from '@components/TextWithTooltip';
import useLocalize from '@hooks/useLocalize';
import useThemeStyles from '@hooks/useThemeStyles';
import {getPolicyName, getWorkspaceIcon} from '@libs/ReportUtils';
import CONST from '@src/CONST';
Expand All @@ -13,9 +14,10 @@ type WorkspaceCellProps = {
};

function WorkspaceCell({policyID, report}: WorkspaceCellProps) {
const {translate} = useLocalize();
const styles = useThemeStyles();
const icon = getWorkspaceIcon(report);
const name = getPolicyName({report});
const name = getPolicyName({report, unavailableTranslation: translate('workspace.common.unavailable')});

if (report?.type !== CONST.REPORT.TYPE.EXPENSE && report?.type !== CONST.REPORT.TYPE.INVOICE) {
return null;
Expand Down
4 changes: 2 additions & 2 deletions src/libs/OptionsListUtils/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -1197,11 +1197,11 @@ function createOption({

// eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing -- below is a boolean expression
hasMultipleParticipants = personalDetailList.length > 1 || result.isChatRoom || result.isPolicyExpenseChat || reportUtilsIsGroupChat(report);
subtitle = getChatRoomSubtitle(report, policy, conciergeReportID, true, result.private_isArchived);
const translateFn = translate ?? translateLocal;
subtitle = getChatRoomSubtitle(report, policy, conciergeReportID, translateFn, true, result.private_isArchived);

// If displaying chat preview line is needed, let's overwrite the default alternate text
const lastActorDetails = personalDetails?.[report?.lastActorAccountID ?? String(CONST.DEFAULT_NUMBER_ID)] ?? {};
const translateFn = translate ?? translateLocal;
result.lastMessageText = getLastMessageTextForReport({
translate: translateFn,
report,
Expand Down
13 changes: 7 additions & 6 deletions src/libs/ReportUtils.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5954,20 +5954,21 @@ function getChatRoomSubtitle(
report: OnyxEntry<Report>,
policy: OnyxEntry<Policy>,
conciergeReportID: string | undefined,
translate: LocalizedTranslate,
isPolicyNamePreferred = false,
isReportArchived = false,
): string | undefined {
if (isChatThread(report)) {
return '';
}
if (isSelfDM(report)) {
return translateLocal('reportActionsView.yourSpace');
return translate('reportActionsView.yourSpace');
}
if (isInvoiceRoom(report)) {
return translateLocal('workspace.common.invoices');
return translate('workspace.common.invoices');
}
if (isConciergeChatReport(report, conciergeReportID)) {
return translateLocal('reportActionsView.conciergeSupport');
return translate('reportActionsView.conciergeSupport');
}
if (!isDefaultRoom(report) && !isUserCreatedPolicyRoom(report) && !isPolicyExpenseChat(report)) {
return '';
Expand All @@ -5982,15 +5983,15 @@ function getChatRoomSubtitle(
const subtitle = submitsToAccountDetails?.displayName ?? submitsToAccountDetails?.login;

if (!subtitle || !isPolicyNamePreferred) {
return getPolicyName({report, policy});
return getPolicyName({report, policy, unavailableTranslation: translate('workspace.common.unavailable')});
}
return `${getReportSubtitlePrefix(report)}${translateLocal('iou.submitsTo', subtitle ?? '')}`;
return `${getReportSubtitlePrefix(report)}${translate('iou.submitsTo', subtitle ?? '')}`;
}

if (isReportArchived) {
return report?.oldPolicyName ?? '';
}
return getPolicyName({report, policy});
return getPolicyName({report, policy, unavailableTranslation: translate('workspace.common.unavailable')});
}

/**
Expand Down
2 changes: 1 addition & 1 deletion src/libs/SidebarUtils.ts
Original file line number Diff line number Diff line change
Expand Up @@ -935,7 +935,7 @@ function getOptionData({

const isExpense = isExpenseReport(report);
const hasMultipleParticipants = participantPersonalDetailList.length > 1 || result.isChatRoom || result.isPolicyExpenseChat || isExpense;
const subtitle = getChatRoomSubtitle(report, policy, conciergeReportID, false, isReportArchived);
const subtitle = getChatRoomSubtitle(report, policy, conciergeReportID, translate, false, isReportArchived);

const status = personalDetail?.status ?? '';

Expand Down
5 changes: 3 additions & 2 deletions src/libs/actions/Task.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import type {NullishDeep, OnyxEntry, OnyxUpdate} from 'react-native-onyx';
import Onyx from 'react-native-onyx';
import FallbackAvatar from '@assets/images/avatars/fallback-avatar.svg';
import type {LocaleContextProps} from '@components/LocaleContextProvider';
import type {LocaleContextProps, LocalizedTranslate} from '@components/LocaleContextProvider';
import * as API from '@libs/API';
import type {CancelTaskParams, CompleteTaskParams, CreateTaskParams, EditTaskAssigneeParams, EditTaskParams, ReopenTaskParams} from '@libs/API/parameters';
import {WRITE_COMMANDS} from '@libs/API/types';
Expand Down Expand Up @@ -1121,6 +1121,7 @@ function getShareDestination(
localeCompare: LocaleContextProps['localeCompare'],
policy: OnyxEntry<OnyxTypes.Policy>,
conciergeReportID: string | undefined,
translate: LocalizedTranslate,
reportAttributes?: OnyxTypes.ReportAttributesDerivedValue['reports'],
): ShareDestination {
const isOneOnOneChat = ReportUtils.isOneOnOneChat(report);
Expand All @@ -1143,7 +1144,7 @@ function getShareDestination(
const login = personalDetails?.[participantAccountID]?.login ?? '';
subtitle = LocalePhoneNumber.formatPhoneNumber(login || displayName);
} else {
subtitle = ReportUtils.getChatRoomSubtitle(report, policy, conciergeReportID, false, false) ?? '';
subtitle = ReportUtils.getChatRoomSubtitle(report, policy, conciergeReportID, translate) ?? '';
}
return {
icons: ReportUtils.getIcons(report, LocalePhoneNumber.formatPhoneNumber, personalDetails, FallbackAvatar),
Expand Down
4 changes: 2 additions & 2 deletions src/pages/DynamicReportDetailsPage.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -248,14 +248,14 @@ function DynamicReportDetailsPage({policy, report, route, reportMetadata, report
const ancestors = useAncestors(report);

const chatRoomSubtitle = useMemo(() => {
const subtitle = getChatRoomSubtitle(report, policy, conciergeReportID, false, isReportArchived);
const subtitle = getChatRoomSubtitle(report, policy, conciergeReportID, translate, false, isReportArchived);

if (subtitle) {
return subtitle;
}

return '';
}, [isReportArchived, report, policy, conciergeReportID]);
}, [isReportArchived, report, policy, conciergeReportID, translate]);

const isSystemChat = useMemo(() => isSystemChatUtil(report), [report]);
const isGroupChat = useMemo(() => isGroupChatUtil(report), [report]);
Expand Down
2 changes: 1 addition & 1 deletion src/pages/ShareCodePage.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -100,7 +100,7 @@ function ShareCodePage({report, policy, backTo}: ShareCodePageProps) {

return (
getParentNavigationSubtitle(report, policy, conciergeReportID, isParentReportArchived).workspaceName ??
getChatRoomSubtitle(report, policy, conciergeReportID, false, isReportArchived)
getChatRoomSubtitle(report, policy, conciergeReportID, translate, false, isReportArchived)
);
}

Expand Down
2 changes: 1 addition & 1 deletion src/pages/inbox/HeaderView.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -154,7 +154,7 @@ function HeaderView({onNavigationMenuButtonClicked, reportID}: HeaderViewProps)
const {accountID: currentUserAccountID} = useCurrentUserPersonalDetails();
// Use sorted display names for the title for group chats on native small screen widths
const title = getReportName(reportHeaderData, reportAttributes);
const subtitle = getChatRoomSubtitle(reportHeaderData, reportHeaderDataPolicy, conciergeReportID, false, isReportHeaderDataArchived);
const subtitle = getChatRoomSubtitle(reportHeaderData, reportHeaderDataPolicy, conciergeReportID, translate, false, isReportHeaderDataArchived);
// This is used to get the status badge for invoice report subtitle.
const statusTextForInvoiceReport = isParentInvoiceAndIsChatThread
? getReportStatusTranslation({stateNum: reportHeaderData?.stateNum, statusNum: reportHeaderData?.statusNum, translate})
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
import React, {useMemo} from 'react';
import useDefaultAvatars from '@hooks/useDefaultAvatars';
import useLocalize from '@hooks/useLocalize';
import useOnyx from '@hooks/useOnyx';
import useReportAttributes from '@hooks/useReportAttributes';
import {getReportName} from '@libs/ReportNameUtils';
Expand All @@ -15,6 +16,7 @@ import type SCREENS from '@src/SCREENS';
function ReportAvatarModalContent({navigation, route}: AttachmentModalScreenProps<typeof SCREENS.REPORT_AVATAR>) {
const {reportID, policyID} = route.params;

const {translate} = useLocalize();
const defaultAvatars = useDefaultAvatars();
const [report] = useOnyx(`${ONYXKEYS.COLLECTION.REPORT}${reportID}`);
const [policy] = useOnyx(`${ONYXKEYS.COLLECTION.POLICY}${policyID}`);
Expand All @@ -39,12 +41,12 @@ function ReportAvatarModalContent({navigation, route}: AttachmentModalScreenProp

return {
source: getFullSizeAvatar({avatarSource: getWorkspaceIcon(report, policy).source, defaultAvatars}),
headerTitle: getPolicyName({report, policy}),
headerTitle: getPolicyName({report, policy, unavailableTranslation: translate('workspace.common.unavailable')}),
// In the case of default workspace avatar, originalFileName prop takes policyID as value to get the color of the avatar
originalFileName: policy?.originalFileName ?? policy?.id ?? report?.policyID,
isWorkspaceAvatar: true,
};
}, [policy, report, defaultAvatars, reportAttributes]);
}, [policy, report, defaultAvatars, reportAttributes, translate]);

const onDownloadAttachment = useDownloadAttachment();

Expand Down
2 changes: 1 addition & 1 deletion src/pages/tasks/NewTaskPage.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,7 @@ function NewTaskPage({route}: NewTaskPageProps) {
localeCompare,
formatPhoneNumber,
);
const shareDestination = task?.shareDestination ? getShareDestination(parentReport, personalDetails, localeCompare, policy, conciergeReportID, reportAttributes) : undefined;
const shareDestination = task?.shareDestination ? getShareDestination(parentReport, personalDetails, localeCompare, policy, conciergeReportID, translate, reportAttributes) : undefined;
const ancestors = useAncestors(parentReport);
const taskKey = `${task?.assignee}|${task?.assigneeAccountID}|${task?.description}|${task?.parentReportID}|${task?.shareDestination}|${task?.title}`;
const [error, setError] = useState<{message: string; taskKey: string}>({message: '', taskKey: ''});
Expand Down
8 changes: 4 additions & 4 deletions tests/actions/TaskTest.ts
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ import type {OnyxData} from '@src/types/onyx/Request';
import createRandomPolicy from '../utils/collections/policies';
import createMock from '../utils/createMock';
import {getFakeReport, getFakeReportAction} from '../utils/LHNTestUtils';
import {getGlobalFetchMock} from '../utils/TestHelper';
import {getGlobalFetchMock, translateLocal} from '../utils/TestHelper';
import waitForBatchedUpdates from '../utils/waitForBatchedUpdates';
import waitForBatchedUpdatesWithAct from '../utils/waitForBatchedUpdatesWithAct';

Expand Down Expand Up @@ -1695,7 +1695,7 @@ describe('actions/Task', () => {
const report = getFakeReport([CURRENT_USER_ACCOUNT_ID, OTHER_ACCOUNT_ID]);

// When the share destination is built
const result = getShareDestination(report, personalDetails, localeCompare, undefined, undefined);
const result = getShareDestination(report, personalDetails, localeCompare, undefined, undefined, translateLocal);

// Then the subtitle is the other participant's login and the display name matches getReportName
expect(result.subtitle).toBe(OTHER_LOGIN);
Expand All @@ -1712,7 +1712,7 @@ describe('actions/Task', () => {
};

// When the share destination is built
const result = getShareDestination(report, personalDetails, localeCompare, policy, undefined);
const result = getShareDestination(report, personalDetails, localeCompare, policy, undefined, translateLocal);

// Then the subtitle falls back to the workspace name resolved by getChatRoomSubtitle
expect(result.subtitle).toBe(policy.name);
Expand All @@ -1724,7 +1724,7 @@ describe('actions/Task', () => {
const report = getFakeReport([CURRENT_USER_ACCOUNT_ID, OTHER_ACCOUNT_ID]);

// When the share destination is built
const result = getShareDestination(report, personalDetails, localeCompare, undefined, undefined);
const result = getShareDestination(report, personalDetails, localeCompare, undefined, undefined, translateLocal);

// Then it includes the icons and tooltip metadata used to render the destination
expect(Array.isArray(result.icons)).toBe(true);
Expand Down
Loading
Loading