Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
75 changes: 34 additions & 41 deletions src/pages/ReportDetailsPage.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@ import ScreenWrapper from '@components/ScreenWrapper';
import ScrollView from '@components/ScrollView';
import {useSearchContext} from '@components/Search/SearchContext';
import useCurrentUserPersonalDetails from '@hooks/useCurrentUserPersonalDetails';
import useDeleteTransactions from '@hooks/useDeleteTransactions';
import useDuplicateTransactionsAndViolations from '@hooks/useDuplicateTransactionsAndViolations';
import useGetIOUReportFromReportAction from '@hooks/useGetIOUReportFromReportAction';
import useLocalize from '@hooks/useLocalize';
Expand Down Expand Up @@ -98,7 +99,7 @@ import {
} from '@libs/ReportUtils';
import StringUtils from '@libs/StringUtils';
import {isDemoTransaction} from '@libs/TransactionUtils';
import {deleteMoneyRequest, deleteTrackExpense, getNavigationUrlAfterTrackExpenseDelete, getNavigationUrlOnMoneyRequestDelete} from '@userActions/IOU';
import {deleteTrackExpense, getNavigationUrlAfterTrackExpenseDelete, getNavigationUrlOnMoneyRequestDelete} from '@userActions/IOU';
import {
clearAvatarErrors,
clearPolicyRoomNameErrors,
Expand Down Expand Up @@ -285,6 +286,12 @@ function ReportDetailsPage({policy, report, route, reportMetadata}: ReportDetail
const iouTransactionID = isMoneyRequestAction(requestParentReportAction) ? getOriginalMessage(requestParentReportAction)?.IOUTransactionID : undefined;
const [iouTransaction] = useOnyx(`${ONYXKEYS.COLLECTION.TRANSACTION}${iouTransactionID}`, {canBeMissing: true});
const {duplicateTransactions, duplicateTransactionViolations} = useDuplicateTransactionsAndViolations(iouTransactionID ? [iouTransactionID] : []);
const {deleteTransactions} = useDeleteTransactions({
report: parentReport,
reportActions: requestParentReportAction ? [requestParentReportAction] : [],
policy,
});
const {currentSearchHash} = useSearchContext();
const isCardTransactionCanBeDeleted = canDeleteCardTransactionByLiabilityType(iouTransaction);
const shouldShowDeleteButton = shouldShowTaskDeleteButton || (canDeleteRequest && isCardTransactionCanBeDeleted) || isDemoTransaction(iouTransaction);
const [reportAttributes] = useOnyx(ONYXKEYS.DERIVED.REPORT_ATTRIBUTES, {canBeMissing: true, selector: reportsSelector});
Expand Down Expand Up @@ -805,60 +812,32 @@ function ReportDetailsPage({policy, report, route, reportMetadata}: ReportDetail
isChatReportArchived: isMoneyRequestReportArchived,
isChatIOUReportArchived,
});
} else {
deleteMoneyRequest(
iouTransactionID,
requestParentReportAction,
duplicateTransactions,
duplicateTransactionViolations,
iouReport,
chatIOUReport,
isChatIOUReportArchived,
isSingleTransactionView,
undefined,
undefined,
);
} else if (iouTransactionID) {
deleteTransactions([iouTransactionID], duplicateTransactions, duplicateTransactionViolations, currentSearchHash, isSingleTransactionView);
removeTransaction(iouTransactionID);
}
}, [
duplicateTransactions,
duplicateTransactionViolations,
caseID,
requestParentReportAction,
report,
isReportArchived,
currentUserPersonalDetails.accountID,
iouTransactionID,
duplicateTransactions,
duplicateTransactionViolations,
isSingleTransactionView,
moneyRequestReport,
removeTransaction,
report,
requestParentReportAction,
isReportArchived,
isMoneyRequestReportArchived,
iouReport,
chatIOUReport,
deleteTransactions,
currentSearchHash,
isChatIOUReportArchived,
]);

// A flag to indicate whether the user chose to delete the transaction or not
const isTransactionDeleted = useRef<boolean>(false);

useEffect(() => {
return () => {
// Perform the actual deletion after the details page is unmounted. This prevents the [Deleted ...] text from briefly appearing when dismissing the modal.
if (!isTransactionDeleted.current) {
return;
}
isTransactionDeleted.current = false;
deleteTransaction();
};
}, [deleteTransaction]);

// Where to navigate back to after deleting the transaction and its report.
const navigateToTargetUrl = useCallback(() => {
// If transaction was not deleted (i.e. Cancel was clicked), do nothing
// which only dismiss the delete confirmation modal
if (!isTransactionDeleted.current) {
return;
}

let urlToNavigateBack: string | undefined;

// Only proceed with navigation logic if transaction was actually deleted
Expand Down Expand Up @@ -893,7 +872,22 @@ function ReportDetailsPage({policy, report, route, reportMetadata}: ReportDetail
setDeleteTransactionNavigateBackUrl(urlToNavigateBack);
navigateBackOnDeleteTransaction(urlToNavigateBack as Route, true);
}
}, [iouTransactionID, requestParentReportAction, isSingleTransactionView, isTransactionDeleted, moneyRequestReport, isChatIOUReportArchived, iouReport, chatIOUReport]);
}, [iouTransactionID, requestParentReportAction, isSingleTransactionView, moneyRequestReport, isChatIOUReportArchived, iouReport, chatIOUReport]);

// A flag to indicate whether the user chose to delete the transaction or not
const isTransactionDeleted = useRef<boolean>(false);

useEffect(() => {
return () => {
// Perform the actual deletion after the details page is unmounted. This prevents the [Deleted ...] text from briefly appearing when dismissing the modal.
if (!isTransactionDeleted.current) {
return;
}
isTransactionDeleted.current = false;
navigateToTargetUrl();
deleteTransaction();
};
}, [deleteTransaction, navigateToTargetUrl]);

const mentionReportContextValue = useMemo(() => ({currentReportID: report.reportID, exactlyMatch: true}), [report.reportID]);

Expand Down Expand Up @@ -1006,7 +1000,6 @@ function ReportDetailsPage({policy, report, route, reportMetadata}: ReportDetail
cancelText={translate('common.cancel')}
danger
shouldEnableNewFocusManagement
onModalHide={navigateToTargetUrl}
/>
</FullPageNotFoundView>
</ScreenWrapper>
Expand Down
Loading