Add 'Don't show this again' checkbox for empty reports dialog#75442
Add 'Don't show this again' checkbox for empty reports dialog#75442puneetlath merged 14 commits intoExpensify:mainfrom
Conversation
|
Hey, I noticed you changed If you want to automatically generate translations for other locales, an Expensify employee will have to:
Alternatively, if you are an external contributor, you can run the translation script locally with your own OpenAI API key. To learn more, try running: npx ts-node ./scripts/generateTranslations.ts --helpTypically, you'd want to translate only what you changed by running |
Codecov Report✅ Changes either increased or maintained existing code coverage, great job!
|
|
@hungvu193 Please copy/paste the Reviewer Checklist from here into a new comment on this PR and complete it. If you have the K2 extension, you can simply click: [this button] |
| <CheckboxWithLabel | ||
| accessibilityLabel={translate('report.newReport.emptyReportConfirmationDontShowAgain')} | ||
| label={translate('report.newReport.emptyReportConfirmationDontShowAgain')} | ||
| isChecked={shouldDismissEmptyReportsConfirmation} |
There was a problem hiding this comment.
❌ PERF-4 (docs)
The inline arrow function (value) => setShouldDismissEmptyReportsConfirmation(!!value) creates a new function reference on every render, causing unnecessary re-renders of the CheckboxWithLabel component.
Suggested fix: Extract this into a memoized callback:
const handleCheckboxChange = useCallback((value: boolean) => {
setShouldDismissEmptyReportsConfirmation(!!value);
}, []);
// Then in the prompt useMemo:
<CheckboxWithLabel
accessibilityLabel={translate('report.newReport.emptyReportConfirmationDontShowAgain')}
label={translate('report.newReport.emptyReportConfirmationDontShowAgain')}
isChecked={shouldDismissEmptyReportsConfirmation}
onInputChange={handleCheckboxChange}
/>| policyID: report?.policyID, | ||
| policyName: policy?.name ?? '', | ||
| onConfirm: () => selectOption(() => createNewReport(currentUserPersonalDetails, isASAPSubmitBetaEnabled, hasViolations, report?.policyID, true), true), | ||
| onConfirm: (shouldDismissEmptyReportsConfirmation) => |
There was a problem hiding this comment.
❌ PERF-4 (docs)
The inline arrow function (shouldDismissEmptyReportsConfirmation) => selectOption(...) creates a new function reference on every render, causing the useCreateEmptyReportConfirmation hook to potentially recreate its internal state unnecessarily.
Suggested fix: Memoize this callback using useCallback:
const handleConfirmCreateReport = useCallback(
(shouldDismissEmptyReportsConfirmation: boolean) => {
selectOption(
() => createNewReport(currentUserPersonalDetails, isASAPSubmitBetaEnabled, hasViolations, report?.policyID, true, shouldDismissEmptyReportsConfirmation),
true
);
},
[currentUserPersonalDetails, hasViolations, isASAPSubmitBetaEnabled, report?.policyID, selectOption]
);
// Then use it:
const {openCreateReportConfirmation, CreateReportConfirmationModal} = useCreateEmptyReportConfirmation({
policyID: report?.policyID,
policyName: policy?.name ?? '',
onConfirm: handleConfirmCreateReport,
});|
Typecheck issues will be fixed after someone runs the translations gen script. |
heyjennahay
left a comment
There was a problem hiding this comment.
No concern with product change
| reportID: optimisticReportID, | ||
| reportActionID, | ||
| reportPreviewReportActionID, | ||
| ...(shouldDismissEmptyReportsConfirmation ? {shouldDismissEmptyReportsConfirmation} : {}), |
There was a problem hiding this comment.
why are we spreading this?
There was a problem hiding this comment.
Because this param is optional. We'll not be sending it during a normal report creation.
| import ConfirmModal from '@components/ConfirmModal'; | ||
| import Text from '@components/Text'; | ||
| import TextLink from '@components/TextLink'; | ||
| import useThemeStyles from '@hooks/useThemeStyles'; |
There was a problem hiding this comment.
Can't see any ESLint issue here, can you check again?
There was a problem hiding this comment.
Ok thanks, I was checking for errors in the list of checks.
There was a problem hiding this comment.
Please fix the linting 😄 .
Also @rushatgabhane, we also need to wait for BE updates right?
There was a problem hiding this comment.
they are deployed to production
|
I'll be OOO till 29th Nov |
|
QA favorite testcase, after Screen.Recording.2025-11-30.at.13.30.14.mov |
|
@hungvu193 I think that's because we don't have the value from the backend when trying after clearing the cache. |
|
Sounds good. I'll review that one, but it shouldn't need to block this one. |
|
@ShridharGoel Please merge main. I'll complete the checklist in the meantime. |
|
@hungvu193 Updated |
|
@puneetlath Can you help with running the translations job? |
🦜 Polyglot Parrot! 🦜Squawk! Looks like you added some shiny new English strings. Allow me to parrot them back to you in other tongues: View the translation diffdiff --git a/src/languages/de.ts b/src/languages/de.ts
index bc1a19e7..fd97a740 100644
--- a/src/languages/de.ts
+++ b/src/languages/de.ts
@@ -2546,20 +2546,20 @@ ${amount} für ${merchant} - ${date}`,
`Verbinde${integrationName === CONST.ONBOARDING_ACCOUNTING_MAPPING.other ? '' : ' mit'} [${integrationName === CONST.ONBOARDING_ACCOUNTING_MAPPING.other ? 'deiner' : ''} ${integrationName}](${workspaceAccountingLink})`,
description: ({integrationName, workspaceAccountingLink}) =>
dedent(`
- Verbinde ${integrationName === CONST.ONBOARDING_ACCOUNTING_MAPPING.other ? 'Ihr' : 'bis'} ${integrationName} für die automatische Kategorisierung und Synchronisierung von Ausgaben, damit der Monatsabschluss zum Kinderspiel wird.
+ Verbinden Sie ${integrationName === CONST.ONBOARDING_ACCOUNTING_MAPPING.other ? 'dein' : 'an'} ${integrationName} für automatische Ausgabenkodierung und Synchronisierung, die den Monatsabschluss zum Kinderspiel macht.
- 1. Klicke auf *Workspaces*.
- 2. Wähle deinen Workspace aus.
- 3. Klicke auf *Accounting*.
- 4. Suche nach ${integrationName}.
- 5. Klicke auf *Connect*.
+ 1. Klicken Sie auf *Arbeitsbereiche*.
+ 2. Wählen Sie Ihren Arbeitsbereich aus.
+ 3. Klicken Sie auf *Buchhaltung*.
+ 4. Suchen Sie nach ${integrationName}.
+ 5. Klicken Sie auf *Verbinden*.
${
integrationName && CONST.connectionsVideoPaths[integrationName]
- ? dedent(`[Zur Buchhaltung](${workspaceAccountingLink}).
+ ? dedent(`[Bring mich zur Buchhaltung](${workspaceAccountingLink}).
-`)
- : `[Zur Buchhaltung](${workspaceAccountingLink}).`
+ `)
+ : `[Zur Buchhaltung wechseln](${workspaceAccountingLink}).`
}`),
},
connectCorporateCardTask: {
@@ -6664,6 +6664,7 @@ ${
`Möchtest du wirklich einen weiteren Bericht in ${workspaceName} erstellen? Du kannst auf deine leeren Berichte zugreifen unter`,
emptyReportConfirmationPromptLink: 'Berichte',
genericWorkspaceName: 'diesem Arbeitsbereich',
+ emptyReportConfirmationDontShowAgain: 'Nicht mehr anzeigen',
},
genericCreateReportFailureMessage: 'Unerwarteter Fehler beim Erstellen dieses Chats. Bitte versuchen Sie es später erneut.',
genericAddCommentFailureMessage: 'Unerwarteter Fehler beim Posten des Kommentars. Bitte versuchen Sie es später noch einmal.',
diff --git a/src/languages/fr.ts b/src/languages/fr.ts
index 89225386..814a4e08 100644
--- a/src/languages/fr.ts
+++ b/src/languages/fr.ts
@@ -2546,19 +2546,23 @@ ${amount} pour ${merchant} - ${date}`,
`Connecter${integrationName === CONST.ONBOARDING_ACCOUNTING_MAPPING.other ? '' : ' à'} [${integrationName === CONST.ONBOARDING_ACCOUNTING_MAPPING.other ? 'votre' : ''} ${integrationName}](${workspaceAccountingLink})`,
description: ({integrationName, workspaceAccountingLink}) =>
dedent(`
- Connectez ${integrationName === CONST.ONBOARDING_ACCOUNTING_MAPPING.other ? 'votre' : 'à'} ${integrationName} pour un codage et une synchronisation automatiques des dépenses qui rendent la clôture de fin de mois un jeu d'enfant.
+ Connectez ${
+ integrationName === CONST.ONBOARDING_ACCOUNTING_MAPPING.other
+ ? 'votre' //_/\__/_/ \_,_/\__/\__/\_,_/
+ : 'à'
+ } ${integrationName} pour le codage et la synchronisation automatiques des dépenses qui rendent la clôture de fin de mois un jeu d’enfant.
1. Cliquez sur *Workspaces*.
2. Sélectionnez votre espace de travail.
3. Cliquez sur *Accounting*.
- 4. Recherchez ${integrationName}.
+ 4. Trouvez ${integrationName}.
5. Cliquez sur *Connect*.
${
integrationName && CONST.connectionsVideoPaths[integrationName]
- ? dedent(`[Accéder à la comptabilité](${workspaceAccountingLink}).
+ ? dedent(`[Aller à la comptabilité](${workspaceAccountingLink}).
- `)
+`)
: `[Accéder à la comptabilité](${workspaceAccountingLink}).`
}`),
},
@@ -6672,6 +6676,7 @@ ${
`Êtes-vous sûr de vouloir créer un autre rapport dans ${workspaceName} ? Vous pouvez accéder à vos rapports vides dans`,
emptyReportConfirmationPromptLink: 'Rapports',
genericWorkspaceName: 'cet espace de travail',
+ emptyReportConfirmationDontShowAgain: 'Ne plus afficher ce message',
},
genericCreateReportFailureMessage: 'Erreur inattendue lors de la création de ce chat. Veuillez réessayer plus tard.',
genericAddCommentFailureMessage: 'Erreur inattendue lors de la publication du commentaire. Veuillez réessayer plus tard.',
diff --git a/src/languages/it.ts b/src/languages/it.ts
index 5c760116..0a97482f 100644
--- a/src/languages/it.ts
+++ b/src/languages/it.ts
@@ -2534,19 +2534,19 @@ ${amount} per ${merchant} - ${date}`,
`Connetti${integrationName === CONST.ONBOARDING_ACCOUNTING_MAPPING.other ? '' : ' a'} [${integrationName === CONST.ONBOARDING_ACCOUNTING_MAPPING.other ? 'il tuo' : ''} ${integrationName}](${workspaceAccountingLink})`,
description: ({integrationName, workspaceAccountingLink}) =>
dedent(`
- Collega ${integrationName === CONST.ONBOARDING_ACCOUNTING_MAPPING.other ? 'il tuo' : 'a'} ${integrationName} per la codifica e la sincronizzazione automatiche delle spese che rendono la chiusura di fine mese un gioco da ragazzi.
+ Collega ${integrationName === CONST.ONBOARDING_ACCOUNTING_MAPPING.other ? 'il tuo' : 'a'} ${integrationName} per la codifica e la sincronizzazione automatica delle spese che rendono la chiusura di fine mese un gioco da ragazzi.
- 1. Fai clic su *Workspaces*.
- 2. Seleziona il tuo workspace.
- 3. Fai clic su *Accounting*.
+ 1. Fai clic su *Spazi di lavoro*.
+ 2. Seleziona il tuo spazio di lavoro.
+ 3. Fai clic su *Contabilità*.
4. Trova ${integrationName}.
- 5. Fai clic su *Connect*.
+ 5. Fai clic su *Connetti*.
${
integrationName && CONST.connectionsVideoPaths[integrationName]
? dedent(`[Portami alla contabilità](${workspaceAccountingLink}).
- `)
+`)
: `[Portami alla contabilità](${workspaceAccountingLink}).`
}`),
},
@@ -6653,6 +6653,7 @@ ${
`Sei sicuro di voler creare un altro rapporto in ${workspaceName}? Puoi accedere ai tuoi rapporti vuoti in`,
emptyReportConfirmationPromptLink: 'Rapporti',
genericWorkspaceName: 'questo spazio di lavoro',
+ emptyReportConfirmationDontShowAgain: 'Non mostrarmelo di nuovo',
},
genericCreateReportFailureMessage: 'Errore imprevisto durante la creazione di questa chat. Si prega di riprovare più tardi.',
genericAddCommentFailureMessage: 'Errore imprevisto durante la pubblicazione del commento. Per favore riprova più tardi.',
diff --git a/src/languages/ja.ts b/src/languages/ja.ts
index 2b22bc05..469e6a01 100644
--- a/src/languages/ja.ts
+++ b/src/languages/ja.ts
@@ -2523,7 +2523,7 @@ ${date} - ${merchant}に${amount}`,
`${integrationName === CONST.ONBOARDING_ACCOUNTING_MAPPING.other ? '' : 'と'}[${integrationName === CONST.ONBOARDING_ACCOUNTING_MAPPING.other ? 'あなたの' : ''} ${integrationName}](${workspaceAccountingLink})と接続する`,
description: ({integrationName, workspaceAccountingLink}) =>
dedent(`
-${integrationName === CONST.ONBOARDING_ACCOUNTING_MAPPING.other ? 'あなたの' : 'まで'} の ${integrationName} を接続して、経費の自動分類と同期で月末締めをスムーズに。
+${integrationName === CONST.ONBOARDING_ACCOUNTING_MAPPING.other ? 'あなたの' : 'to'} ${integrationName} を接続して、月末締めがスムーズになる自動経費のコード化と同期を実現しましょう。
1. *Workspaces* をクリックします。
2. ワークスペースを選択します。
@@ -2535,8 +2535,8 @@ ${
integrationName && CONST.connectionsVideoPaths[integrationName]
? dedent(`[会計に移動](${workspaceAccountingLink}).
- `)
- : `[会計に移動](${workspaceAccountingLink}).`
+ `)
+ : `[会計へ移動](${workspaceAccountingLink}).`
}`),
},
connectCorporateCardTask: {
@@ -6586,6 +6586,7 @@ ${
emptyReportConfirmationPrompt: ({workspaceName}: {workspaceName: string}) => `${workspaceName} で別のレポートを作成しますか? 空のレポートには次からアクセスできます`,
emptyReportConfirmationPromptLink: 'レポート',
genericWorkspaceName: 'このワークスペース',
+ emptyReportConfirmationDontShowAgain: '今後表示しない',
},
genericCreateReportFailureMessage: 'このチャットの作成中に予期しないエラーが発生しました。後でもう一度お試しください。',
genericAddCommentFailureMessage: 'コメントの投稿中に予期しないエラーが発生しました。後でもう一度お試しください。',
diff --git a/src/languages/nl.ts b/src/languages/nl.ts
index 57ec44ef..452b008e 100644
--- a/src/languages/nl.ts
+++ b/src/languages/nl.ts
@@ -2533,9 +2533,9 @@ ${amount} voor ${merchant} - ${date}`,
`Verbind${integrationName === CONST.ONBOARDING_ACCOUNTING_MAPPING.other ? '' : ' met'} [${integrationName === CONST.ONBOARDING_ACCOUNTING_MAPPING.other ? 'uw' : ''} ${integrationName}](${workspaceAccountingLink})`,
description: ({integrationName, workspaceAccountingLink}) =>
dedent(`
- Verbind ${integrationName === CONST.ONBOARDING_ACCOUNTING_MAPPING.other ? 'jouw' : 'tot'} ${integrationName} voor automatische onkostencodering en synchronisatie, waardoor de maandafsluiting een fluitje van een cent wordt.
+ Verbind ${integrationName === CONST.ONBOARDING_ACCOUNTING_MAPPING.other ? 'jouw' : 'tot'} ${integrationName} voor automatische uitgavencodering en synchronisatie, waardoor de maandafsluiting een fluitje van een cent wordt.
- 1. Klik op *Werkruimtes*.
+ 1. Klik op *Werkruimten*.
2. Selecteer je werkruimte.
3. Klik op *Boekhouding*.
4. Zoek ${integrationName}.
@@ -2543,10 +2543,10 @@ ${amount} voor ${merchant} - ${date}`,
${
integrationName && CONST.connectionsVideoPaths[integrationName]
- ? dedent(`[Breng me naar de boekhouding](${workspaceAccountingLink}).
+ ? dedent(`[Ga naar de boekhouding](${workspaceAccountingLink}).
- `)
- : `[Breng me naar de boekhouding](${workspaceAccountingLink}).`
+ `)
+ : `[Ga naar de boekhouding](${workspaceAccountingLink}).`
}`),
},
connectCorporateCardTask: {
@@ -6634,6 +6634,7 @@ ${
`Weet je zeker dat je nog een rapport wilt maken in ${workspaceName}? Je kunt je lege rapporten vinden onder`,
emptyReportConfirmationPromptLink: 'Rapporten',
genericWorkspaceName: 'deze werkruimte',
+ emptyReportConfirmationDontShowAgain: 'Niet meer weergeven',
},
genericCreateReportFailureMessage: 'Onverwachte fout bij het maken van deze chat. Probeer het later opnieuw.',
genericAddCommentFailureMessage: 'Onverwachte fout bij het plaatsen van de opmerking. Probeer het later opnieuw.',
diff --git a/src/languages/pl.ts b/src/languages/pl.ts
index c918fef6..f459f143 100644
--- a/src/languages/pl.ts
+++ b/src/languages/pl.ts
@@ -2528,13 +2528,13 @@ ${amount} dla ${merchant} - ${date}`,
`Połącz${integrationName === CONST.ONBOARDING_ACCOUNTING_MAPPING.other ? '' : ' z'} [${integrationName === CONST.ONBOARDING_ACCOUNTING_MAPPING.other ? 'swoim' : ''} ${integrationName}](${workspaceAccountingLink})`,
description: ({integrationName, workspaceAccountingLink}) =>
dedent(`
- Połącz ${integrationName === CONST.ONBOARDING_ACCOUNTING_MAPPING.other ? 'twój' : 'Do'} ${integrationName}, aby umożliwić automatyczne kategoryzowanie wydatków i synchronizację, co ułatwia zamknięcie miesiąca.
+ Połącz ${integrationName === CONST.ONBOARDING_ACCOUNTING_MAPPING.other ? 'Twoje' : 'do'} ${integrationName}, aby automatycznie kodować wydatki i synchronizować dane, co ułatwia zamknięcie miesiąca.
- 1. Kliknij *Workspaces*.
- 2. Wybierz swoją przestrzeń roboczą.
- 3. Kliknij *Accounting*.
+ 1. Kliknij *Obszary robocze*.
+ 2. Wybierz swój obszar roboczy.
+ 3. Kliknij *Księgowość*.
4. Znajdź ${integrationName}.
- 5. Kliknij *Connect*.
+ 5. Kliknij *Połącz*.
${
integrationName && CONST.connectionsVideoPaths[integrationName]
@@ -5253,7 +5253,7 @@ ${
cardType: 'Typ karty',
limit: 'Limit',
limitType: 'Typ limitu',
- name: 'Imię',
+ name: 'Nazwa',
disabledApprovalForSmartLimitError: 'Proszę włączyć zatwierdzenia w <strong>Przepływy pracy > Dodaj zatwierdzenia</strong> przed skonfigurowaniem inteligentnych limitów',
},
deactivateCardModal: {
@@ -6621,6 +6621,7 @@ ${
`Czy na pewno chcesz utworzyć kolejny raport w ${workspaceName}? Do pustych raportów możesz przejść w`,
emptyReportConfirmationPromptLink: 'Raporty',
genericWorkspaceName: 'tej przestrzeni roboczej',
+ emptyReportConfirmationDontShowAgain: 'Nie pokazuj tego ponownie',
},
genericCreateReportFailureMessage: 'Nieoczekiwany błąd podczas tworzenia tego czatu. Proszę spróbować ponownie później.',
genericAddCommentFailureMessage: 'Nieoczekiwany błąd podczas publikowania komentarza. Spróbuj ponownie później.',
diff --git a/src/languages/pt-BR.ts b/src/languages/pt-BR.ts
index 3ef34b54..6a640b29 100644
--- a/src/languages/pt-BR.ts
+++ b/src/languages/pt-BR.ts
@@ -2528,20 +2528,20 @@ ${amount} para ${merchant} - ${date}`,
`Conecte-se${integrationName === CONST.ONBOARDING_ACCOUNTING_MAPPING.other ? '' : ' ao'} [${integrationName === CONST.ONBOARDING_ACCOUNTING_MAPPING.other ? 'seu' : ''} ${integrationName}](${workspaceAccountingLink})`,
description: ({integrationName, workspaceAccountingLink}) =>
dedent(`
- Conecte ${integrationName === CONST.ONBOARDING_ACCOUNTING_MAPPING.other ? 'seu' : 'para'} ${integrationName} para classificação e sincronização automáticas de despesas que tornam o fechamento de fim de mês muito mais simples.
+ Conecte ${integrationName === CONST.ONBOARDING_ACCOUNTING_MAPPING.other ? 'seu' : 'para'} ${integrationName} para codificação e sincronização automáticas de despesas que tornam o fechamento do mês muito mais fácil.
- 1. Clique em *Espaços de trabalho*.
+ 1. Clique em *Workspaces*.
2. Selecione seu espaço de trabalho.
- 3. Clique em *Contabilidade*.
+ 3. Clique em *Accounting*.
4. Encontre ${integrationName}.
- 5. Clique em *Conectar*.
+ 5. Clique em *Connect*.
${
integrationName && CONST.connectionsVideoPaths[integrationName]
? dedent(`[Ir para a contabilidade](${workspaceAccountingLink}).
`)
- : `[Ir para a contabilidade](${workspaceAccountingLink}).`
+ : `[Leve-me para a contabilidade](${workspaceAccountingLink}).`
}`),
},
connectCorporateCardTask: {
@@ -6633,6 +6633,7 @@ ${
`Tem certeza de que deseja criar outro relatório em ${workspaceName}? Você pode acessar seus relatórios vazios em`,
emptyReportConfirmationPromptLink: 'Relatórios',
genericWorkspaceName: 'este espaço de trabalho',
+ emptyReportConfirmationDontShowAgain: 'Não mostrar isso novamente',
},
genericCreateReportFailureMessage: 'Erro inesperado ao criar este chat. Por favor, tente novamente mais tarde.',
genericAddCommentFailureMessage: 'Erro inesperado ao postar o comentário. Por favor, tente novamente mais tarde.',
diff --git a/src/languages/zh-hans.ts b/src/languages/zh-hans.ts
index f742e01f..25c84a82 100644
--- a/src/languages/zh-hans.ts
+++ b/src/languages/zh-hans.ts
@@ -2496,20 +2496,20 @@ ${merchant}的${amount} - ${date}`,
`连接${integrationName === CONST.ONBOARDING_ACCOUNTING_MAPPING.other ? '' : '到'}[${integrationName === CONST.ONBOARDING_ACCOUNTING_MAPPING.other ? '您的' : ''} ${integrationName}](${workspaceAccountingLink})`,
description: ({integrationName, workspaceAccountingLink}) =>
dedent(`
- 连接 ${integrationName === CONST.ONBOARDING_ACCOUNTING_MAPPING.other ? '您的' : '至'} ${integrationName},实现自动费用编码与同步,让月末结账轻松无忧。
+ 连接 ${integrationName === CONST.ONBOARDING_ACCOUNTING_MAPPING.other ? '您的' : '至'} ${integrationName},实现自动费用编码和同步,让月末结账轻而易举。
- 1. 点击*工作区*。
- 2. 选择您的工作区。
- 3. 点击*会计*。
+ 1. 点击 *Workspaces*。
+ 2. 选择你的工作区。
+ 3. 点击 *Accounting*。
4. 找到 ${integrationName}。
- 5. 点击*连接*。
+ 5. 点击 *Connect*。
${
integrationName && CONST.connectionsVideoPaths[integrationName]
- ? dedent(`[前往会计](${workspaceAccountingLink}).
+ ? dedent(`[带我前往会计](${workspaceAccountingLink}).
`)
- : `[前往会计](${workspaceAccountingLink}).`
+ : `[带我前往会计](${workspaceAccountingLink}).`
}`),
},
connectCorporateCardTask: {
@@ -5159,7 +5159,7 @@ ${
cardType: '卡类型',
limit: '限制',
limitType: '限制类型',
- name: '名称',
+ name: '姓名',
disabledApprovalForSmartLimitError: '请在<strong>工作流程 > 添加审批</strong>中启用审批,然后再设置智能限制',
},
deactivateCardModal: {
@@ -6496,6 +6496,7 @@ ${
emptyReportConfirmationPrompt: ({workspaceName}: {workspaceName: string}) => `确定要在 ${workspaceName} 中再创建一个报告吗?你可以在以下位置访问你的空报告`,
emptyReportConfirmationPromptLink: '报告',
genericWorkspaceName: '此工作区',
+ emptyReportConfirmationDontShowAgain: '不再显示此内容',
},
genericCreateReportFailureMessage: '创建此聊天时出现意外错误。请稍后再试。',
genericAddCommentFailureMessage: '发表评论时出现意外错误。请稍后再试。',
Note You can apply these changes to your branch by copying the patch to your clipboard, then running |
Reviewer Checklist
Screenshots/VideosAndroid: HybridAppScreen.Recording.2025-12-10.at.12.10.29.movAndroid: mWeb ChromeScreen.Recording.2025-12-10.at.10.53.04.moviOS: HybridAppios.moviOS: mWeb Safarimsafari.movMacOS: Chrome / SafariScreen.Recording.2025-11-30.at.13.35.01.mov |
|
@ShridharGoel you might need to merge main again |
|
@hungvu193 Done |
| generateReportID, | ||
| getDisplayNameForParticipant, | ||
| getIcons, | ||
| getIcons, // eslint-disable-next-line @typescript-eslint/no-deprecated |
There was a problem hiding this comment.
Is there a new way we're supposed to be getting the icons instead?
There was a problem hiding this comment.
Ok got it. And so we update this file to use the new method of loading icons? Rather than suppressing the error?
There was a problem hiding this comment.
Just checked again, it is actually for getReportName
There was a problem hiding this comment.
But it is for existing code, not something we have added here
|
Ok sounds good. @ShridharGoel looks like theres a Jest failure. |
|
@hungvu193 looks like you have some missing stuff on the reviewer checklist. |
|
Merged main. |
|
@puneetlath All checks are passing. |
|
✋ This PR was not deployed to staging yet because QA is ongoing. It will be automatically deployed to staging after the next production release. |
Sorry I forgot to save it. I've just updated |
|
🚀 Deployed to staging by https://github.com/puneetlath in version: 9.2.75-0 🚀
|
|
🚀 Deployed to staging by https://github.com/puneetlath in version: 9.2.75-0 🚀
|
|
🚀 Deployed to staging by https://github.com/puneetlath in version: 9.2.77-0 🚀
|
|
🚀 Deployed to production by https://github.com/yuwenmemon in version: 9.2.77-1 🚀
|

Explanation of Change
Add 'Don't show this again' checkbox for empty reports dialog.
Fixed Issues
$ #74962
PROPOSAL:
Tests
Offline tests
QA Steps
Same as tests.
PR Author Checklist
### Fixed Issuessection aboveTestssectionOffline stepssectionQA stepssectioncanBeMissingparam foruseOnyxtoggleReportand notonIconClick)src/languages/*files and using the translation methodSTYLE.md) were followedAvatar, I verified the components usingAvatarare working as expected)StyleUtils.getBackgroundAndBorderStyle(theme.componentBG))npm run compress-svg)Avataris modified, I verified thatAvataris working as expected in all cases)Designlabel and/or tagged@Expensify/designso the design team can review the changes.ScrollViewcomponent to make it scrollable when more elements are added to the page.mainbranch was merged into this PR after a review, I tested again and verified the outcome was still expected according to theTeststeps.Screenshots/Videos
Android: Native
Screen.Recording.2025-11-18.at.11.58.06.PM.mov
Android: mWeb Chrome
Screen.Recording.2025-11-18.at.11.59.06.PM.mov
iOS: Native
Screen.Recording.2025-11-19.at.12.04.29.AM.mov
iOS: mWeb Safari
Screen.Recording.2025-11-19.at.12.06.24.AM.mov
MacOS: Chrome / Safari
Screen.Recording.2025-11-18.at.11.56.52.PM.mov
MacOS: Desktop
Screen.Recording.2025-11-19.at.12.11.27.AM.mov