Skip to content

Commit

Permalink
fix: added loading button formating
Browse files Browse the repository at this point in the history
  • Loading branch information
not-ani committed Aug 4, 2024
1 parent 538b1d0 commit 90b5538
Show file tree
Hide file tree
Showing 4 changed files with 60 additions and 43 deletions.
15 changes: 9 additions & 6 deletions apps/nextjs/src/app/(home)/events/_components/CreateEvent.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,6 @@ import { useForm } from "react-hook-form";
import { createEventSchema } from "@amaxa/db/schema";
import { cn } from "@amaxa/ui";
import { Button } from "@amaxa/ui/button";
import { LoadingButton } from "@amaxa/ui/loading-button";
import { Calendar } from "@amaxa/ui/calendar";
import {
Dialog,
Expand All @@ -32,6 +31,7 @@ import {
FormMessage,
} from "@amaxa/ui/form";
import { Input } from "@amaxa/ui/input";
import { LoadingButton } from "@amaxa/ui/loading-button";
import { Popover, PopoverContent, PopoverTrigger } from "@amaxa/ui/popover";
import { Switch } from "@amaxa/ui/switch";
import { Textarea } from "@amaxa/ui/textarea";
Expand Down Expand Up @@ -75,7 +75,7 @@ export const CreateEvent = () => {
<div>
<Dialog open={open} onOpenChange={setOpen}>
<DialogTrigger asChild>
<Button >Create an Event</Button>
<Button>Create an Event</Button>
</DialogTrigger>
<DialogContent className="sm:max-w-[425px]">
<DialogHeader>
Expand Down Expand Up @@ -205,7 +205,6 @@ export const CreateEvent = () => {
<FormField
name="isVirtual"
control={form.control}

render={({ field }) => (
<FormItem className="flex flex-row items-center justify-between rounded-lg border p-4">
<div className="space-y-0.5">
Expand Down Expand Up @@ -243,10 +242,14 @@ export const CreateEvent = () => {
)}
/>



<DialogFooter className="pt-10">
<LoadingButton disabled={isPending} loading={isPending} type="submit">Save changes</LoadingButton>
<LoadingButton
disabled={isPending}
loading={isPending}
type="submit"
>
Save changes
</LoadingButton>
</DialogFooter>
</form>
</Form>
Expand Down
2 changes: 1 addition & 1 deletion apps/nextjs/src/app/(home)/events/page.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -50,4 +50,4 @@ export default async function Home(props: {
);
}

export const dynamic = "force-dynamic"
export const dynamic = "force-dynamic";
1 change: 0 additions & 1 deletion packages/auth/src/config.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@
//TODO: add permissions stuff
import type {
DefaultSession,
NextAuthConfig,
Expand Down
85 changes: 50 additions & 35 deletions packages/ui/src/loading-button.tsx
Original file line number Diff line number Diff line change
@@ -1,61 +1,74 @@
import * as React from 'react';
import { Slot } from '@radix-ui/react-slot';
import { cva, type VariantProps } from 'class-variance-authority';
import { Loader2 } from 'lucide-react';
import { cn } from '.';
import type { VariantProps } from "class-variance-authority";
import * as React from "react";
import { Slot } from "@radix-ui/react-slot";
import { cva } from "class-variance-authority";
import { Loader2 } from "lucide-react";

import { cn } from ".";

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',
"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",
{
variants: {
variant: {
default: 'bg-primary text-primary-foreground hover:bg-primary/90',
destructive: 'bg-destructive text-destructive-foreground hover:bg-destructive/90',
outline: 'border border-input bg-background hover:bg-accent hover:text-accent-foreground',
secondary: 'bg-secondary text-secondary-foreground hover:bg-secondary/80',
ghost: 'hover:bg-accent hover:text-accent-foreground',
link: 'text-primary underline-offset-4 hover:underline',
default: "bg-primary text-primary-foreground hover:bg-primary/90",
destructive:
"bg-destructive text-destructive-foreground hover:bg-destructive/90",
outline:
"border border-input bg-background hover:bg-accent hover:text-accent-foreground",
secondary:
"bg-secondary text-secondary-foreground hover:bg-secondary/80",
ghost: "hover:bg-accent hover:text-accent-foreground",
link: "text-primary underline-offset-4 hover:underline",
},
size: {
default: 'h-10 px-4 py-2',
sm: 'h-9 rounded-md px-3',
lg: 'h-11 rounded-md px-8',
icon: 'h-10 w-10',
default: "h-10 px-4 py-2",
sm: "h-9 rounded-md px-3",
lg: "h-11 rounded-md px-8",
icon: "h-10 w-10",
},
},
defaultVariants: {
variant: 'default',
size: 'default',
variant: "default",
size: "default",
},
},
);

export interface ButtonProps
extends React.ButtonHTMLAttributes<HTMLButtonElement>,
VariantProps<typeof buttonVariants> {
VariantProps<typeof buttonVariants> {
asChild?: boolean;
loading?: boolean;
}

const LoadingButton = React.forwardRef<HTMLButtonElement, ButtonProps>(
({ className, variant, size, asChild = false, loading, children, ...props }, ref) => {
(
{ className, variant, size, asChild = false, loading, children, ...props },
ref,
) => {
if (asChild) {
return (
<Slot ref={ref} {...props}>
<>
{React.Children.map(children as React.ReactElement, (child: React.ReactElement) => {
return React.cloneElement(child, {
className: cn(buttonVariants({ variant, size }), className),
children: (
<>
{loading && (
<Loader2 className={cn('h-4 w-4 animate-spin', 'mr-2')} />
)}
{child.props.children}
</>
),
});
})}
{React.Children.map(
children as React.ReactElement,
(child: React.ReactElement) => {
return React.cloneElement(child, {
className: cn(buttonVariants({ variant, size }), className),
children: (
<>
{loading && (
<Loader2
className={cn("h-4 w-4 animate-spin", "mr-2")}
/>
)}
{child.props.children}
</>
),
});
},
)}
</>
</Slot>
);
Expand All @@ -69,13 +82,15 @@ const LoadingButton = React.forwardRef<HTMLButtonElement, ButtonProps>(
{...props}
>
<>
{loading && <Loader2 className={cn('h-4 w-4 animate-spin', 'mr-2')} />}
{loading && (
<Loader2 className={cn("h-4 w-4 animate-spin", "mr-2")} />
)}
{children}
</>
</button>
);
},
);
LoadingButton.displayName = 'LoadingButton';
LoadingButton.displayName = "LoadingButton";

export { LoadingButton, buttonVariants };

0 comments on commit 90b5538

Please sign in to comment.