Skip to content

Commit 685df71

Browse files
committed
fix: [Translation Migration] Fix split or incomplete translations in reportActionsView
1 parent a15e21d commit 685df71

File tree

18 files changed

+106
-61
lines changed

18 files changed

+106
-61
lines changed

cspell.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,7 @@
5050
"asar",
5151
"ASPAC",
5252
"assetlinks",
53+
"accountid",
5354
"attributes.accountid",
5455
"attributes.reportid",
5556
"authorised",

src/components/HTMLEngineProvider/BaseHTMLEngineProvider.tsx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -145,6 +145,7 @@ function BaseHTMLEngineProvider({textSelectable = false, children, enableExperim
145145
'mention-report': HTMLElementModel.fromCustomModel({tagName: 'mention-report', contentModel: HTMLContentModel.textual}),
146146
'mention-here': HTMLElementModel.fromCustomModel({tagName: 'mention-here', contentModel: HTMLContentModel.textual}),
147147
'mention-short': HTMLElementModel.fromCustomModel({tagName: 'mention-short', contentModel: HTMLContentModel.textual}),
148+
'user-details': HTMLElementModel.fromCustomModel({tagName: 'user-details', contentModel: HTMLContentModel.textual}),
148149
'copy-text': HTMLElementModel.fromCustomModel({tagName: 'copy-text', contentModel: HTMLContentModel.textual}),
149150
'concierge-link': HTMLElementModel.fromCustomModel({tagName: 'concierge-link', contentModel: HTMLContentModel.textual}),
150151
'next-step': HTMLElementModel.fromCustomModel({
Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
import React from 'react';
2+
import type {CustomRendererProps, TPhrasing, TText} from 'react-native-render-html';
3+
import {TNodeChildrenRenderer} from 'react-native-render-html';
4+
import Text from '@components/Text';
5+
import UserDetailsTooltip from '@components/UserDetailsTooltip';
6+
import useThemeStyles from '@hooks/useThemeStyles';
7+
import Navigation from '@libs/Navigation/Navigation';
8+
import {isOptimisticPersonalDetail} from '@libs/ReportUtils';
9+
import CONST from '@src/CONST';
10+
import ROUTES from '@src/ROUTES';
11+
12+
type UserDetailsRendererProps = CustomRendererProps<TText | TPhrasing>;
13+
14+
function UserDetailsRenderer({tnode, ...defaultRendererProps}: UserDetailsRendererProps) {
15+
const styles = useThemeStyles();
16+
const accountID = tnode.attributes.accountid ? parseInt(tnode.attributes.accountid, 10) : undefined;
17+
18+
if (!accountID) {
19+
// Fallback: render without tooltip if no accountID
20+
return <TNodeChildrenRenderer tnode={tnode} />;
21+
}
22+
23+
const isOptimistic = isOptimisticPersonalDetail(accountID);
24+
25+
return (
26+
<UserDetailsTooltip accountID={accountID}>
27+
{isOptimistic ? (
28+
<Text
29+
// eslint-disable-next-line react/jsx-props-no-spreading
30+
{...defaultRendererProps}
31+
style={[styles.textStrong]}
32+
>
33+
<TNodeChildrenRenderer tnode={tnode} />
34+
</Text>
35+
) : (
36+
<Text
37+
// eslint-disable-next-line react/jsx-props-no-spreading
38+
{...defaultRendererProps}
39+
style={[styles.textStrong]}
40+
onPress={() => Navigation.navigate(ROUTES.PROFILE.getRoute(accountID, Navigation.getActiveRoute()))}
41+
suppressHighlighting
42+
role={CONST.ROLE.LINK}
43+
>
44+
<TNodeChildrenRenderer tnode={tnode} />
45+
</Text>
46+
)}
47+
</UserDetailsTooltip>
48+
);
49+
}
50+
51+
UserDetailsRenderer.displayName = 'UserDetailsRenderer';
52+
53+
export default UserDetailsRenderer;

src/components/HTMLEngineProvider/HTMLRenderers/index.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ import PreRenderer from './PreRenderer';
1515
import RBRRenderer from './RBRRenderer';
1616
import ShortMentionRenderer from './ShortMentionRenderer';
1717
import TaskTitleRenderer from './TaskTitleRenderer';
18+
import UserDetailsRenderer from './UserDetailsRenderer';
1819
import VideoRenderer from './VideoRenderer';
1920

2021
/**
@@ -37,6 +38,7 @@ const HTMLEngineProviderComponentList: CustomTagRendererRecord = {
3738
'mention-report': MentionReportRenderer,
3839
'mention-here': MentionHereRenderer,
3940
'mention-short': ShortMentionRenderer,
41+
'user-details': UserDetailsRenderer,
4042
'copy-text': CopyTextRenderer,
4143
emoji: EmojiRenderer,
4244
'next-step-email': NextStepEmailRenderer,

src/components/ReportWelcomeText.tsx

Lines changed: 4 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,6 @@ import {
1818
isChatRoom as isChatRoomReportUtils,
1919
isConciergeChatReport,
2020
isInvoiceRoom as isInvoiceRoomReportUtils,
21-
isOptimisticPersonalDetail,
2221
isPolicyExpenseChat as isPolicyExpenseChatReportUtils,
2322
isSelfDM as isSelfDMReportUtils,
2423
isSystemChat as isSystemChatReportUtils,
@@ -32,7 +31,6 @@ import ROUTES from '@src/ROUTES';
3231
import type {OnyxInputOrEntry, PersonalDetails, PersonalDetailsList, Policy, Report} from '@src/types/onyx';
3332
import RenderHTML from './RenderHTML';
3433
import Text from './Text';
35-
import UserDetailsTooltip from './UserDetailsTooltip';
3634

3735
type ReportWelcomeTextProps = {
3836
/** The report currently being looked at */
@@ -159,32 +157,11 @@ function ReportWelcomeText({report, policy}: ReportWelcomeTextProps) {
159157
<Text>{welcomeMessage.messageText}</Text>
160158
</Text>
161159
)}
162-
{isDefault && displayNamesWithTooltips.length > 0 && (
160+
{isDefault && !!welcomeMessage.messageHtml && (
163161
<Text>
164-
<Text>{welcomeMessage.phrase1}</Text>
165-
{displayNamesWithTooltips.map(({displayName, accountID}, index) => (
166-
// eslint-disable-next-line react/no-array-index-key
167-
<Text key={`${displayName}${index}`}>
168-
<UserDetailsTooltip accountID={accountID}>
169-
{isOptimisticPersonalDetail(accountID) ? (
170-
<Text style={[styles.textStrong]}>{displayName}</Text>
171-
) : (
172-
<Text
173-
style={[styles.textStrong]}
174-
onPress={() => Navigation.navigate(ROUTES.PROFILE.getRoute(accountID, Navigation.getActiveRoute()))}
175-
suppressHighlighting
176-
>
177-
{displayName}
178-
</Text>
179-
)}
180-
</UserDetailsTooltip>
181-
{index === displayNamesWithTooltips.length - 1 && <Text>.</Text>}
182-
{index === displayNamesWithTooltips.length - 2 && <Text>{`${displayNamesWithTooltips.length > 2 ? ',' : ''} ${translate('common.and')} `}</Text>}
183-
{index < displayNamesWithTooltips.length - 2 && <Text>, </Text>}
184-
</Text>
185-
))}
186-
{shouldShowUsePlusButtonText && <Text>{translate('reportActionsView.usePlusButton', {additionalText})}</Text>}
187-
{isConciergeChatReport(report) && <Text>{translate('reportActionsView.askConcierge')}</Text>}
162+
<RenderHTML html={welcomeMessage.messageHtml} />
163+
{shouldShowUsePlusButtonText && <Text>{` ${translate('reportActionsView.usePlusButton', {additionalText}).trim()}`}</Text>}
164+
{isConciergeChatReport(report) && <Text>{` ${translate('reportActionsView.askConcierge').trim()}`}</Text>}
188165
</Text>
189166
)}
190167
</View>

src/languages/de.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@ import type {
3939
BeginningOfChatHistoryAnnounceRoomParams,
4040
BeginningOfChatHistoryDomainRoomParams,
4141
BeginningOfChatHistoryInvoiceRoomParams,
42+
BeginningOfChatHistoryParams,
4243
BeginningOfChatHistoryPolicyExpenseChatParams,
4344
BeginningOfChatHistoryUserRoomParams,
4445
BillableDefaultDescriptionParams,
@@ -934,7 +935,7 @@ const translations: TranslationDeepObject<typeof en> = {
934935
`Dieser Chatraum ist für alles, was mit <strong><a class="no-style-link" href="${reportDetailsLink}">${reportName}</a></strong> zu tun hat.`,
935936
beginningOfChatHistoryInvoiceRoom: ({invoicePayer, invoiceReceiver}: BeginningOfChatHistoryInvoiceRoomParams) =>
936937
`Dieser Chat ist für Rechnungen zwischen <strong>${invoicePayer}</strong> und <strong>${invoiceReceiver}</strong>. Verwenden Sie die Schaltfläche +, um eine Rechnung zu senden.`,
937-
beginningOfChatHistory: 'Dieser Chat ist mit',
938+
beginningOfChatHistory: ({users}: BeginningOfChatHistoryParams) => `Dieser Chat ist mit ${users}.`,
938939
beginningOfChatHistoryPolicyExpenseChat: ({workspaceName, submitterDisplayName}: BeginningOfChatHistoryPolicyExpenseChatParams) =>
939940
`Hier wird <strong>${submitterDisplayName}</strong> die Ausgaben an <strong>${workspaceName}</strong> übermitteln. Verwenden Sie einfach die Schaltfläche +.`,
940941
beginningOfChatHistorySelfDM: 'Dies ist Ihr persönlicher Bereich. Nutzen Sie ihn für Notizen, Aufgaben, Entwürfe und Erinnerungen.',

src/languages/en.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ import type {
2828
BeginningOfChatHistoryAnnounceRoomParams,
2929
BeginningOfChatHistoryDomainRoomParams,
3030
BeginningOfChatHistoryInvoiceRoomParams,
31+
BeginningOfChatHistoryParams,
3132
BeginningOfChatHistoryPolicyExpenseChatParams,
3233
BeginningOfChatHistoryUserRoomParams,
3334
BillableDefaultDescriptionParams,
@@ -923,7 +924,7 @@ const translations = {
923924
`This chat room is for anything <strong><a class="no-style-link" href="${reportDetailsLink}">${reportName}</a></strong> related.`,
924925
beginningOfChatHistoryInvoiceRoom: ({invoicePayer, invoiceReceiver}: BeginningOfChatHistoryInvoiceRoomParams) =>
925926
`This chat is for invoices between <strong>${invoicePayer}</strong> and <strong>${invoiceReceiver}</strong>. Use the + button to send an invoice.`,
926-
beginningOfChatHistory: 'This chat is with ',
927+
beginningOfChatHistory: ({users}: BeginningOfChatHistoryParams) => `This chat is with ${users}.`,
927928
beginningOfChatHistoryPolicyExpenseChat: ({workspaceName, submitterDisplayName}: BeginningOfChatHistoryPolicyExpenseChatParams) =>
928929
`This is where <strong>${submitterDisplayName}</strong> will submit expenses to <strong>${workspaceName}</strong>. Just use the + button.`,
929930
beginningOfChatHistorySelfDM: 'This is your personal space. Use it for notes, tasks, drafts, and reminders.',

src/languages/es.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import {CONST as COMMON_CONST} from 'expensify-common';
22
import CONST from '@src/CONST';
33
import type en from './en';
4-
import type {ViolationsRterParams} from './params';
4+
import type {BeginningOfChatHistoryParams, ViolationsRterParams} from './params';
55
import type {TranslationDeepObject} from './types';
66

77
/* eslint-disable max-len */
@@ -605,7 +605,7 @@ const translations: TranslationDeepObject<typeof en> = {
605605
`Esta sala de chat es para cualquier cosa relacionada con <strong><a class="no-style-link" href="${reportDetailsLink}">${reportName}</a></strong>.`,
606606
beginningOfChatHistoryInvoiceRoom: ({invoicePayer, invoiceReceiver}) =>
607607
`Este chat es para facturas entre <strong>${invoicePayer}</strong> y <strong>${invoiceReceiver}</strong>. Usa el botón + para enviar una factura.`,
608-
beginningOfChatHistory: 'Este chat es con ',
608+
beginningOfChatHistory: ({users}: BeginningOfChatHistoryParams) => `Este chat es con ${users}.`,
609609
beginningOfChatHistoryPolicyExpenseChat: ({workspaceName, submitterDisplayName}) =>
610610
`Aquí es donde <strong>${submitterDisplayName}</strong> enviará los gastos al espacio de trabajo <strong>${workspaceName}</strong>. Solo usa el botón +.`,
611611
beginningOfChatHistorySelfDM: 'Este es tu espacio personal. Úsalo para notas, tareas, borradores y recordatorios.',

src/languages/fr.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@ import type {
3939
BeginningOfChatHistoryAnnounceRoomParams,
4040
BeginningOfChatHistoryDomainRoomParams,
4141
BeginningOfChatHistoryInvoiceRoomParams,
42+
BeginningOfChatHistoryParams,
4243
BeginningOfChatHistoryPolicyExpenseChatParams,
4344
BeginningOfChatHistoryUserRoomParams,
4445
BillableDefaultDescriptionParams,
@@ -936,7 +937,7 @@ const translations: TranslationDeepObject<typeof en> = {
936937
`Ce salon de discussion est destiné à tout ce qui concerne <strong><a class="no-style-link" href="${reportDetailsLink}">${reportName}</a></strong>.`,
937938
beginningOfChatHistoryInvoiceRoom: ({invoicePayer, invoiceReceiver}: BeginningOfChatHistoryInvoiceRoomParams) =>
938939
`Ce chat concerne les factures entre <strong>${invoicePayer}</strong> et <strong>${invoiceReceiver}</strong>. Utilisez le bouton + pour envoyer une facture.`,
939-
beginningOfChatHistory: 'Ce chat est avec',
940+
beginningOfChatHistory: ({users}: BeginningOfChatHistoryParams) => `Ce chat est avec ${users}.`,
940941
beginningOfChatHistoryPolicyExpenseChat: ({workspaceName, submitterDisplayName}: BeginningOfChatHistoryPolicyExpenseChatParams) =>
941942
`C'est ici que <strong>${submitterDisplayName}</strong> soumettra ses dépenses à <strong>${workspaceName}</strong>. Il suffit d'utiliser le bouton +.`,
942943
beginningOfChatHistorySelfDM: "C'est votre espace personnel. Utilisez-le pour des notes, des tâches, des brouillons et des rappels.",

src/languages/it.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@ import type {
3939
BeginningOfChatHistoryAnnounceRoomParams,
4040
BeginningOfChatHistoryDomainRoomParams,
4141
BeginningOfChatHistoryInvoiceRoomParams,
42+
BeginningOfChatHistoryParams,
4243
BeginningOfChatHistoryPolicyExpenseChatParams,
4344
BeginningOfChatHistoryUserRoomParams,
4445
BillableDefaultDescriptionParams,
@@ -933,7 +934,7 @@ const translations: TranslationDeepObject<typeof en> = {
933934
`Questa chat è per tutto ciò che riguarda <strong><a class="no-style-link" href="${reportDetailsLink}">${reportName}</a></strong>.`,
934935
beginningOfChatHistoryInvoiceRoom: ({invoicePayer, invoiceReceiver}: BeginningOfChatHistoryInvoiceRoomParams) =>
935936
`Questa chat è per le fatture tra <strong>${invoicePayer}</strong> e <strong>${invoiceReceiver}</strong>. Utilizzare il pulsante + per inviare una fattura.`,
936-
beginningOfChatHistory: 'Questa chat è con',
937+
beginningOfChatHistory: ({users}: BeginningOfChatHistoryParams) => `Questa chat è con ${users}.`,
937938
beginningOfChatHistoryPolicyExpenseChat: ({workspaceName, submitterDisplayName}: BeginningOfChatHistoryPolicyExpenseChatParams) =>
938939
`È qui che <strong>${submitterDisplayName}</strong> presenterà le spese a <strong>${workspaceName}</strong>. Basta usare il pulsante +.`,
939940
beginningOfChatHistorySelfDM: 'Questo è il tuo spazio personale. Usalo per appunti, compiti, bozze e promemoria.',

0 commit comments

Comments
 (0)