From 689db9eed17fb1320b62ba550e9fc0a46087a275 Mon Sep 17 00:00:00 2001 From: dwindown Date: Tue, 23 Dec 2025 15:01:02 +0700 Subject: [PATCH] Add button debouncing to prevent double API calls - Disable button while request is in progress - Re-enable button after request completes (success or error) - Prevents React Strict Mode from firing duplicate simultaneous requests - Fixes 'Body already consumed' error from parallel edge function calls --- src/components/admin/settings/IntegrasiTab.tsx | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/components/admin/settings/IntegrasiTab.tsx b/src/components/admin/settings/IntegrasiTab.tsx index c4c0f96..3c2b0c7 100644 --- a/src/components/admin/settings/IntegrasiTab.tsx +++ b/src/components/admin/settings/IntegrasiTab.tsx @@ -380,6 +380,10 @@ export function IntegrasiTab() { return; } + // Prevent multiple simultaneous clicks + const btn = document.activeElement as HTMLButtonElement; + if (btn) btn.disabled = true; + try { const { data, error } = await supabase.functions.invoke('create-google-meet-event', { body: { @@ -401,6 +405,8 @@ export function IntegrasiTab() { } } catch (err: any) { toast({ title: "Error", description: err.message, variant: "destructive" }); + } finally { + if (btn) btn.disabled = false; } }} className="w-full border-2"