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;