From bce64bbf48dcc015103d994f6aaf5b8e1836dc84 Mon Sep 17 00:00:00 2001 From: Guilhem Date: Mon, 5 Jan 2026 22:28:20 +0000 Subject: [PATCH] set app button loading state to true before worker execution (#7493) --- .../apps/components/buttons/AppButton.svelte | 28 +++++++++++++++---- .../helpers/RunnableComponent.svelte | 1 + 2 files changed, 23 insertions(+), 6 deletions(-) diff --git a/frontend/src/lib/components/apps/components/buttons/AppButton.svelte b/frontend/src/lib/components/apps/components/buttons/AppButton.svelte index 18b9a0e9a5..547fff4723 100644 --- a/frontend/src/lib/components/apps/components/buttons/AppButton.svelte +++ b/frontend/src/lib/components/apps/components/buttons/AppButton.svelte @@ -167,14 +167,30 @@ if (iterContext && listInputs) { listInputs.set(id, inputOutput) } - if (preclickAction) { - await preclickAction() + + // Set loading state immediately for immediate visual feedback + // This ensures the spinner appears right away, even before the API request completes + if (runnableComponent) { + loading = true } - if (!runnableComponent) { - runnableWrapper?.handleSideEffect(true) - } else { - await runnableComponent?.runComponent() + try { + if (preclickAction) { + await preclickAction() + } + + if (!runnableComponent) { + runnableWrapper?.handleSideEffect(true) + } else { + await runnableComponent?.runComponent() + } + } catch (error) { + // If an error occurs before the job starts, reset loading state + // (If the job started, RunnableComponent will handle resetting loading) + if (runnableComponent) { + loading = false + } + throw error } } diff --git a/frontend/src/lib/components/apps/components/helpers/RunnableComponent.svelte b/frontend/src/lib/components/apps/components/helpers/RunnableComponent.svelte index c4f2a7b063..0cba4bca16 100644 --- a/frontend/src/lib/components/apps/components/helpers/RunnableComponent.svelte +++ b/frontend/src/lib/components/apps/components/helpers/RunnableComponent.svelte @@ -557,6 +557,7 @@ let error = e?.body ?? e?.message updateResult({ error }) $errorByComponent[id] = { error } + loading = false // Ensure loading is reset on any error } }