Add loading indicator to group switcher

This commit is contained in:
VityaSchel
2023-10-15 00:58:12 +04:00
parent 95f1b8914f
commit 7e440c9bff
7 changed files with 194 additions and 30 deletions

View File

@@ -3,6 +3,7 @@ import { Slot } from "@radix-ui/react-slot"
import { cva, type VariantProps } from "class-variance-authority"
import { cn } from "@/shared/utils"
import { Spinner } from "@/shared/ui/spinner"
const buttonVariants = cva(
"inline-flex items-center justify-center rounded-md text-sm font-medium ring-offset-background transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50",
@@ -37,17 +38,26 @@ export interface ButtonProps
extends React.ButtonHTMLAttributes<HTMLButtonElement>,
VariantProps<typeof buttonVariants> {
asChild?: boolean
loading?: boolean
}
const Button = React.forwardRef<HTMLButtonElement, ButtonProps>(
({ className, variant, size, asChild = false, ...props }, ref) => {
({ className, variant, size, asChild = false, disabled, loading, children, ...props }, ref) => {
const Comp = asChild ? Slot : "button"
return (
<Comp
className={cn(buttonVariants({ variant, size, className }))}
ref={ref}
{...props}
/>
<>
<Comp
className={cn(buttonVariants({ variant, size, className }))}
ref={ref}
disabled={loading || disabled}
{...props}
>
{loading && (
<Spinner />
)}
{children}
</Comp>
</>
)
}
)