From 9c564aa5e1c26d5fc1e1dc8000abe2f230847447 Mon Sep 17 00:00:00 2001
From: ShridharGoel <35566748+ShridharGoel@users.noreply.github.com>
Date: Tue, 18 Nov 2025 22:18:14 +0530
Subject: [PATCH 1/8] Add 'Don't show this again' checkbox for empty reports
dialog
---
src/ONYXKEYS.ts | 4 ++
...onditionalCreateEmptyReportConfirmation.ts | 19 +++++--
.../useCreateEmptyReportConfirmation.tsx | 33 +++++++++---
src/hooks/useSearchTypeMenuSections.ts | 37 +++++++++----
src/languages/en.ts | 1 +
.../API/parameters/CreateAppReportParams.ts | 1 +
src/libs/actions/Report.ts | 15 +++++-
src/pages/NewReportWorkspaceSelectionPage.tsx | 28 +++++-----
src/pages/Search/EmptySearchView.tsx | 40 +++++++++-----
.../Search/SearchTransactionsChangeReport.tsx | 4 +-
.../AttachmentPickerWithMenuItems.tsx | 15 ++++--
.../FloatingActionButtonAndPopover.tsx | 54 +++++++++++--------
.../iou/request/step/IOURequestEditReport.tsx | 4 +-
.../iou/request/step/IOURequestStepReport.tsx | 4 +-
14 files changed, 177 insertions(+), 82 deletions(-)
diff --git a/src/ONYXKEYS.ts b/src/ONYXKEYS.ts
index fb7c1526f162..7e6681937df2 100755
--- a/src/ONYXKEYS.ts
+++ b/src/ONYXKEYS.ts
@@ -187,6 +187,9 @@ const ONYXKEYS = {
*/
NVP_DISMISSED_ASAP_SUBMIT_EXPLANATION: 'nvp_dismissedASAPSubmitExplanation',
+ /** Whether the user dismissed the empty report confirmation dialog */
+ NVP_EMPTY_REPORTS_CONFIRMATION_DISMISSED: 'nvp_emptyReportsConfirmationDismissed',
+
/** This NVP contains the training modals the user denied showing again */
NVP_HAS_SEEN_TRACK_TRAINING: 'nvp_hasSeenTrackTraining',
@@ -1157,6 +1160,7 @@ type OnyxValuesMapping = {
[ONYXKEYS.NVP_TRY_FOCUS_MODE]: boolean;
[ONYXKEYS.NVP_DISMISSED_HOLD_USE_EXPLANATION]: boolean;
[ONYXKEYS.NVP_DISMISSED_ASAP_SUBMIT_EXPLANATION]: boolean;
+ [ONYXKEYS.NVP_EMPTY_REPORTS_CONFIRMATION_DISMISSED]: boolean;
[ONYXKEYS.NVP_LAST_PAYMENT_METHOD]: OnyxTypes.LastPaymentMethod;
[ONYXKEYS.NVP_LAST_LOCATION_PERMISSION_PROMPT]: string;
[ONYXKEYS.LAST_EXPORT_METHOD]: OnyxTypes.LastExportMethod;
diff --git a/src/hooks/useConditionalCreateEmptyReportConfirmation.ts b/src/hooks/useConditionalCreateEmptyReportConfirmation.ts
index 0a564ad65884..0f32d450e973 100644
--- a/src/hooks/useConditionalCreateEmptyReportConfirmation.ts
+++ b/src/hooks/useConditionalCreateEmptyReportConfirmation.ts
@@ -13,7 +13,7 @@ type UseConditionalCreateEmptyReportConfirmationParams = {
/** The display name of the policy/workspace */
policyName?: string;
/** Callback executed after the user confirms report creation */
- onCreateReport: () => void;
+ onCreateReport: (shouldDismissEmptyReportsConfirmation?: boolean) => void;
/** Optional callback executed when the confirmation modal is cancelled */
onCancel?: () => void;
/** Whether the confirmation modal should be bypassed even if an empty report exists */
@@ -46,24 +46,33 @@ export default function useConditionalCreateEmptyReportConfirmation({
canBeMissing: true,
selector: reportSummariesOnyxSelector,
});
+ const [hasDismissedEmptyReportsConfirmation] = useOnyx(ONYXKEYS.NVP_EMPTY_REPORTS_CONFIRMATION_DISMISSED, {canBeMissing: true});
const hasEmptyReport = useMemo(() => hasEmptyReportsForPolicy(reportSummaries, policyID, accountID), [accountID, policyID, reportSummaries]);
+ const shouldSkipConfirmation = useMemo(() => shouldBypassConfirmation || hasDismissedEmptyReportsConfirmation === true, [hasDismissedEmptyReportsConfirmation, shouldBypassConfirmation]);
+
+ const handleReportCreationConfirmed = useCallback(
+ (shouldDismissEmptyReportsConfirmation?: boolean) => {
+ onCreateReport(shouldDismissEmptyReportsConfirmation);
+ },
+ [onCreateReport],
+ );
const {openCreateReportConfirmation, CreateReportConfirmationModal} = useCreateEmptyReportConfirmation({
policyID,
policyName,
- onConfirm: onCreateReport,
+ onConfirm: handleReportCreationConfirmed,
onCancel,
});
const handleCreateReport = useCallback(() => {
- if (hasEmptyReport && !shouldBypassConfirmation) {
+ if (hasEmptyReport && !shouldSkipConfirmation) {
openCreateReportConfirmation();
return;
}
- onCreateReport();
- }, [hasEmptyReport, onCreateReport, openCreateReportConfirmation, shouldBypassConfirmation]);
+ onCreateReport(false);
+ }, [hasEmptyReport, onCreateReport, openCreateReportConfirmation, shouldSkipConfirmation]);
return {
handleCreateReport,
diff --git a/src/hooks/useCreateEmptyReportConfirmation.tsx b/src/hooks/useCreateEmptyReportConfirmation.tsx
index ce13cab9ea00..a0cfb8319cf4 100644
--- a/src/hooks/useCreateEmptyReportConfirmation.tsx
+++ b/src/hooks/useCreateEmptyReportConfirmation.tsx
@@ -1,8 +1,11 @@
import type {ReactNode} from 'react';
import React, {useCallback, useMemo, useState} from 'react';
+import {View} from 'react-native';
+import CheckboxWithLabel from '@components/CheckboxWithLabel';
import ConfirmModal from '@components/ConfirmModal';
import Text from '@components/Text';
import TextLink from '@components/TextLink';
+import useThemeStyles from '@hooks/useThemeStyles';
import Navigation from '@libs/Navigation/Navigation';
import {buildCannedSearchQuery} from '@libs/SearchQueryUtils';
import CONST from '@src/CONST';
@@ -15,7 +18,7 @@ type UseCreateEmptyReportConfirmationParams = {
/** The display name of the policy/workspace */
policyName?: string;
/** Callback function to execute when user confirms report creation */
- onConfirm: () => void;
+ onConfirm: (shouldDismissEmptyReportsConfirmation: boolean) => void;
/** Optional callback function to execute when user cancels the confirmation */
onCancel?: () => void;
};
@@ -49,22 +52,27 @@ type UseCreateEmptyReportConfirmationResult = {
*/
export default function useCreateEmptyReportConfirmation({policyName, onConfirm, onCancel}: UseCreateEmptyReportConfirmationParams): UseCreateEmptyReportConfirmationResult {
const {translate} = useLocalize();
+ const styles = useThemeStyles();
const workspaceDisplayName = useMemo(() => (policyName?.trim().length ? policyName : translate('report.newReport.genericWorkspaceName')), [policyName, translate]);
const [isVisible, setIsVisible] = useState(false);
const [modalWorkspaceName, setModalWorkspaceName] = useState(workspaceDisplayName);
+ const [shouldDismissEmptyReportsConfirmation, setShouldDismissEmptyReportsConfirmation] = useState(false);
const handleConfirm = useCallback(() => {
- onConfirm();
+ onConfirm(shouldDismissEmptyReportsConfirmation);
+ setShouldDismissEmptyReportsConfirmation(false);
setIsVisible(false);
- }, [onConfirm]);
+ }, [onConfirm, shouldDismissEmptyReportsConfirmation]);
const handleCancel = useCallback(() => {
onCancel?.();
+ setShouldDismissEmptyReportsConfirmation(false);
setIsVisible(false);
}, [onCancel]);
const handleReportsLinkPress = useCallback(() => {
onCancel?.();
+ setShouldDismissEmptyReportsConfirmation(false);
setIsVisible(false);
Navigation.navigate(ROUTES.SEARCH_ROOT.getRoute({query: buildCannedSearchQuery({type: CONST.SEARCH.DATA_TYPES.EXPENSE_REPORT})}));
}, [onCancel]);
@@ -73,17 +81,26 @@ export default function useCreateEmptyReportConfirmation({policyName, onConfirm,
// The caller is responsible for determining if empty report confirmation
// should be shown. We simply open the modal when called.
setModalWorkspaceName(workspaceDisplayName);
+ setShouldDismissEmptyReportsConfirmation(false);
setIsVisible(true);
}, [workspaceDisplayName]);
const prompt = useMemo(
() => (
-
- {translate('report.newReport.emptyReportConfirmationPrompt', {workspaceName: modalWorkspaceName})}{' '}
- {translate('report.newReport.emptyReportConfirmationPromptLink')}.
-
+
+
+ {translate('report.newReport.emptyReportConfirmationPrompt', {workspaceName: modalWorkspaceName})}{' '}
+ {translate('report.newReport.emptyReportConfirmationPromptLink')}.
+
+ setShouldDismissEmptyReportsConfirmation(Boolean(value))}
+ />
+
),
- [handleReportsLinkPress, modalWorkspaceName, translate],
+ [handleReportsLinkPress, modalWorkspaceName, shouldDismissEmptyReportsConfirmation, styles.gap4, translate],
);
const CreateReportConfirmationModal = useMemo(
diff --git a/src/hooks/useSearchTypeMenuSections.ts b/src/hooks/useSearchTypeMenuSections.ts
index 847c3e99a53b..b76d1ec8da61 100644
--- a/src/hooks/useSearchTypeMenuSections.ts
+++ b/src/hooks/useSearchTypeMenuSections.ts
@@ -54,15 +54,23 @@ const useSearchTypeMenuSections = () => {
const [savedSearches] = useOnyx(ONYXKEYS.SAVED_SEARCHES, {canBeMissing: true});
const [reports] = useOnyx(ONYXKEYS.COLLECTION.REPORT, {canBeMissing: true});
const [transactionViolations] = useOnyx(ONYXKEYS.COLLECTION.TRANSACTION_VIOLATIONS, {canBeMissing: true});
+ const [hasDismissedEmptyReportsConfirmation] = useOnyx(ONYXKEYS.NVP_EMPTY_REPORTS_CONFIRMATION_DISMISSED, {canBeMissing: true});
const {isBetaEnabled} = usePermissions();
const isASAPSubmitBetaEnabled = isBetaEnabled(CONST.BETAS.ASAP_SUBMIT);
const hasViolations = hasViolationsReportUtils(undefined, transactionViolations);
- const [pendingReportCreation, setPendingReportCreation] = useState<{policyID: string; policyName?: string; onConfirm: () => void} | null>(null);
-
- const handlePendingConfirm = useCallback(() => {
- pendingReportCreation?.onConfirm();
- setPendingReportCreation(null);
- }, [pendingReportCreation, setPendingReportCreation]);
+ const [pendingReportCreation, setPendingReportCreation] = useState<{
+ policyID: string;
+ policyName?: string;
+ onConfirm: (shouldDismissEmptyReportsConfirmation: boolean) => void;
+ } | null>(null);
+
+ const handlePendingConfirm = useCallback(
+ (shouldDismissEmptyReportsConfirmation: boolean) => {
+ pendingReportCreation?.onConfirm(shouldDismissEmptyReportsConfirmation);
+ setPendingReportCreation(null);
+ },
+ [pendingReportCreation, setPendingReportCreation],
+ );
const handlePendingCancel = useCallback(() => {
setPendingReportCreation(null);
@@ -87,12 +95,19 @@ const useSearchTypeMenuSections = () => {
return;
}
- const executeCreate = () => {
- const {reportID: createdReportID} = createNewReport(personalDetailsForCreation, isASAPSubmitBetaEnabled, hasViolations, policyID);
+ const executeCreate = (shouldDismissEmptyReportsConfirmation: boolean) => {
+ const {reportID: createdReportID} = createNewReport(
+ personalDetailsForCreation,
+ isASAPSubmitBetaEnabled,
+ hasViolations,
+ policyID,
+ false,
+ shouldDismissEmptyReportsConfirmation,
+ );
onSuccess(createdReportID);
};
- if (hasEmptyReportsForPolicy(reports, policyID, accountID)) {
+ if (hasEmptyReportsForPolicy(reports, policyID, accountID) && hasDismissedEmptyReportsConfirmation !== true) {
setPendingReportCreation({
policyID,
policyName,
@@ -101,9 +116,9 @@ const useSearchTypeMenuSections = () => {
return;
}
- executeCreate();
+ executeCreate(false);
},
- [currentUserLoginAndAccountID?.accountID, hasViolations, isASAPSubmitBetaEnabled, reports, setPendingReportCreation],
+ [currentUserLoginAndAccountID?.accountID, hasDismissedEmptyReportsConfirmation, hasViolations, isASAPSubmitBetaEnabled, reports, setPendingReportCreation],
);
useEffect(() => {
diff --git a/src/languages/en.ts b/src/languages/en.ts
index 86ffa35a4329..7aa6eefd6741 100755
--- a/src/languages/en.ts
+++ b/src/languages/en.ts
@@ -6636,6 +6636,7 @@ const translations = {
emptyReportConfirmationPrompt: ({workspaceName}: {workspaceName: string}) =>
`Are you sure you want to create another report in ${workspaceName}? You can access your empty reports in`,
emptyReportConfirmationPromptLink: 'Reports',
+ emptyReportConfirmationDontShowAgain: "Don't show this again",
genericWorkspaceName: 'this workspace',
},
genericCreateReportFailureMessage: 'Unexpected error creating this chat. Please try again later.',
diff --git a/src/libs/API/parameters/CreateAppReportParams.ts b/src/libs/API/parameters/CreateAppReportParams.ts
index 6ac0152ad7a6..444aff653fcf 100644
--- a/src/libs/API/parameters/CreateAppReportParams.ts
+++ b/src/libs/API/parameters/CreateAppReportParams.ts
@@ -5,5 +5,6 @@ type CreateAppReportParams = {
reportID: string;
reportActionID: string;
reportPreviewReportActionID: string;
+ shouldDismissEmptyReportsConfirmation?: boolean;
};
export default CreateAppReportParams;
diff --git a/src/libs/actions/Report.ts b/src/libs/actions/Report.ts
index fc8992eb88c3..4cd70d216740 100644
--- a/src/libs/actions/Report.ts
+++ b/src/libs/actions/Report.ts
@@ -3049,6 +3049,7 @@ function createNewReport(
isASAPSubmitBetaEnabled: boolean,
policyID?: string,
shouldNotifyNewAction = false,
+ shouldDismissEmptyReportsConfirmation?: boolean,
) {
// This will be fixed as part of https://github.com/Expensify/Expensify/issues/507850
// eslint-disable-next-line @typescript-eslint/no-deprecated
@@ -3067,9 +3068,21 @@ function createNewReport(
isASAPSubmitBetaEnabled,
);
+ if (shouldDismissEmptyReportsConfirmation) {
+ Onyx.merge(ONYXKEYS.NVP_EMPTY_REPORTS_CONFIRMATION_DISMISSED, true);
+ }
+
API.write(
WRITE_COMMANDS.CREATE_APP_REPORT,
- {reportName: optimisticReportName, type: CONST.REPORT.TYPE.EXPENSE, policyID, reportID: optimisticReportID, reportActionID, reportPreviewReportActionID},
+ {
+ reportName: optimisticReportName,
+ type: CONST.REPORT.TYPE.EXPENSE,
+ policyID,
+ reportID: optimisticReportID,
+ reportActionID,
+ reportPreviewReportActionID,
+ ...(shouldDismissEmptyReportsConfirmation ? {shouldDismissEmptyReportsConfirmation} : {}),
+ },
{optimisticData, successData, failureData},
);
if (shouldNotifyNewAction) {
diff --git a/src/pages/NewReportWorkspaceSelectionPage.tsx b/src/pages/NewReportWorkspaceSelectionPage.tsx
index e20c7d5e2415..743166aa8fe0 100644
--- a/src/pages/NewReportWorkspaceSelectionPage.tsx
+++ b/src/pages/NewReportWorkspaceSelectionPage.tsx
@@ -63,6 +63,7 @@ function NewReportWorkspaceSelectionPage({route}: NewReportWorkspaceSelectionPag
const isASAPSubmitBetaEnabled = isBetaEnabled(CONST.BETAS.ASAP_SUBMIT);
const hasViolations = hasViolationsReportUtils(undefined, transactionViolations);
const [activePolicyID] = useOnyx(ONYXKEYS.NVP_ACTIVE_POLICY_ID, {canBeMissing: true});
+ const [hasDismissedEmptyReportsConfirmation] = useOnyx(ONYXKEYS.NVP_EMPTY_REPORTS_CONFIRMATION_DISMISSED, {canBeMissing: true});
const [policies, fetchStatus] = useOnyx(ONYXKEYS.COLLECTION.POLICY, {canBeMissing: true});
const [allTransactions] = useOnyx(ONYXKEYS.COLLECTION.TRANSACTION, {canBeMissing: true});
@@ -109,8 +110,8 @@ function NewReportWorkspaceSelectionPage({route}: NewReportWorkspaceSelectionPag
);
const createReport = useCallback(
- (policyID: string) => {
- const optimisticReport = createNewReport(currentUserPersonalDetails, isASAPSubmitBetaEnabled, hasViolations, policyID);
+ (policyID: string, shouldDismissEmptyReportsConfirmation?: boolean) => {
+ const optimisticReport = createNewReport(currentUserPersonalDetails, isASAPSubmitBetaEnabled, hasViolations, policyID, false, shouldDismissEmptyReportsConfirmation);
const selectedTransactionsKeys = Object.keys(selectedTransactions);
if (isMovingExpenses && (!!selectedTransactionsKeys.length || !!selectedTransactionIDs.length)) {
@@ -160,14 +161,17 @@ function NewReportWorkspaceSelectionPage({route}: NewReportWorkspaceSelectionPag
],
);
- const handleConfirmCreateReport = useCallback(() => {
- if (!pendingPolicySelection?.policy.policyID) {
- return;
- }
+ const handleConfirmCreateReport = useCallback(
+ (shouldDismissEmptyReportsConfirmation: boolean) => {
+ if (!pendingPolicySelection?.policy.policyID) {
+ return;
+ }
- createReport(pendingPolicySelection.policy.policyID);
- setPendingPolicySelection(null);
- }, [createReport, pendingPolicySelection?.policy.policyID]);
+ createReport(pendingPolicySelection.policy.policyID, shouldDismissEmptyReportsConfirmation);
+ setPendingPolicySelection(null);
+ },
+ [createReport, pendingPolicySelection?.policy.policyID],
+ );
const handleCancelCreateReport = useCallback(() => {
setPendingPolicySelection(null);
@@ -195,7 +199,7 @@ function NewReportWorkspaceSelectionPage({route}: NewReportWorkspaceSelectionPag
if (!shouldShowEmptyReportConfirmation) {
// No empty report confirmation needed - create report directly and clear pending selection
// policyID is guaranteed to be defined by the check above
- createReport(policyID);
+ createReport(policyID, false);
setPendingPolicySelection(null);
return;
}
@@ -218,10 +222,10 @@ function NewReportWorkspaceSelectionPage({route}: NewReportWorkspaceSelectionPag
// Capture the decision about whether to show empty report confirmation
setPendingPolicySelection({
policy,
- shouldShowEmptyReportConfirmation: !!policiesWithEmptyReports?.[policy.policyID],
+ shouldShowEmptyReportConfirmation: !!policiesWithEmptyReports?.[policy.policyID] && hasDismissedEmptyReportsConfirmation !== true,
});
},
- [policiesWithEmptyReports],
+ [hasDismissedEmptyReportsConfirmation, policiesWithEmptyReports],
);
const hasPerDiemTransactions = useMemo(() => {
diff --git a/src/pages/Search/EmptySearchView.tsx b/src/pages/Search/EmptySearchView.tsx
index 36f2311e2f98..1fc50ee332d5 100644
--- a/src/pages/Search/EmptySearchView.tsx
+++ b/src/pages/Search/EmptySearchView.tsx
@@ -195,18 +195,32 @@ function EmptySearchViewContent({
canBeMissing: true,
selector: reportSummariesOnyxSelector,
});
- const hasEmptyReport = useMemo(() => hasEmptyReportsForPolicy(reportSummaries, defaultChatEnabledPolicyID, accountID), [accountID, defaultChatEnabledPolicyID, reportSummaries]);
+ const [hasDismissedEmptyReportsConfirmation] = useOnyx(ONYXKEYS.NVP_EMPTY_REPORTS_CONFIRMATION_DISMISSED, {canBeMissing: true});
+ const shouldShowEmptyReportConfirmation = useMemo(
+ () => hasEmptyReportsForPolicy(reportSummaries, defaultChatEnabledPolicyID, accountID) && hasDismissedEmptyReportsConfirmation !== true,
+ [accountID, defaultChatEnabledPolicyID, hasDismissedEmptyReportsConfirmation, reportSummaries],
+ );
- const handleCreateWorkspaceReport = useCallback(() => {
- if (!defaultChatEnabledPolicyID) {
- return;
- }
+ const handleCreateWorkspaceReport = useCallback(
+ (shouldDismissEmptyReportsConfirmation?: boolean) => {
+ if (!defaultChatEnabledPolicyID) {
+ return;
+ }
- const {reportID: createdReportID} = createNewReport(currentUserPersonalDetails, hasViolations, isASAPSubmitBetaEnabled, defaultChatEnabledPolicyID);
- Navigation.setNavigationActionToMicrotaskQueue(() => {
- Navigation.navigate(ROUTES.SEARCH_MONEY_REQUEST_REPORT.getRoute({reportID: createdReportID, backTo: Navigation.getActiveRoute()}));
- });
- }, [currentUserPersonalDetails, hasViolations, defaultChatEnabledPolicyID, isASAPSubmitBetaEnabled]);
+ const {reportID: createdReportID} = createNewReport(
+ currentUserPersonalDetails,
+ hasViolations,
+ isASAPSubmitBetaEnabled,
+ defaultChatEnabledPolicyID,
+ false,
+ shouldDismissEmptyReportsConfirmation,
+ );
+ Navigation.setNavigationActionToMicrotaskQueue(() => {
+ Navigation.navigate(ROUTES.SEARCH_MONEY_REQUEST_REPORT.getRoute({reportID: createdReportID, backTo: Navigation.getActiveRoute()}));
+ });
+ },
+ [currentUserPersonalDetails, hasViolations, defaultChatEnabledPolicyID, isASAPSubmitBetaEnabled],
+ );
const {openCreateReportConfirmation: openCreateReportFromSearch, CreateReportConfirmationModal} = useCreateEmptyReportConfirmation({
policyID: defaultChatEnabledPolicyID,
@@ -215,12 +229,12 @@ function EmptySearchViewContent({
});
const handleCreateReportClick = useCallback(() => {
- if (hasEmptyReport) {
+ if (shouldShowEmptyReportConfirmation) {
openCreateReportFromSearch();
} else {
- handleCreateWorkspaceReport();
+ handleCreateWorkspaceReport(false);
}
- }, [hasEmptyReport, handleCreateWorkspaceReport, openCreateReportFromSearch]);
+ }, [handleCreateWorkspaceReport, openCreateReportFromSearch, shouldShowEmptyReportConfirmation]);
const typeMenuItems = useMemo(() => {
return typeMenuSections.map((section) => section.menuItems).flat();
diff --git a/src/pages/Search/SearchTransactionsChangeReport.tsx b/src/pages/Search/SearchTransactionsChangeReport.tsx
index 6e48fa2879bd..370161f960d4 100644
--- a/src/pages/Search/SearchTransactionsChangeReport.tsx
+++ b/src/pages/Search/SearchTransactionsChangeReport.tsx
@@ -71,8 +71,8 @@ function SearchTransactionsChangeReport() {
return report?.ownerAccountID;
}, [selectedTransactions, selectedTransactionsKeys]);
- const createReportForPolicy = () => {
- const optimisticReport = createNewReport(currentUserPersonalDetails, hasViolations, isASAPSubmitBetaEnabled, policyForMovingExpensesID);
+ const createReportForPolicy = (shouldDismissEmptyReportsConfirmation?: boolean) => {
+ const optimisticReport = createNewReport(currentUserPersonalDetails, hasViolations, isASAPSubmitBetaEnabled, policyForMovingExpensesID, false, shouldDismissEmptyReportsConfirmation);
const reportNextStep = allReportNextSteps?.[`${ONYXKEYS.COLLECTION.NEXT_STEP}${optimisticReport.reportID}`];
setNavigationActionToMicrotaskQueue(() => {
changeTransactionsReport(
diff --git a/src/pages/home/report/ReportActionCompose/AttachmentPickerWithMenuItems.tsx b/src/pages/home/report/ReportActionCompose/AttachmentPickerWithMenuItems.tsx
index 5627058eff50..719ad5a2dda6 100644
--- a/src/pages/home/report/ReportActionCompose/AttachmentPickerWithMenuItems.tsx
+++ b/src/pages/home/report/ReportActionCompose/AttachmentPickerWithMenuItems.tsx
@@ -153,11 +153,15 @@ function AttachmentPickerWithMenuItems({
const isASAPSubmitBetaEnabled = isBetaEnabled(CONST.BETAS.ASAP_SUBMIT);
const hasViolations = hasViolationsReportUtils(undefined, transactionViolations);
const [accountID] = useOnyx(ONYXKEYS.SESSION, {selector: accountIDSelector, canBeMissing: true});
+ const [hasDismissedEmptyReportsConfirmation] = useOnyx(ONYXKEYS.NVP_EMPTY_REPORTS_CONFIRMATION_DISMISSED, {canBeMissing: true});
const [reportSummaries = getEmptyArray[number]>()] = useOnyx(ONYXKEYS.COLLECTION.REPORT, {
canBeMissing: true,
selector: reportSummariesOnyxSelector,
});
- const hasEmptyReport = useMemo(() => hasEmptyReportsForPolicy(reportSummaries, report?.policyID, accountID), [accountID, report?.policyID, reportSummaries]);
+ const shouldShowEmptyReportConfirmation = useMemo(
+ () => hasEmptyReportsForPolicy(reportSummaries, report?.policyID, accountID) && hasDismissedEmptyReportsConfirmation !== true,
+ [accountID, hasDismissedEmptyReportsConfirmation, report?.policyID, reportSummaries],
+ );
const selectOption = useCallback(
(onSelected: () => void, shouldRestrictAction: boolean) => {
@@ -174,19 +178,20 @@ function AttachmentPickerWithMenuItems({
const {openCreateReportConfirmation, CreateReportConfirmationModal} = useCreateEmptyReportConfirmation({
policyID: report?.policyID,
policyName: policy?.name ?? '',
- onConfirm: () => selectOption(() => createNewReport(currentUserPersonalDetails, isASAPSubmitBetaEnabled, hasViolations, report?.policyID, true), true),
+ onConfirm: (shouldDismissEmptyReportsConfirmation) =>
+ selectOption(() => createNewReport(currentUserPersonalDetails, isASAPSubmitBetaEnabled, hasViolations, report?.policyID, true, shouldDismissEmptyReportsConfirmation), true),
});
const openCreateReportConfirmationRef = useRef(openCreateReportConfirmation);
openCreateReportConfirmationRef.current = openCreateReportConfirmation;
const handleCreateReport = useCallback(() => {
- if (hasEmptyReport) {
+ if (shouldShowEmptyReportConfirmation) {
openCreateReportConfirmationRef.current();
} else {
- createNewReport(currentUserPersonalDetails, isASAPSubmitBetaEnabled, hasViolations, report?.policyID, true);
+ createNewReport(currentUserPersonalDetails, isASAPSubmitBetaEnabled, hasViolations, report?.policyID, true, false);
}
- }, [currentUserPersonalDetails, hasEmptyReport, isASAPSubmitBetaEnabled, hasViolations, report?.policyID]);
+ }, [currentUserPersonalDetails, isASAPSubmitBetaEnabled, hasViolations, report?.policyID, shouldShowEmptyReportConfirmation]);
const teacherUnitePolicyID = isProduction ? CONST.TEACHERS_UNITE.PROD_POLICY_ID : CONST.TEACHERS_UNITE.TEST_POLICY_ID;
const isTeachersUniteReport = report?.policyID === teacherUnitePolicyID;
diff --git a/src/pages/home/sidebar/FloatingActionButtonAndPopover.tsx b/src/pages/home/sidebar/FloatingActionButtonAndPopover.tsx
index c1daafa1cb3b..4b1ebf7534dc 100644
--- a/src/pages/home/sidebar/FloatingActionButtonAndPopover.tsx
+++ b/src/pages/home/sidebar/FloatingActionButtonAndPopover.tsx
@@ -196,30 +196,42 @@ function FloatingActionButtonAndPopover({onHideCreateMenu, onShowCreateMenu, ref
const defaultChatEnabledPolicyID = defaultChatEnabledPolicy?.id;
- const hasEmptyReportForDefaultChatEnabledPolicy = useMemo(
- () => hasEmptyReportsForPolicy(reportSummaries, defaultChatEnabledPolicyID, session?.accountID),
- [defaultChatEnabledPolicyID, reportSummaries, session?.accountID],
+ const [hasDismissedEmptyReportsConfirmation] = useOnyx(ONYXKEYS.NVP_EMPTY_REPORTS_CONFIRMATION_DISMISSED, {canBeMissing: true});
+
+ const shouldShowEmptyReportConfirmationForDefaultChatEnabledPolicy = useMemo(
+ () => hasEmptyReportsForPolicy(reportSummaries, defaultChatEnabledPolicyID, session?.accountID) && hasDismissedEmptyReportsConfirmation !== true,
+ [defaultChatEnabledPolicyID, hasDismissedEmptyReportsConfirmation, reportSummaries, session?.accountID],
);
- const handleCreateWorkspaceReport = useCallback(() => {
- if (!defaultChatEnabledPolicyID) {
- return;
- }
+ const handleCreateWorkspaceReport = useCallback(
+ (shouldDismissEmptyReportsConfirmation?: boolean) => {
+ if (!defaultChatEnabledPolicyID) {
+ return;
+ }
- if (isReportInSearch) {
- clearLastSearchParams();
- }
+ if (isReportInSearch) {
+ clearLastSearchParams();
+ }
- const {reportID: createdReportID} = createNewReport(currentUserPersonalDetails, hasViolations, isASAPSubmitBetaEnabled, defaultChatEnabledPolicyID);
- Navigation.setNavigationActionToMicrotaskQueue(() => {
- Navigation.navigate(
- isSearchTopmostFullScreenRoute()
- ? ROUTES.SEARCH_MONEY_REQUEST_REPORT.getRoute({reportID: createdReportID, backTo: Navigation.getActiveRoute()})
- : ROUTES.REPORT_WITH_ID.getRoute(createdReportID, undefined, undefined, Navigation.getActiveRoute()),
- {forceReplace: isReportInSearch},
+ const {reportID: createdReportID} = createNewReport(
+ currentUserPersonalDetails,
+ hasViolations,
+ isASAPSubmitBetaEnabled,
+ defaultChatEnabledPolicyID,
+ false,
+ shouldDismissEmptyReportsConfirmation,
);
- });
- }, [currentUserPersonalDetails, hasViolations, defaultChatEnabledPolicyID, isASAPSubmitBetaEnabled, isReportInSearch]);
+ Navigation.setNavigationActionToMicrotaskQueue(() => {
+ Navigation.navigate(
+ isSearchTopmostFullScreenRoute()
+ ? ROUTES.SEARCH_MONEY_REQUEST_REPORT.getRoute({reportID: createdReportID, backTo: Navigation.getActiveRoute()})
+ : ROUTES.REPORT_WITH_ID.getRoute(createdReportID, undefined, undefined, Navigation.getActiveRoute()),
+ {forceReplace: isReportInSearch},
+ );
+ });
+ },
+ [currentUserPersonalDetails, hasViolations, defaultChatEnabledPolicyID, isASAPSubmitBetaEnabled, isReportInSearch],
+ );
const {openCreateReportConfirmation: openFabCreateReportConfirmation, CreateReportConfirmationModal: FabCreateReportConfirmationModal} = useCreateEmptyReportConfirmation({
policyID: defaultChatEnabledPolicyID,
@@ -556,10 +568,10 @@ function FloatingActionButtonAndPopover({onHideCreateMenu, onShowCreateMenu, ref
if (!shouldRestrictUserBillableActions(workspaceIDForReportCreation)) {
// Check if empty report confirmation should be shown
- if (hasEmptyReportForDefaultChatEnabledPolicy) {
+ if (shouldShowEmptyReportConfirmationForDefaultChatEnabledPolicy) {
openFabCreateReportConfirmation();
} else {
- handleCreateWorkspaceReport();
+ handleCreateWorkspaceReport(false);
}
return;
}
diff --git a/src/pages/iou/request/step/IOURequestEditReport.tsx b/src/pages/iou/request/step/IOURequestEditReport.tsx
index 3ef9e681e4e4..403e8da23945 100644
--- a/src/pages/iou/request/step/IOURequestEditReport.tsx
+++ b/src/pages/iou/request/step/IOURequestEditReport.tsx
@@ -97,12 +97,12 @@ function IOURequestEditReport({route}: IOURequestEditReportProps) {
Navigation.dismissModal();
};
- const createReportForPolicy = () => {
+ const createReportForPolicy = (shouldDismissEmptyReportsConfirmation?: boolean) => {
if (!policyForMovingExpensesID) {
return;
}
- const optimisticReport = createNewReport(currentUserPersonalDetails, hasViolations, isASAPSubmitBetaEnabled, policyForMovingExpensesID);
+ const optimisticReport = createNewReport(currentUserPersonalDetails, hasViolations, isASAPSubmitBetaEnabled, policyForMovingExpensesID, false, shouldDismissEmptyReportsConfirmation);
selectReport({value: optimisticReport.reportID}, optimisticReport);
};
diff --git a/src/pages/iou/request/step/IOURequestStepReport.tsx b/src/pages/iou/request/step/IOURequestStepReport.tsx
index 6ba6bd5ff2af..6d0846d66581 100644
--- a/src/pages/iou/request/step/IOURequestStepReport.tsx
+++ b/src/pages/iou/request/step/IOURequestStepReport.tsx
@@ -174,12 +174,12 @@ function IOURequestStepReport({route, transaction}: IOURequestStepReportProps) {
// eslint-disable-next-line rulesdir/no-negated-variables
const shouldShowNotFoundPage = useShowNotFoundPageInIOUStep(action, iouType, reportActionID, reportOrDraftReport, transaction);
- const createReportForPolicy = () => {
+ const createReportForPolicy = (shouldDismissEmptyReportsConfirmation?: boolean) => {
if (!policyForMovingExpensesID) {
return;
}
- const optimisticReport = createNewReport(currentUserPersonalDetails, hasViolations, isASAPSubmitBetaEnabled, policyForMovingExpensesID);
+ const optimisticReport = createNewReport(currentUserPersonalDetails, hasViolations, isASAPSubmitBetaEnabled, policyForMovingExpensesID, false, shouldDismissEmptyReportsConfirmation);
handleRegularReportSelection({value: optimisticReport.reportID}, optimisticReport);
};
From 31aeae9a08bd49a4920285c6b0a7afa6b276b29b Mon Sep 17 00:00:00 2001
From: ShridharGoel <35566748+ShridharGoel@users.noreply.github.com>
Date: Tue, 18 Nov 2025 23:40:26 +0530
Subject: [PATCH 2/8] Lint fixes
---
src/hooks/useCreateEmptyReportConfirmation.tsx | 2 +-
src/languages/es.ts | 1 +
2 files changed, 2 insertions(+), 1 deletion(-)
diff --git a/src/hooks/useCreateEmptyReportConfirmation.tsx b/src/hooks/useCreateEmptyReportConfirmation.tsx
index a0cfb8319cf4..e864009f62ed 100644
--- a/src/hooks/useCreateEmptyReportConfirmation.tsx
+++ b/src/hooks/useCreateEmptyReportConfirmation.tsx
@@ -96,7 +96,7 @@ export default function useCreateEmptyReportConfirmation({policyName, onConfirm,
accessibilityLabel={translate('report.newReport.emptyReportConfirmationDontShowAgain')}
label={translate('report.newReport.emptyReportConfirmationDontShowAgain')}
isChecked={shouldDismissEmptyReportsConfirmation}
- onInputChange={(value) => setShouldDismissEmptyReportsConfirmation(Boolean(value))}
+ onInputChange={(value) => setShouldDismissEmptyReportsConfirmation(!!value)}
/>
),
diff --git a/src/languages/es.ts b/src/languages/es.ts
index b96ee87a3fce..6e2b18ddd3a7 100644
--- a/src/languages/es.ts
+++ b/src/languages/es.ts
@@ -6291,6 +6291,7 @@ ${amount} para ${merchant} - ${date}`,
emptyReportConfirmationPrompt: ({workspaceName}: {workspaceName: string}) =>
`¿Estás seguro de que quieres crear otro informe en ${workspaceName}? Puedes acceder a tus informes vacíos en`,
emptyReportConfirmationPromptLink: 'Informes',
+ emptyReportConfirmationDontShowAgain: 'No volver a mostrar',
genericWorkspaceName: 'este espacio de trabajo',
},
genericCreateReportFailureMessage: 'Error inesperado al crear el chat. Por favor, inténtalo más tarde.',
From 73f8b4fe6d38d5616f5ffa5cf7954126010f45e2 Mon Sep 17 00:00:00 2001
From: ShridharGoel <35566748+ShridharGoel@users.noreply.github.com>
Date: Wed, 19 Nov 2025 00:30:55 +0530
Subject: [PATCH 3/8] Copy updates
---
src/languages/en.ts | 2 +-
src/languages/es.ts | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/src/languages/en.ts b/src/languages/en.ts
index 7aa6eefd6741..ca423c45a427 100755
--- a/src/languages/en.ts
+++ b/src/languages/en.ts
@@ -6636,7 +6636,7 @@ const translations = {
emptyReportConfirmationPrompt: ({workspaceName}: {workspaceName: string}) =>
`Are you sure you want to create another report in ${workspaceName}? You can access your empty reports in`,
emptyReportConfirmationPromptLink: 'Reports',
- emptyReportConfirmationDontShowAgain: "Don't show this again",
+ emptyReportConfirmationDontShowAgain: "Don't show me this again",
genericWorkspaceName: 'this workspace',
},
genericCreateReportFailureMessage: 'Unexpected error creating this chat. Please try again later.',
diff --git a/src/languages/es.ts b/src/languages/es.ts
index 6e2b18ddd3a7..083313b1ea8d 100644
--- a/src/languages/es.ts
+++ b/src/languages/es.ts
@@ -6291,7 +6291,7 @@ ${amount} para ${merchant} - ${date}`,
emptyReportConfirmationPrompt: ({workspaceName}: {workspaceName: string}) =>
`¿Estás seguro de que quieres crear otro informe en ${workspaceName}? Puedes acceder a tus informes vacíos en`,
emptyReportConfirmationPromptLink: 'Informes',
- emptyReportConfirmationDontShowAgain: 'No volver a mostrar',
+ emptyReportConfirmationDontShowAgain: 'No me muestres esto otra vez',
genericWorkspaceName: 'este espacio de trabajo',
},
genericCreateReportFailureMessage: 'Error inesperado al crear el chat. Por favor, inténtalo más tarde.',
From e43d59abdc2da57927fb972d8bbddde803f259f7 Mon Sep 17 00:00:00 2001
From: ShridharGoel <35566748+ShridharGoel@users.noreply.github.com>
Date: Tue, 25 Nov 2025 03:34:00 +0530
Subject: [PATCH 4/8] Lint fix
---
src/hooks/useCreateEmptyReportConfirmation.tsx | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/hooks/useCreateEmptyReportConfirmation.tsx b/src/hooks/useCreateEmptyReportConfirmation.tsx
index e864009f62ed..8e1e71cd9f53 100644
--- a/src/hooks/useCreateEmptyReportConfirmation.tsx
+++ b/src/hooks/useCreateEmptyReportConfirmation.tsx
@@ -5,7 +5,7 @@ import CheckboxWithLabel from '@components/CheckboxWithLabel';
import ConfirmModal from '@components/ConfirmModal';
import Text from '@components/Text';
import TextLink from '@components/TextLink';
-import useThemeStyles from '@hooks/useThemeStyles';
+import useThemeStyles from './useThemeStyles';
import Navigation from '@libs/Navigation/Navigation';
import {buildCannedSearchQuery} from '@libs/SearchQueryUtils';
import CONST from '@src/CONST';
From 064ec7b0a20284221d3ac4ff5a6ba482085b375b Mon Sep 17 00:00:00 2001
From: ShridharGoel <35566748+ShridharGoel@users.noreply.github.com>
Date: Wed, 26 Nov 2025 09:56:10 +0530
Subject: [PATCH 5/8] Lint fix
---
src/hooks/useCreateEmptyReportConfirmation.tsx | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/hooks/useCreateEmptyReportConfirmation.tsx b/src/hooks/useCreateEmptyReportConfirmation.tsx
index 8e1e71cd9f53..49ca7123fe6e 100644
--- a/src/hooks/useCreateEmptyReportConfirmation.tsx
+++ b/src/hooks/useCreateEmptyReportConfirmation.tsx
@@ -5,11 +5,11 @@ import CheckboxWithLabel from '@components/CheckboxWithLabel';
import ConfirmModal from '@components/ConfirmModal';
import Text from '@components/Text';
import TextLink from '@components/TextLink';
-import useThemeStyles from './useThemeStyles';
import Navigation from '@libs/Navigation/Navigation';
import {buildCannedSearchQuery} from '@libs/SearchQueryUtils';
import CONST from '@src/CONST';
import ROUTES from '@src/ROUTES';
+import useThemeStyles from './useThemeStyles';
import useLocalize from './useLocalize';
type UseCreateEmptyReportConfirmationParams = {
From 1a833b7c64561bf99eb172387c8e8769f6220b3a Mon Sep 17 00:00:00 2001
From: ShridharGoel <35566748+ShridharGoel@users.noreply.github.com>
Date: Wed, 26 Nov 2025 10:17:27 +0530
Subject: [PATCH 6/8] Prettier fix
---
src/hooks/useCreateEmptyReportConfirmation.tsx | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/hooks/useCreateEmptyReportConfirmation.tsx b/src/hooks/useCreateEmptyReportConfirmation.tsx
index 49ca7123fe6e..ec278d87d435 100644
--- a/src/hooks/useCreateEmptyReportConfirmation.tsx
+++ b/src/hooks/useCreateEmptyReportConfirmation.tsx
@@ -9,8 +9,8 @@ import Navigation from '@libs/Navigation/Navigation';
import {buildCannedSearchQuery} from '@libs/SearchQueryUtils';
import CONST from '@src/CONST';
import ROUTES from '@src/ROUTES';
-import useThemeStyles from './useThemeStyles';
import useLocalize from './useLocalize';
+import useThemeStyles from './useThemeStyles';
type UseCreateEmptyReportConfirmationParams = {
/** The policy ID for which the report is being created */
From 933fe46e1ab74b228e5fecdface00fc8a0d7dd03 Mon Sep 17 00:00:00 2001
From: ShridharGoel <35566748+ShridharGoel@users.noreply.github.com>
Date: Thu, 4 Dec 2025 22:46:22 +0530
Subject: [PATCH 7/8] Lint fixes
---
src/hooks/useSearchTypeMenuSections.ts | 5 +++--
src/pages/home/sidebar/FloatingActionButtonAndPopover.tsx | 4 +++-
2 files changed, 6 insertions(+), 3 deletions(-)
diff --git a/src/hooks/useSearchTypeMenuSections.ts b/src/hooks/useSearchTypeMenuSections.ts
index 46cf98532584..a533efea4a06 100644
--- a/src/hooks/useSearchTypeMenuSections.ts
+++ b/src/hooks/useSearchTypeMenuSections.ts
@@ -52,8 +52,9 @@ const useSearchTypeMenuSections = () => {
const [savedSearches] = useOnyx(ONYXKEYS.SAVED_SEARCHES, {canBeMissing: true});
const [allTransactionDrafts] = useOnyx(ONYXKEYS.COLLECTION.TRANSACTION_DRAFT, {canBeMissing: true});
const shouldRedirectToExpensifyClassic = useMemo(() => areAllGroupPoliciesExpenseChatDisabled(allPolicies ?? {}), [allPolicies]);
- const [pendingReportCreation, setPendingReportCreation] = useState<{policyID: string; policyName?: string; onConfirm: () => void} | null>(null);
- const [hasDismissedEmptyReportsConfirmation] = useOnyx(ONYXKEYS.NVP_EMPTY_REPORTS_CONFIRMATION_DISMISSED, {canBeMissing: true});
+ const [pendingReportCreation, setPendingReportCreation] = useState<{policyID: string; policyName?: string; onConfirm: (shouldDismissEmptyReportsConfirmation: boolean) => void} | null>(
+ null,
+ );
const handlePendingConfirm = useCallback(
(shouldDismissEmptyReportsConfirmation: boolean) => {
diff --git a/src/pages/home/sidebar/FloatingActionButtonAndPopover.tsx b/src/pages/home/sidebar/FloatingActionButtonAndPopover.tsx
index 1ff51c5282bf..9b767d343cca 100644
--- a/src/pages/home/sidebar/FloatingActionButtonAndPopover.tsx
+++ b/src/pages/home/sidebar/FloatingActionButtonAndPopover.tsx
@@ -54,7 +54,7 @@ import {getQuickActionIcon, getQuickActionTitle, isQuickActionAllowed} from '@li
import {
generateReportID,
getDisplayNameForParticipant,
- getIcons,
+ getIcons, // eslint-disable-next-line @typescript-eslint/no-deprecated
getReportName,
getWorkspaceChats,
hasEmptyReportsForPolicy,
@@ -283,6 +283,7 @@ function FloatingActionButtonAndPopover({onHideCreateMenu, onShowCreateMenu, ref
}, [isValidReport, quickActionAvatars, personalDetails, quickAction?.action]);
const quickActionSubtitle = useMemo(() => {
+ // eslint-disable-next-line @typescript-eslint/no-deprecated
return !hideQABSubtitle ? (getReportName(quickActionReport, quickActionPolicy, undefined, personalDetails) ?? translate('quickAction.updateDestination')) : '';
// eslint-disable-next-line react-compiler/react-compiler
// eslint-disable-next-line react-hooks/exhaustive-deps
@@ -479,6 +480,7 @@ function FloatingActionButtonAndPopover({onHideCreateMenu, onShowCreateMenu, ref
...baseQuickAction,
icon: Expensicons.ReceiptScan,
text: translate('quickAction.scanReceipt'),
+ // eslint-disable-next-line @typescript-eslint/no-deprecated
description: getReportName(policyChatForActivePolicy),
shouldCallAfterModalHide: shouldUseNarrowLayout,
onSelected,
From 715beca1af848687e6298d49ab48439b95b2ff8c Mon Sep 17 00:00:00 2001
From: ShridharGoel <35566748+ShridharGoel@users.noreply.github.com>
Date: Fri, 5 Dec 2025 01:20:43 +0530
Subject: [PATCH 8/8] Add translations
---
src/languages/de.ts | 3 ++-
src/languages/fr.ts | 3 ++-
src/languages/it.ts | 3 ++-
src/languages/ja.ts | 1 +
src/languages/nl.ts | 1 +
src/languages/pl.ts | 1 +
src/languages/pt-BR.ts | 1 +
src/languages/zh-hans.ts | 1 +
8 files changed, 11 insertions(+), 3 deletions(-)
diff --git a/src/languages/de.ts b/src/languages/de.ts
index bc1a19e72f0e..1b5b526f13be 100644
--- a/src/languages/de.ts
+++ b/src/languages/de.ts
@@ -2558,7 +2558,7 @@ ${
integrationName && CONST.connectionsVideoPaths[integrationName]
? dedent(`[Zur Buchhaltung](${workspaceAccountingLink}).
-`)
+ `)
: `[Zur Buchhaltung](${workspaceAccountingLink}).`
}`),
},
@@ -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 892253861600..9b159f73e462 100644
--- a/src/languages/fr.ts
+++ b/src/languages/fr.ts
@@ -2558,7 +2558,7 @@ ${
integrationName && CONST.connectionsVideoPaths[integrationName]
? dedent(`[Accéder à la comptabilité](${workspaceAccountingLink}).
- `)
+`)
: `[Accéder à la comptabilité](${workspaceAccountingLink}).`
}`),
},
@@ -6672,6 +6672,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 5c7601166a27..ef1b5fd25031 100644
--- a/src/languages/it.ts
+++ b/src/languages/it.ts
@@ -2546,7 +2546,7 @@ ${
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 2b22bc05f810..0c69702161d6 100644
--- a/src/languages/ja.ts
+++ b/src/languages/ja.ts
@@ -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 57ec44efb676..d55ef6efd71f 100644
--- a/src/languages/nl.ts
+++ b/src/languages/nl.ts
@@ -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 c918fef6a818..6dbe0981d18d 100644
--- a/src/languages/pl.ts
+++ b/src/languages/pl.ts
@@ -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 3ef34b54a2bb..2364c07f9061 100644
--- a/src/languages/pt-BR.ts
+++ b/src/languages/pt-BR.ts
@@ -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 f742e01f3543..b4d158edad3c 100644
--- a/src/languages/zh-hans.ts
+++ b/src/languages/zh-hans.ts
@@ -6496,6 +6496,7 @@ ${
emptyReportConfirmationPrompt: ({workspaceName}: {workspaceName: string}) => `确定要在 ${workspaceName} 中再创建一个报告吗?你可以在以下位置访问你的空报告`,
emptyReportConfirmationPromptLink: '报告',
genericWorkspaceName: '此工作区',
+ emptyReportConfirmationDontShowAgain: '不再显示此内容',
},
genericCreateReportFailureMessage: '创建此聊天时出现意外错误。请稍后再试。',
genericAddCommentFailureMessage: '发表评论时出现意外错误。请稍后再试。',