setup-ui-template

This commit is contained in:
phaichayon
2026-04-17 11:10:08 +07:00
parent 0dcbb98f4c
commit 1aa871cdf9
98 changed files with 12704 additions and 215 deletions

View File

@@ -1,9 +1,9 @@
'use client';
"use client";
import {
Collapsible,
CollapsibleContent,
CollapsibleTrigger
} from '@/components/ui/collapsible';
CollapsibleTrigger,
} from "@/components/ui/collapsible";
import {
DropdownMenu,
DropdownMenuContent,
@@ -11,8 +11,8 @@ import {
DropdownMenuItem,
DropdownMenuLabel,
DropdownMenuSeparator,
DropdownMenuTrigger
} from '@/components/ui/dropdown-menu';
DropdownMenuTrigger,
} from "@/components/ui/dropdown-menu";
import {
Sidebar,
SidebarContent,
@@ -26,12 +26,12 @@ import {
SidebarMenuSub,
SidebarMenuSubButton,
SidebarMenuSubItem,
SidebarRail
} from '@/components/ui/sidebar';
import { UserAvatarProfile } from '@/components/user-avatar-profile';
import { navItems } from '@/constants/data';
import { useMediaQuery } from '@/hooks/use-media-query';
import { useUser } from '@clerk/nextjs';
SidebarRail,
} from "@/components/ui/sidebar";
//import { UserAvatarProfile } from "@/components/user-avatar-profile";
import { navItems } from "@/constants/data";
import { useMediaQuery } from "@/hooks/use-media-query";
import {
IconBell,
IconChevronRight,
@@ -39,30 +39,29 @@ import {
IconCreditCard,
IconLogout,
IconPhotoUp,
IconUserCircle
} from '@tabler/icons-react';
import { SignOutButton } from '@clerk/nextjs';
import Link from 'next/link';
import { usePathname, useRouter } from 'next/navigation';
import * as React from 'react';
import { Icons } from '../icons';
import { OrgSwitcher } from '../org-switcher';
IconUserCircle,
} from "@tabler/icons-react";
import Link from "next/link";
import { usePathname, useRouter } from "next/navigation";
import * as React from "react";
import { Icons } from "../icons";
import { OrgSwitcher } from "../org-switcher";
export const company = {
name: 'Acme Inc',
name: "Acme Inc",
logo: IconPhotoUp,
plan: 'Enterprise'
plan: "Enterprise",
};
const tenants = [
{ id: '1', name: 'Acme Inc' },
{ id: '2', name: 'Beta Corp' },
{ id: '3', name: 'Gamma Ltd' }
{ id: "1", name: "Acme Inc" },
{ id: "2", name: "Beta Corp" },
{ id: "3", name: "Gamma Ltd" },
];
export default function AppSidebar() {
const pathname = usePathname();
const { isOpen } = useMediaQuery();
const { user } = useUser();
const router = useRouter();
const handleSwitchTenant = (_tenantId: string) => {
// Tenant switching functionality would be implemented here
@@ -75,7 +74,7 @@ export default function AppSidebar() {
}, [isOpen]);
return (
<Sidebar collapsible='icon'>
<Sidebar collapsible="icon">
<SidebarHeader>
<OrgSwitcher
tenants={tenants}
@@ -83,7 +82,7 @@ export default function AppSidebar() {
onTenantSwitch={handleSwitchTenant}
/>
</SidebarHeader>
<SidebarContent className='overflow-x-hidden'>
<SidebarContent className="overflow-x-hidden">
<SidebarGroup>
<SidebarGroupLabel>Overview</SidebarGroupLabel>
<SidebarMenu>
@@ -94,7 +93,7 @@ export default function AppSidebar() {
key={item.title}
asChild
defaultOpen={item.isActive}
className='group/collapsible'
className="group/collapsible"
>
<SidebarMenuItem>
<CollapsibleTrigger asChild>
@@ -104,7 +103,7 @@ export default function AppSidebar() {
>
{item.icon && <Icon />}
<span>{item.title}</span>
<IconChevronRight className='ml-auto transition-transform duration-200 group-data-[state=open]/collapsible:rotate-90' />
<IconChevronRight className="ml-auto transition-transform duration-200 group-data-[state=open]/collapsible:rotate-90" />
</SidebarMenuButton>
</CollapsibleTrigger>
<CollapsibleContent>
@@ -149,58 +148,58 @@ export default function AppSidebar() {
<DropdownMenu>
<DropdownMenuTrigger asChild>
<SidebarMenuButton
size='lg'
className='data-[state=open]:bg-sidebar-accent data-[state=open]:text-sidebar-accent-foreground'
size="lg"
className="data-[state=open]:bg-sidebar-accent data-[state=open]:text-sidebar-accent-foreground"
>
{user && (
{/* {user && (
<UserAvatarProfile
className='h-8 w-8 rounded-lg'
showInfo
user={user}
/>
)}
<IconChevronsDown className='ml-auto size-4' />
)} */}
<IconChevronsDown className="ml-auto size-4" />
</SidebarMenuButton>
</DropdownMenuTrigger>
<DropdownMenuContent
className='w-(--radix-dropdown-menu-trigger-width) min-w-56 rounded-lg'
side='bottom'
align='end'
className="w-(--radix-dropdown-menu-trigger-width) min-w-56 rounded-lg"
side="bottom"
align="end"
sideOffset={4}
>
<DropdownMenuLabel className='p-0 font-normal'>
<div className='px-1 py-1.5'>
{user && (
<DropdownMenuLabel className="p-0 font-normal">
<div className="px-1 py-1.5">
{/* {user && (
<UserAvatarProfile
className='h-8 w-8 rounded-lg'
showInfo
user={user}
/>
)}
)} */}
</div>
</DropdownMenuLabel>
<DropdownMenuSeparator />
<DropdownMenuGroup>
<DropdownMenuItem
onClick={() => router.push('/dashboard/profile')}
onClick={() => router.push("/dashboard/profile")}
>
<IconUserCircle className='mr-2 h-4 w-4' />
<IconUserCircle className="mr-2 h-4 w-4" />
Profile
</DropdownMenuItem>
<DropdownMenuItem>
<IconCreditCard className='mr-2 h-4 w-4' />
<IconCreditCard className="mr-2 h-4 w-4" />
Billing
</DropdownMenuItem>
<DropdownMenuItem>
<IconBell className='mr-2 h-4 w-4' />
<IconBell className="mr-2 h-4 w-4" />
Notifications
</DropdownMenuItem>
</DropdownMenuGroup>
<DropdownMenuSeparator />
<DropdownMenuItem>
<IconLogout className='mr-2 h-4 w-4' />
<SignOutButton redirectUrl='/auth/sign-in' />
<IconLogout className="mr-2 h-4 w-4" />
{/* <SignOutButton redirectUrl='/auth/sign-in' /> */}
</DropdownMenuItem>
</DropdownMenuContent>
</DropdownMenu>