aboutsummaryrefslogtreecommitdiffstats
path: root/packages/web/components/ui/action-button.tsx
diff options
context:
space:
mode:
authorMohamedBassem <me@mbassem.com>2024-02-16 21:26:24 +0000
committerMohamedBassem <me@mbassem.com>2024-02-17 11:49:39 +0000
commit9235e9a6fbb364713105137b6bf5bba9d81ecd4c (patch)
tree80bc7871ca2b043c110c61b796c46af91cb26e2f /packages/web/components/ui/action-button.tsx
parent6febe13b3f4ad4eff3f205ece445b3577255bf41 (diff)
downloadkarakeep-9235e9a6fbb364713105137b6bf5bba9d81ecd4c.tar.zst
ui: Change action buttons to show a spinner when the request is loading
Diffstat (limited to 'packages/web/components/ui/action-button.tsx')
-rw-r--r--packages/web/components/ui/action-button.tsx25
1 files changed, 25 insertions, 0 deletions
diff --git a/packages/web/components/ui/action-button.tsx b/packages/web/components/ui/action-button.tsx
new file mode 100644
index 00000000..42e16f65
--- /dev/null
+++ b/packages/web/components/ui/action-button.tsx
@@ -0,0 +1,25 @@
+import { Button, ButtonProps } from "./button";
+import LoadingSpinner from "./spinner";
+
+export function ActionButton({
+ children,
+ loading,
+ spinner,
+ disabled,
+ ...props
+}: ButtonProps & {
+ loading: boolean;
+ spinner?: React.ReactNode;
+}) {
+ spinner ||= <LoadingSpinner />;
+ if (disabled !== undefined) {
+ disabled ||= loading;
+ } else if (loading) {
+ disabled = true;
+ }
+ return (
+ <Button {...props} disabled={disabled}>
+ {loading ? spinner : children}
+ </Button>
+ );
+}