From 176b54e29d403814072ba331f096694362e7f1c8 Mon Sep 17 00:00:00 2001 From: Johannes Kirschbauer Date: Wed, 13 Aug 2025 14:15:29 +0200 Subject: [PATCH] UI/Button: move state out of the button --- .../ui/src/components/Button/Button.tsx | 32 +++++-------------- .../ui/src/routes/Onboarding/Onboarding.tsx | 11 ++++++- 2 files changed, 18 insertions(+), 25 deletions(-) diff --git a/pkgs/clan-app/ui/src/components/Button/Button.tsx b/pkgs/clan-app/ui/src/components/Button/Button.tsx index 2f7204d9a..86e394cbf 100644 --- a/pkgs/clan-app/ui/src/components/Button/Button.tsx +++ b/pkgs/clan-app/ui/src/components/Button/Button.tsx @@ -22,7 +22,7 @@ export interface ButtonProps startIcon?: IconVariant; endIcon?: IconVariant; class?: string; - onAction?: Action; + loading?: boolean; } const iconSizes: Record = { @@ -40,31 +40,12 @@ export const Button = (props: ButtonProps) => { "startIcon", "endIcon", "class", - "onAction", + "loading", ]); const size = local.size || "default"; const hierarchy = local.hierarchy || "primary"; - const [loading, setLoading] = createSignal(false); - - const onClick = async () => { - if (!local.onAction) { - console.error("this should not be possible"); - return; - } - - setLoading(true); - - try { - await local.onAction(); - } catch (error) { - console.error("Error while executing action", error); - } - - setLoading(false); - }; - const iconSize = iconSizes[local.size || "default"]; const loadingClass = @@ -81,16 +62,19 @@ export const Button = (props: ButtonProps) => { hierarchy, { icon: local.icon, - loading: loading(), + loading: props.loading, ghost: local.ghost, }, )} - onClick={local.onAction ? onClick : undefined} + onClick={props.onClick} {...other} > {local.startIcon && ( diff --git a/pkgs/clan-app/ui/src/routes/Onboarding/Onboarding.tsx b/pkgs/clan-app/ui/src/routes/Onboarding/Onboarding.tsx index f81a65449..c7770a20d 100644 --- a/pkgs/clan-app/ui/src/routes/Onboarding/Onboarding.tsx +++ b/pkgs/clan-app/ui/src/routes/Onboarding/Onboarding.tsx @@ -99,8 +99,12 @@ const welcome = (props: { }) => { const navigate = useNavigate(); + const [loading, setLoading] = createSignal(false); + const selectFolder = async () => { + setLoading(true); const uri = await selectClanFolder(); + setLoading(false); navigateToClan(navigate, uri); }; @@ -148,7 +152,12 @@ const welcome = (props: { -