From 509baa59add30fbe37f7c6c46a459bc2483413e5 Mon Sep 17 00:00:00 2001 From: Jan Nowakowski Date: Tue, 6 May 2025 13:21:18 +0200 Subject: [PATCH] Turn off selection mode when one transaction is left --- src/components/MoneyReportHeader.tsx | 8 +++++++- src/components/MoneyReportHeaderOld.tsx | 10 ++++++++-- .../MoneyRequestReportActionsList.tsx | 2 +- src/hooks/useSelectedTransactionsActions.ts | 20 +++++++++++++++++-- 4 files changed, 34 insertions(+), 6 deletions(-) diff --git a/src/components/MoneyReportHeader.tsx b/src/components/MoneyReportHeader.tsx index 0bb689961fb25..6a6b27eacdcae 100644 --- a/src/components/MoneyReportHeader.tsx +++ b/src/components/MoneyReportHeader.tsx @@ -206,7 +206,13 @@ function MoneyReportHeader({policy, report: moneyRequestReport, transactionThrea handleDeleteTransactions, isDeleteModalVisible: hookDeleteModalVisible, hideDeleteModal, - } = useSelectedTransactionsActions({report: moneyRequestReport, reportActions, session, onExportFailed: () => setIsDownloadErrorModalVisible(true)}); + } = 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 4b38bb4ff0477..6bca05419a81c 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, @@ -202,7 +202,13 @@ function MoneyReportHeaderOld({policy, report: moneyRequestReport, transactionTh handleDeleteTransactions, isDeleteModalVisible, hideDeleteModal, - } = useSelectedTransactionsActions({report: moneyRequestReport, reportActions, session, onExportFailed: () => setIsDownloadErrorModalVisible(true)}); + } = 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 df05fa47c962f..a69f78e77198f 100644 --- a/src/components/MoneyRequestReportView/MoneyRequestReportActionsList.tsx +++ b/src/components/MoneyRequestReportView/MoneyRequestReportActionsList.tsx @@ -125,7 +125,7 @@ function MoneyRequestReportActionsList({report, policy, reportActions = [], tran handleDeleteTransactions, isDeleteModalVisible, hideDeleteModal, - } = useSelectedTransactionsActions({report, reportActions, session, onExportFailed: () => setIsDownloadErrorModalVisible(true)}); + } = 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 d9f7d1535e616..577380a506857 100644 --- a/src/hooks/useSelectedTransactionsActions.ts +++ b/src/hooks/useSelectedTransactionsActions.ts @@ -2,6 +2,7 @@ import {useCallback, useMemo, useState} 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(); const [isDeleteModalVisible, setIsDeleteModalVisible] = useState(false); @@ -34,8 +47,11 @@ function useSelectedTransactionsActions({report, reportActions, session, onExpor transactionsWithActions.forEach(({transactionID, action}) => action && deleteMoneyRequest(transactionID, action)); setSelectedTransactionsID([]); + if (allTransactionsLength - transactionsWithActions.length <= 1) { + turnOffMobileSelectionMode(); + } setIsDeleteModalVisible(false); - }, [reportActions, selectedTransactionsID, setSelectedTransactionsID]); + }, [allTransactionsLength, reportActions, selectedTransactionsID, setSelectedTransactionsID]); const showDeleteModal = useCallback(() => { setIsDeleteModalVisible(true);