aboutsummaryrefslogtreecommitdiffstats
path: root/apps/web/components/ui/action-button.tsx
diff options
context:
space:
mode:
Diffstat (limited to 'apps/web/components/ui/action-button.tsx')
-rw-r--r--apps/web/components/ui/action-button.tsx25
1 files changed, 25 insertions, 0 deletions
diff --git a/apps/web/components/ui/action-button.tsx b/apps/web/components/ui/action-button.tsx
new file mode 100644
index 00000000..42e16f65
--- /dev/null
+++ b/apps/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>
+ );
+}