diff --git a/src/components/Search/index.tsx b/src/components/Search/index.tsx index 03b0d0a9375bd..508b3f61b2ccc 100644 --- a/src/components/Search/index.tsx +++ b/src/components/Search/index.tsx @@ -106,7 +106,6 @@ function mapTransactionItemToSelectedEntry( item.keyForList, { isSelected: true, - canDelete: item.canDelete, canReject: canRejectRequest, canHold: canHoldRequest, isHeld: isOnHold(item), @@ -199,7 +198,6 @@ function prepareTransactionsList( ...selectedTransactions, [item.keyForList]: { isSelected: true, - canDelete: item.canDelete, canReject: canRejectRequest, canHold: canHoldRequest, isHeld: isOnHold(item), @@ -545,7 +543,6 @@ function Search({ ), // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing isSelected: areAllMatchingItemsSelected || selectedTransactions[transactionItem.transactionID]?.isSelected || isExpenseReportType, - canDelete: transactionItem.canDelete, canReject: canRejectRequest, reportID: transactionItem.reportID, policyID: transactionItem.report?.policyID, @@ -597,7 +594,6 @@ function Search({ ), // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing isSelected: areAllMatchingItemsSelected || selectedTransactions[transactionItem.transactionID].isSelected, - canDelete: transactionItem.canDelete, canReject: canRejectRequest, reportID: transactionItem.reportID, policyID: transactionItem.report?.policyID, diff --git a/src/components/Search/types.ts b/src/components/Search/types.ts index 77beb3a9a1501..8f5beab5e9c61 100644 --- a/src/components/Search/types.ts +++ b/src/components/Search/types.ts @@ -11,9 +11,6 @@ type SelectedTransactionInfo = { /** Whether the transaction is selected */ isSelected: boolean; - /** If the transaction can be deleted */ - canDelete: boolean; - /** If the transaction can be rejected */ canReject: boolean; diff --git a/src/libs/SearchUIUtils.ts b/src/libs/SearchUIUtils.ts index e00127fdb1ef3..caf32aa867c29 100644 --- a/src/libs/SearchUIUtils.ts +++ b/src/libs/SearchUIUtils.ts @@ -2658,7 +2658,6 @@ function getTransactionFromTransactionListItem(item: TransactionListItemType): O isTaxAmountColumnWide, violations, hash, - canDelete, accountID, policyID, ...transaction diff --git a/src/pages/Search/SearchPage.tsx b/src/pages/Search/SearchPage.tsx index 65b9e2a03459f..a7f431047902b 100644 --- a/src/pages/Search/SearchPage.tsx +++ b/src/pages/Search/SearchPage.tsx @@ -61,7 +61,9 @@ import Navigation from '@libs/Navigation/Navigation'; import type {PlatformStackScreenProps} from '@libs/Navigation/PlatformStackNavigation/types'; import type {SearchFullscreenNavigatorParamList} from '@libs/Navigation/types'; import {getActiveAdminWorkspaces, hasDynamicExternalWorkflow, hasOnlyPersonalPolicies as hasOnlyPersonalPoliciesUtil, hasVBBA, isPaidGroupPolicy} from '@libs/PolicyUtils'; +import {getOriginalMessage, isMoneyRequestAction} from '@libs/ReportActionsUtils'; import { + canDeleteMoneyRequestReport, generateReportID, getPolicyExpenseChat, getReportOrDraftReport, @@ -697,7 +699,24 @@ function SearchPage({route}: SearchPageProps) { }); } - const shouldShowDeleteOption = !isOffline && selectedTransactionsKeys.every((id) => selectedTransactions[id].canDelete); + const shouldShowDeleteOption = + !isOffline && + selectedTransactionsKeys.every((id) => { + const transaction = currentSearchResults?.data?.[`${ONYXKEYS.COLLECTION.TRANSACTION}${id}`]; + if (!transaction) { + return false; + } + const parentReportID = transaction.reportID; + const parentReport = currentSearchResults?.data?.[`${ONYXKEYS.COLLECTION.REPORT}${parentReportID}`]; + if (!parentReport) { + return false; + } + const reportActions = currentSearchResults?.data?.[`${ONYXKEYS.COLLECTION.REPORT_ACTIONS}${parentReportID}`]; + const parentReportAction = Object.values(reportActions ?? {}).find( + (action) => (isMoneyRequestAction(action) ? getOriginalMessage(action)?.IOUTransactionID : undefined) === transaction.transactionID, + ); + return canDeleteMoneyRequestReport(parentReport, [transaction], parentReportAction ? [parentReportAction] : []); + }); if (shouldShowDeleteOption) { options.push({ @@ -744,34 +763,35 @@ function SearchPage({route}: SearchPageProps) { status, hash, selectedTransactions, + expensifyIcons, translate, areAllMatchingItemsSelected, isOffline, selectedReports, - selectedTransactionReportIDs, + queryJSON, lastPaymentMethods, selectedReportIDs, allTransactions, - queryJSON, + selectedTransactionReportIDs, selectedPolicyIDs, policies, integrationsExportTemplates, csvExportLayouts, clearSelectedTransactions, beginExportWithTemplate, + isDelegateAccessRestricted, + showDelegateNoAccessModal, + dismissedRejectUseExplanation, bulkPayButtonOptions, onBulkPaySelected, + areAllTransactionsFromSubmitter, + dismissedHoldUseExplanation, allReports, + currentSearchResults?.data, theme.icon, styles.colorMuted, styles.fontWeightNormal, styles.textWrap, - expensifyIcons, - isDelegateAccessRestricted, - showDelegateNoAccessModal, - dismissedHoldUseExplanation, - dismissedRejectUseExplanation, - areAllTransactionsFromSubmitter, ]); const handleDeleteExpenses = () => { diff --git a/src/types/onyx/SearchResults.ts b/src/types/onyx/SearchResults.ts index 08b66a5086afc..8b90d653cbbb7 100644 --- a/src/types/onyx/SearchResults.ts +++ b/src/types/onyx/SearchResults.ts @@ -86,9 +86,6 @@ type SearchTransaction = { /** The transaction amount */ amount: number; - /** If the transaction can be deleted */ - canDelete: boolean; - /** The edited transaction amount */ modifiedAmount: number; diff --git a/tests/unit/MoneyRequestReportUtilsTest.ts b/tests/unit/MoneyRequestReportUtilsTest.ts index 7bfdb21051833..9cae1e021d328 100644 --- a/tests/unit/MoneyRequestReportUtilsTest.ts +++ b/tests/unit/MoneyRequestReportUtilsTest.ts @@ -55,7 +55,6 @@ const transactionItemBaseMock: TransactionListItemType = { policy: policyBaseMock, reportAction: reportActionBaseMock, holdReportAction: undefined, - canDelete: true, cardID: undefined, cardName: undefined, category: '', diff --git a/tests/unit/Search/SearchUIUtilsTest.ts b/tests/unit/Search/SearchUIUtilsTest.ts index 4c4c9cacc7095..fc6bb19fe6070 100644 --- a/tests/unit/Search/SearchUIUtilsTest.ts +++ b/tests/unit/Search/SearchUIUtilsTest.ts @@ -386,7 +386,6 @@ const searchResults: OnyxTypes.SearchResults = { [`report_${reportID5}`]: report5, [`transactions_${transactionID}`]: { amount: -5000, - canDelete: true, cardID: undefined, cardName: undefined, category: '', @@ -416,7 +415,6 @@ const searchResults: OnyxTypes.SearchResults = { }, [`transactions_${transactionID2}`]: { amount: -5000, - canDelete: true, cardID: undefined, cardName: undefined, category: '', @@ -447,7 +445,6 @@ const searchResults: OnyxTypes.SearchResults = { ...allViolations, [`transactions_${transactionID3}`]: { amount: 1200, - canDelete: true, cardID: undefined, cardName: undefined, category: '', @@ -477,7 +474,6 @@ const searchResults: OnyxTypes.SearchResults = { }, [`transactions_${transactionID4}`]: { amount: 3200, - canDelete: true, cardID: undefined, cardName: undefined, category: '', @@ -763,7 +759,6 @@ const transactionsListItems = [ policy, reportAction: reportAction1, holdReportAction: undefined, - canDelete: true, cardID: undefined, cardName: undefined, category: '', @@ -815,7 +810,6 @@ const transactionsListItems = [ policy, reportAction: reportAction2, holdReportAction: undefined, - canDelete: true, cardID: undefined, cardName: undefined, category: '', @@ -877,7 +871,6 @@ const transactionsListItems = [ policy, reportAction: reportAction3, holdReportAction: undefined, - canDelete: true, cardID: undefined, cardName: undefined, category: '', @@ -934,7 +927,6 @@ const transactionsListItems = [ policy, reportAction: reportAction4, holdReportAction: undefined, - canDelete: true, cardID: undefined, cardName: undefined, category: '', @@ -1028,7 +1020,6 @@ const transactionReportGroupListItems = [ reportAction: reportAction1, holdReportAction: undefined, amount: -5000, - canDelete: true, cardID: undefined, cardName: undefined, category: '', @@ -1123,7 +1114,6 @@ const transactionReportGroupListItems = [ reportAction: reportAction2, holdReportAction: undefined, amount: -5000, - canDelete: true, cardID: undefined, cardName: undefined, category: '', @@ -1706,7 +1696,7 @@ describe('SearchUIUtils', () => { expect(distanceTransaction).toBeDefined(); expect(distanceTransaction?.iouRequestType).toBe(CONST.IOU.REQUEST_TYPE.DISTANCE); - const expectedPropertyCount = 46; + const expectedPropertyCount = 45; expect(Object.keys(distanceTransaction ?? {}).length).toBe(expectedPropertyCount); }); @@ -1739,7 +1729,7 @@ describe('SearchUIUtils', () => { expect(distanceTransaction).toBeDefined(); expect(distanceTransaction?.iouRequestType).toBe(CONST.IOU.REQUEST_TYPE.DISTANCE); - const expectedPropertyCount = 46; + const expectedPropertyCount = 45; expect(Object.keys(distanceTransaction ?? {}).length).toBe(expectedPropertyCount); }); @@ -2331,7 +2321,6 @@ describe('SearchUIUtils', () => { // eslint-disable-next-line @typescript-eslint/naming-convention transactions_1805965960759424086: { amount: 0, - canDelete: false, category: 'Employee Meals Remote (Fringe Benefit)', comment: { comment: '', @@ -2454,7 +2443,6 @@ describe('SearchUIUtils', () => { // eslint-disable-next-line @typescript-eslint/naming-convention transactions_1805965960759424086: { amount: 0, - canDelete: false, cardID: undefined, cardName: undefined, category: 'Employee Meals Remote (Fringe Benefit)', diff --git a/tests/unit/Search/handleActionButtonPressTest.ts b/tests/unit/Search/handleActionButtonPressTest.ts index 4deb193a807c0..5bb137e4228eb 100644 --- a/tests/unit/Search/handleActionButtonPressTest.ts +++ b/tests/unit/Search/handleActionButtonPressTest.ts @@ -92,7 +92,6 @@ const mockReportItemWithHold = { action: 'view', allActions: ['view'], amount: -1200, - canDelete: true, category: '', comment: { comment: '', @@ -181,7 +180,6 @@ const mockReportItemWithHold = { action: 'view', allActions: ['view'], amount: -12300, - canDelete: true, category: '', comment: { comment: '', diff --git a/tests/unit/TransactionGroupListItemTest.tsx b/tests/unit/TransactionGroupListItemTest.tsx index 6e360fdafeb79..05cc0ab57376b 100644 --- a/tests/unit/TransactionGroupListItemTest.tsx +++ b/tests/unit/TransactionGroupListItemTest.tsx @@ -26,7 +26,6 @@ jest.mock('@libs/SearchUIUtils', () => ({ const mockTransaction: TransactionListItemType = { accountID: 1, amount: 0, - canDelete: true, category: '', groupAmount: 1284, groupCurrency: 'USD',