@@ -4783,6 +4783,21 @@ function canEditReportAction(reportAction: OnyxInputOrEntry<ReportAction>): bool
47834783 );
47844784}
47854785
4786+ function canModifyHoldStatus(report: Report, reportAction: ReportAction): boolean {
4787+ if (!isMoneyRequestReport(report) || isTrackExpenseReport(report)) {
4788+ return false;
4789+ }
4790+ const isAdmin = isPolicyAdmin(report.policyID, allPolicies);
4791+ const isActionOwner = isActionCreator(reportAction);
4792+ const isManager = isMoneyRequestReport(report) && report?.managerID !== null && currentUserPersonalDetails?.accountID === report?.managerID;
4793+
4794+ if (isIOUReport(report)) {
4795+ return isActionOwner || isManager;
4796+ }
4797+
4798+ return isAdmin || isActionOwner || isManager;
4799+ }
4800+
47864801function canHoldUnholdReportAction(
47874802 report: OnyxEntry<Report>,
47884803 reportAction: OnyxEntry<ReportAction>,
@@ -4806,11 +4821,12 @@ function canHoldUnholdReportAction(
48064821 const isClosed = isClosedReport(report);
48074822 const isSubmitted = isProcessingReport(report);
48084823
4809- const canModifyStatus = !isTrackExpenseMoneyReport && (isAdmin || isActionOwner || isApprover );
4824+ const canModifyStatus = canModifyHoldStatus(report, reportAction );
48104825 const canModifyUnholdStatus = !isTrackExpenseMoneyReport && (isAdmin || (isActionOwner && isHoldActionCreator) || isApprover);
48114826
48124827 const canHoldOrUnholdRequest = !isRequestSettled && !isApproved && !isClosed && !isDeletedParentAction(reportAction);
4813- const canHoldRequest = canHoldOrUnholdRequest && !isOnHold && (isRequestIOU || canModifyStatus) && !isScanning(transaction) && (isSubmitted || isActionOwner);
4828+ const canHoldRequest = canHoldOrUnholdRequest && !isOnHold && canModifyStatus && !isScanning(transaction) && (isSubmitted || isActionOwner);
4829+
48144830 const canUnholdRequest = !!(canHoldOrUnholdRequest && isOnHold && (isRequestIOU ? isHoldActionCreator : canModifyUnholdStatus));
48154831
48164832 return {canHoldRequest, canUnholdRequest};
0 commit comments