gnunet-svn
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[taler-wallet-core] 02/02: disable button when wating for response


From: gnunet
Subject: [taler-wallet-core] 02/02: disable button when wating for response
Date: Thu, 18 Aug 2022 17:48:16 +0200

This is an automated email from the git hooks/post-receive script.

sebasjm pushed a commit to branch master
in repository wallet-core.

commit 23bb82f00cc83541527402bdd2d4309c530df674
Author: Sebastian <sebasjm@gmail.com>
AuthorDate: Thu Aug 18 12:48:05 2022 -0300

    disable button when wating for response
---
 .../src/mui/Button.stories.tsx                     | 27 ++++++++++++++++++++++
 .../taler-wallet-webextension/src/mui/Button.tsx   | 17 ++++++++++++--
 2 files changed, 42 insertions(+), 2 deletions(-)

diff --git a/packages/taler-wallet-webextension/src/mui/Button.stories.tsx 
b/packages/taler-wallet-webextension/src/mui/Button.stories.tsx
index 8f6b47af..385eb102 100644
--- a/packages/taler-wallet-webextension/src/mui/Button.stories.tsx
+++ b/packages/taler-wallet-webextension/src/mui/Button.stories.tsx
@@ -39,6 +39,33 @@ const Stack = styled.div`
   background-color: white;
 `;
 
+export const WithDelay = (): VNode => (
+  <Stack>
+    <Button
+      size="small"
+      variant="contained"
+      onClick={() =>
+        new Promise((resolve) => {
+          setTimeout(resolve, 2000);
+        })
+      }
+    >
+      Returns after 2 seconds
+    </Button>
+    <Button
+      size="small"
+      variant="contained"
+      onClick={() =>
+        new Promise((_, reject) => {
+          setTimeout(reject, 2000);
+        })
+      }
+    >
+      Fails after 2 seconds
+    </Button>
+  </Stack>
+);
+
 export const BasicExample = (): VNode => (
   <Fragment>
     <Stack>
diff --git a/packages/taler-wallet-webextension/src/mui/Button.tsx 
b/packages/taler-wallet-webextension/src/mui/Button.tsx
index 2f12c172..0aaa5ee9 100644
--- a/packages/taler-wallet-webextension/src/mui/Button.tsx
+++ b/packages/taler-wallet-webextension/src/mui/Button.tsx
@@ -19,6 +19,7 @@ import { css } from "@linaria/core";
 import { theme, Colors, rippleEnabled, rippleEnabledOutlined } from "./style";
 // eslint-disable-next-line import/extensions
 import { alpha } from "./colors/manipulation";
+import { useState } from "preact/hooks";
 
 export const buttonBaseStyle = css`
   display: inline-flex;
@@ -219,7 +220,7 @@ export function Button({
   size = "medium",
   style: parentStyle,
   color = "primary",
-  onClick,
+  onClick: doClick,
 }: Props): VNode {
   const style = css`
     user-select: none;
@@ -275,9 +276,21 @@ export function Button({
       }}
     />
   );
+  const [running, setRunning] = useState(false);
+
+  async function onClick(): Promise<void> {
+    if (!doClick || disabled || running) return;
+    setRunning(true);
+    try {
+      await doClick();
+    } finally {
+      setRunning(false);
+    }
+  }
+
   return (
     <ButtonBase
-      disabled={disabled}
+      disabled={disabled || running}
       class={[
         theme.typography.button,
         theme.shape.roundBorder,

-- 
To stop receiving notification emails like this one, please contact
gnunet@gnunet.org.



reply via email to

[Prev in Thread] Current Thread [Next in Thread]