@@ -12,21 +12,31 @@ interface ApprovalResourceActionHandlers {
1212
1313interface UseApprovalResourceActionOptions {
1414 formKey : FormDesignKeyEnum ;
15+ preventDuplicateByResourceId ?: boolean ;
1516}
1617
1718export default function useApprovalResourceAction ( options : UseApprovalResourceActionOptions ) {
1819 const { t } = useI18n ( ) ;
1920 const Message = useMessage ( ) ;
2021
22+ const enableDuplicateGuard = options . preventDuplicateByResourceId ?? true ;
23+
2124 const reviewLoading = ref ( false ) ;
2225 const revokeLoading = ref ( false ) ;
26+ const reviewPendingResourceIds = new Set < string > ( ) ;
27+ const revokePendingResourceIds = new Set < string > ( ) ;
2328
2429 async function submitReview ( resourceId : string , callback ?: ApprovalResourceActionHandlers ) {
2530 if ( ! resourceId ) {
2631 return ;
2732 }
2833
34+ if ( enableDuplicateGuard && reviewPendingResourceIds . has ( resourceId ) ) {
35+ return ;
36+ }
37+
2938 try {
39+ reviewPendingResourceIds . add ( resourceId ) ;
3040 reviewLoading . value = true ;
3141 await reviewResource ( {
3242 resourceId,
@@ -39,6 +49,7 @@ export default function useApprovalResourceAction(options: UseApprovalResourceAc
3949 // eslint-disable-next-line no-console
4050 console . error ( error ) ;
4151 } finally {
52+ reviewPendingResourceIds . delete ( resourceId ) ;
4253 reviewLoading . value = false ;
4354 }
4455 }
@@ -48,7 +59,12 @@ export default function useApprovalResourceAction(options: UseApprovalResourceAc
4859 return ;
4960 }
5061
62+ if ( enableDuplicateGuard && revokePendingResourceIds . has ( resourceId ) ) {
63+ return ;
64+ }
65+
5166 try {
67+ revokePendingResourceIds . add ( resourceId ) ;
5268 revokeLoading . value = true ;
5369 await revokeResource ( {
5470 resourceId,
@@ -61,6 +77,7 @@ export default function useApprovalResourceAction(options: UseApprovalResourceAc
6177 // eslint-disable-next-line no-console
6278 console . error ( error ) ;
6379 } finally {
80+ revokePendingResourceIds . delete ( resourceId ) ;
6481 revokeLoading . value = false ;
6582 }
6683 }
0 commit comments