Add admin portal

This commit is contained in:
Jose Selesan
2026-06-10 09:39:20 -03:00
parent c278c78e3d
commit c1c2f18471
50 changed files with 2713 additions and 69 deletions

View File

@@ -6,6 +6,7 @@ import {
Menu,
Moon,
Settings,
Shield,
Sun,
User,
X,
@@ -241,6 +242,18 @@ export function Header() {
</DropdownMenuItem>
)}
{user?.role === 'super_admin' && (
<DropdownMenuItem
className="cursor-pointer rounded-xl"
onSelect={() => {
void navigate({ to: '/admin' });
}}
>
<Shield className="mr-2 size-4 text-emerald-600" />
Admin
</DropdownMenuItem>
)}
<DropdownMenuSeparator />
<DropdownMenuItem
@@ -405,6 +418,20 @@ export function Header() {
</Button>
)}
{user?.role === 'super_admin' && (
<Button
variant="ghost"
className="justify-start rounded-2xl"
onClick={() => {
setOpen(false);
void navigate({ to: '/admin' });
}}
>
<Shield className="mr-2 size-4 text-emerald-600" />
Admin
</Button>
)}
{isAuthenticated && (
<Button
variant="ghost"

View File

@@ -0,0 +1,31 @@
import { type VariantProps, cva } from 'class-variance-authority';
import type { HTMLAttributes } from 'react';
import { cn } from '@/lib/utils';
const badgeVariants = cva(
'inline-flex items-center rounded-full border px-2.5 py-0.5 text-xs font-semibold transition-colors focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2',
{
variants: {
variant: {
default: 'border-transparent bg-primary text-primary-foreground shadow-sm',
secondary: 'border-transparent bg-secondary text-secondary-foreground',
destructive: 'border-transparent bg-destructive text-destructive-foreground shadow-sm',
outline: 'text-foreground',
},
},
defaultVariants: {
variant: 'default',
},
}
);
export interface BadgeProps
extends HTMLAttributes<HTMLDivElement>,
VariantProps<typeof badgeVariants> {}
function Badge({ className, variant, ...props }: BadgeProps) {
return <div className={cn(badgeVariants({ variant }), className)} {...props} />;
}
export { Badge, badgeVariants };