Skip to content

Commit 6c3b872

Browse files
fit2cloudwxxfit2-zhao
authored andcommitted
fix: resource approval for review and revoke
1 parent 7d57f4a commit 6c3b872

1 file changed

Lines changed: 17 additions & 0 deletions

File tree

frontend/packages/web/src/hooks/useApprovalResourceAction.ts

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,21 +12,31 @@ interface ApprovalResourceActionHandlers {
1212

1313
interface UseApprovalResourceActionOptions {
1414
formKey: FormDesignKeyEnum;
15+
preventDuplicateByResourceId?: boolean;
1516
}
1617

1718
export 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

Comments
 (0)