diff --git a/Mobile-Expensify b/Mobile-Expensify
index a351b6c3b6307..5ea99ceae53c4 160000
--- a/Mobile-Expensify
+++ b/Mobile-Expensify
@@ -1 +1 @@
-Subproject commit a351b6c3b63074ccf2b02977462bb0e85a728910
+Subproject commit 5ea99ceae53c42c78c0944bf9f8cb2bfc74fdf54
diff --git a/android/app/build.gradle b/android/app/build.gradle
index d5ea7e7ea5fe2..2cf2f3dd40907 100644
--- a/android/app/build.gradle
+++ b/android/app/build.gradle
@@ -114,8 +114,8 @@ android {
minSdkVersion rootProject.ext.minSdkVersion
targetSdkVersion rootProject.ext.targetSdkVersion
multiDexEnabled rootProject.ext.multiDexEnabled
- versionCode 1009014001
- versionName "9.1.40-1"
+ versionCode 1009014002
+ versionName "9.1.40-2"
// Supported language variants must be declared here to avoid from being removed during the compilation.
// This also helps us to not include unnecessary language variants in the APK.
resConfigs "en", "es"
diff --git a/ios/NewExpensify/Info.plist b/ios/NewExpensify/Info.plist
index 253ad849e4478..9821495a207a4 100644
--- a/ios/NewExpensify/Info.plist
+++ b/ios/NewExpensify/Info.plist
@@ -44,7 +44,7 @@
CFBundleVersion
- 9.1.40.1
+ 9.1.40.2
FullStory
OrgId
diff --git a/ios/NotificationServiceExtension/Info.plist b/ios/NotificationServiceExtension/Info.plist
index 006fe8d9b866d..5b7d9e40cf701 100644
--- a/ios/NotificationServiceExtension/Info.plist
+++ b/ios/NotificationServiceExtension/Info.plist
@@ -13,7 +13,7 @@
CFBundleShortVersionString
9.1.40
CFBundleVersion
- 9.1.40.1
+ 9.1.40.2
NSExtension
NSExtensionPointIdentifier
diff --git a/ios/ShareViewController/Info.plist b/ios/ShareViewController/Info.plist
index 48be2137fb83e..08e7109d1c854 100644
--- a/ios/ShareViewController/Info.plist
+++ b/ios/ShareViewController/Info.plist
@@ -13,7 +13,7 @@
CFBundleShortVersionString
9.1.40
CFBundleVersion
- 9.1.40.1
+ 9.1.40.2
NSExtension
NSExtensionAttributes
diff --git a/package-lock.json b/package-lock.json
index 7fd0611d77970..de89aa60bd228 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -1,12 +1,12 @@
{
"name": "new.expensify",
- "version": "9.1.40-1",
+ "version": "9.1.40-2",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "new.expensify",
- "version": "9.1.40-1",
+ "version": "9.1.40-2",
"hasInstallScript": true,
"license": "MIT",
"dependencies": {
diff --git a/package.json b/package.json
index b7b0a2e3926ac..49a13235304eb 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
{
"name": "new.expensify",
- "version": "9.1.40-1",
+ "version": "9.1.40-2",
"author": "Expensify, Inc.",
"homepage": "https://new.expensify.com",
"description": "New Expensify is the next generation of Expensify: a reimagination of payments based atop a foundation of chat.",
diff --git a/src/components/MoneyReportHeader.tsx b/src/components/MoneyReportHeader.tsx
index 549ca628f965e..a0c1b737622de 100644
--- a/src/components/MoneyReportHeader.tsx
+++ b/src/components/MoneyReportHeader.tsx
@@ -201,7 +201,13 @@ function MoneyReportHeader({policy, report: moneyRequestReport, transactionThrea
const {selectedTransactionsID, setSelectedTransactionsID} = useMoneyRequestReportContext();
- const selectedTransactionsOptions = useSelectedTransactionsActions({report: moneyRequestReport, reportActions, session, onExportFailed: () => setIsDownloadErrorModalVisible(true)});
+ const selectedTransactionsOptions = useSelectedTransactionsActions({
+ report: moneyRequestReport,
+ reportActions,
+ allTransactionsLength: transactions.length,
+ session,
+ onExportFailed: () => setIsDownloadErrorModalVisible(true),
+ });
const shouldShowSelectedTransactionsButton = !!selectedTransactionsOptions.length && !transactionThreadReportID;
diff --git a/src/components/MoneyReportHeaderOld.tsx b/src/components/MoneyReportHeaderOld.tsx
index 923e976d2edc7..64c0653950f65 100644
--- a/src/components/MoneyReportHeaderOld.tsx
+++ b/src/components/MoneyReportHeaderOld.tsx
@@ -136,7 +136,7 @@ function MoneyReportHeaderOld({policy, report: moneyRequestReport, transactionTh
}
return reportActions.find((action): action is OnyxTypes.ReportAction => action.reportActionID === transactionThreadReport.parentReportActionID);
}, [reportActions, transactionThreadReport?.parentReportActionID]);
- const [transactions] = useOnyx(ONYXKEYS.COLLECTION.TRANSACTION, {
+ const [transactions = []] = useOnyx(ONYXKEYS.COLLECTION.TRANSACTION, {
selector: (_transactions) => reportTransactionsSelector(_transactions, moneyRequestReport?.reportID),
initialValue: [],
canBeMissing: true,
@@ -197,7 +197,13 @@ function MoneyReportHeaderOld({policy, report: moneyRequestReport, transactionTh
const {selectedTransactionsID, setSelectedTransactionsID} = useMoneyRequestReportContext();
- const selectedTransactionsOptions = useSelectedTransactionsActions({report: moneyRequestReport, reportActions, session, onExportFailed: () => setIsDownloadErrorModalVisible(true)});
+ const selectedTransactionsOptions = useSelectedTransactionsActions({
+ report: moneyRequestReport,
+ reportActions,
+ allTransactionsLength: transactions.length,
+ session,
+ onExportFailed: () => setIsDownloadErrorModalVisible(true),
+ });
const shouldShowSelectedTransactionsButton = !!selectedTransactionsOptions.length && !transactionThreadReportID;
diff --git a/src/components/MoneyRequestReportView/MoneyRequestReportActionsList.tsx b/src/components/MoneyRequestReportView/MoneyRequestReportActionsList.tsx
index 280c52a2a7de3..b9449540b7e7e 100644
--- a/src/components/MoneyRequestReportView/MoneyRequestReportActionsList.tsx
+++ b/src/components/MoneyRequestReportView/MoneyRequestReportActionsList.tsx
@@ -119,7 +119,7 @@ function MoneyRequestReportActionsList({report, policy, reportActions = [], tran
const {selectedTransactionsID, setSelectedTransactionsID} = useMoneyRequestReportContext();
const {selectionMode} = useMobileSelectionMode();
- const selectedTransactionsOptions = useSelectedTransactionsActions({report, reportActions, session, onExportFailed: () => setIsDownloadErrorModalVisible(true)});
+ const selectedTransactionsOptions = useSelectedTransactionsActions({report, reportActions, allTransactionsLength: transactions.length, session, onExportFailed: () => setIsDownloadErrorModalVisible(true)});
// We are reversing actions because in this View we are starting at the top and don't use Inverted list
const visibleReportActions = useMemo(() => {
diff --git a/src/hooks/useSelectedTransactionsActions.ts b/src/hooks/useSelectedTransactionsActions.ts
index 75bcb7d9171bc..394d73fd00432 100644
--- a/src/hooks/useSelectedTransactionsActions.ts
+++ b/src/hooks/useSelectedTransactionsActions.ts
@@ -2,6 +2,7 @@ import {useMemo} from 'react';
import * as Expensicons from '@components/Icon/Expensicons';
import {useMoneyRequestReportContext} from '@components/MoneyRequestReportView/MoneyRequestReportContext';
import {deleteMoneyRequest, unholdRequest} from '@libs/actions/IOU';
+import {turnOffMobileSelectionMode} from '@libs/actions/MobileSelectionMode';
import {exportReportToCSV} from '@libs/actions/Report';
import Navigation from '@libs/Navigation/Navigation';
import {getIOUActionForTransactionID, getOriginalMessage, isDeletedAction, isMoneyRequestAction} from '@libs/ReportActionsUtils';
@@ -16,7 +17,19 @@ import useLocalize from './useLocalize';
const HOLD = 'HOLD';
const UNHOLD = 'UNHOLD';
-function useSelectedTransactionsActions({report, reportActions, session, onExportFailed}: {report?: Report; reportActions: ReportAction[]; session?: Session; onExportFailed?: () => void}) {
+function useSelectedTransactionsActions({
+ report,
+ reportActions,
+ allTransactionsLength,
+ session,
+ onExportFailed,
+}: {
+ report?: Report;
+ reportActions: ReportAction[];
+ allTransactionsLength: number;
+ session?: Session;
+ onExportFailed?: () => void;
+}) {
const {selectedTransactionsID, setSelectedTransactionsID} = useMoneyRequestReportContext();
const {translate} = useLocalize();
@@ -123,11 +136,14 @@ function useSelectedTransactionsActions({report, reportActions, session, onExpor
transactionsWithActions.forEach(({transactionID, action}) => action && deleteMoneyRequest(transactionID, action));
setSelectedTransactionsID([]);
+ if (allTransactionsLength - transactionsWithActions.length <= 1) {
+ turnOffMobileSelectionMode();
+ }
},
});
}
return options;
- }, [onExportFailed, report, reportActions, selectedTransactionsID, session?.accountID, setSelectedTransactionsID, translate]);
+ }, [onExportFailed, report, reportActions, selectedTransactionsID, session?.accountID, setSelectedTransactionsID, translate, allTransactionsLength]);
}
export default useSelectedTransactionsActions;