@@ -109,6 +109,7 @@ function ReportDetailsPage({policies, report, session, personalDetails}: ReportD
109
109
const [ isLastMemberLeavingGroupModalVisible , setIsLastMemberLeavingGroupModalVisible ] = useState ( false ) ;
110
110
const [ isDeleteModalVisible , setIsDeleteModalVisible ] = useState ( false ) ;
111
111
const [ isUnapproveModalVisible , setIsUnapproveModalVisible ] = useState ( false ) ;
112
+ const [ isConfirmModalVisible , setIsConfirmModalVisible ] = useState ( false ) ;
112
113
const policy = useMemo ( ( ) => policies ?. [ `${ ONYXKEYS . COLLECTION . POLICY } ${ report ?. policyID ?? '-1' } ` ] , [ policies , report ?. policyID ] ) ;
113
114
const isPolicyAdmin = useMemo ( ( ) => PolicyUtils . isPolicyAdmin ( policy ) , [ policy ] ) ;
114
115
const isPolicyEmployee = useMemo ( ( ) => PolicyUtils . isPolicyEmployee ( report ?. policyID ?? '-1' , policies ) , [ report ?. policyID , policies ] ) ;
@@ -263,6 +264,21 @@ function ReportDetailsPage({policies, report, session, personalDetails}: ReportD
263
264
const shouldShowWriteCapability = ! isMoneyRequestReport ;
264
265
const shouldShowMenuItem = shouldShowNotificationPref || shouldShowWriteCapability || ( ! ! report ?. visibility && report . chatType !== CONST . REPORT . CHAT_TYPE . INVOICE ) ;
265
266
267
+ const isPayer = ReportUtils . isPayer ( session , moneyRequestReport ) ;
268
+ const isSettled = ReportUtils . isSettled ( moneyRequestReport ?. reportID ?? '-1' ) ;
269
+
270
+ const shouldShowCancelPaymentButton = caseID === CASES . MONEY_REPORT && isPayer && isSettled && ReportUtils . isExpenseReport ( moneyRequestReport ) ;
271
+ const [ chatReport ] = useOnyx ( `${ ONYXKEYS . COLLECTION . REPORT } ${ moneyRequestReport ?. chatReportID ?? '-1' } ` ) ;
272
+
273
+ const cancelPayment = useCallback ( ( ) => {
274
+ if ( ! chatReport ) {
275
+ return ;
276
+ }
277
+
278
+ IOU . cancelPayment ( moneyRequestReport , chatReport ) ;
279
+ setIsConfirmModalVisible ( false ) ;
280
+ } , [ moneyRequestReport , chatReport ] ) ;
281
+
266
282
const menuItems : ReportDetailsPageMenuItem [ ] = useMemo ( ( ) => {
267
283
const items : ReportDetailsPageMenuItem [ ] = [ ] ;
268
284
@@ -356,6 +372,16 @@ function ReportDetailsPage({policies, report, session, personalDetails}: ReportD
356
372
}
357
373
}
358
374
375
+ if ( shouldShowCancelPaymentButton ) {
376
+ items . push ( {
377
+ key : CONST . REPORT_DETAILS_MENU_ITEM . CANCEL_PAYMENT ,
378
+ icon : Expensicons . Trashcan ,
379
+ translationKey : 'iou.cancelPayment' ,
380
+ isAnonymousAction : false ,
381
+ action : ( ) => setIsConfirmModalVisible ( true ) ,
382
+ } ) ;
383
+ }
384
+
359
385
if ( shouldShowLeaveButton ) {
360
386
items . push ( {
361
387
key : CONST . REPORT_DETAILS_MENU_ITEM . LEAVE_ROOM ,
@@ -403,6 +429,7 @@ function ReportDetailsPage({policies, report, session, personalDetails}: ReportD
403
429
isCanceledTaskReport ,
404
430
shouldShowLeaveButton ,
405
431
activeChatMembers . length ,
432
+ shouldShowCancelPaymentButton ,
406
433
isPolicyAdmin ,
407
434
session ,
408
435
leaveChat ,
@@ -710,6 +737,17 @@ function ReportDetailsPage({policies, report, session, personalDetails}: ReportD
710
737
confirmText = { translate ( 'common.leave' ) }
711
738
cancelText = { translate ( 'common.cancel' ) }
712
739
/>
740
+ < ConfirmModal
741
+ title = { translate ( 'iou.cancelPayment' ) }
742
+ isVisible = { isConfirmModalVisible }
743
+ onConfirm = { cancelPayment }
744
+ onCancel = { ( ) => setIsConfirmModalVisible ( false ) }
745
+ prompt = { translate ( 'iou.cancelPaymentConfirmation' ) }
746
+ confirmText = { translate ( 'iou.cancelPayment' ) }
747
+ cancelText = { translate ( 'common.dismiss' ) }
748
+ danger
749
+ shouldEnableNewFocusManagement
750
+ />
713
751
< ConfirmModal
714
752
title = { caseID === CASES . DEFAULT ? translate ( 'task.deleteTask' ) : translate ( 'iou.deleteExpense' ) }
715
753
isVisible = { isDeleteModalVisible }
0 commit comments