'use client'; import Link from 'next/link'; import { usePathname } from 'next/navigation'; import { useState } from 'react'; import { cn } from '@/lib/utils'; import { Settings, Activity, Shield, ChevronDown, ChevronRight, Brain, FolderOpen, BookOpen, Ruler, } from 'lucide-react'; interface MenuChild { href: string; label: string; } interface MenuItem { href?: string; label: string; sublabel?: string; icon: React.ComponentType<{ className?: string }>; children?: MenuChild[]; } export const menuItems: MenuItem[] = [ { label: 'ผู้ใช้งาน & การเข้าถึง', sublabel: 'Identity & Access', icon: Shield, children: [ { href: '/admin/access-control/users', label: 'ผู้ใช้งาน' }, { href: '/admin/access-control/roles', label: 'บทบาท & สิทธิ์' }, { href: '/admin/access-control/organizations', label: 'องค์กร' }, ], }, { label: 'ตั้งค่าโครงการ', sublabel: 'Project Setup', icon: FolderOpen, children: [ { href: '/admin/doc-control/projects', label: 'โครงการ' }, { href: '/admin/doc-control/contracts', label: 'สัญญา' }, { href: '/admin/doc-control/numbering', label: 'รูปแบบเลขที่' }, { href: '/admin/doc-control/workflows', label: 'เวิร์กโฟลว์' }, ], }, { label: 'ข้อมูลอ้างอิง', sublabel: 'Reference Data', icon: BookOpen, children: [ { href: '/admin/doc-control/reference/disciplines', label: 'สาขาวิชาชีพ' }, { href: '/admin/doc-control/reference/rfa-types', label: 'ประเภท RFA' }, { href: '/admin/doc-control/reference/correspondence-types', label: 'ประเภทหนังสือ' }, { href: '/admin/doc-control/reference/tags', label: 'แท็ก' }, ], }, { label: 'ข้อมูลแบบ Drawing', sublabel: 'Drawing Master', icon: Ruler, children: [ { href: '/admin/doc-control/drawings/contract/volumes', label: 'สัญญา: Volume' }, { href: '/admin/doc-control/drawings/contract/categories', label: 'สัญญา: หมวดหมู่' }, { href: '/admin/doc-control/drawings/contract/sub-categories', label: 'สัญญา: หมวดหมู่ย่อย' }, { href: '/admin/doc-control/drawings/shop/main-categories', label: 'Shop: หมวดหมู่หลัก' }, { href: '/admin/doc-control/drawings/shop/sub-categories', label: 'Shop: หมวดหมู่ย่อย' }, ], }, { label: 'การปฏิบัติการ', sublabel: 'Operations', icon: Activity, children: [ { href: '/admin/monitoring/audit-logs', label: 'บันทึกการตรวจสอบ' }, { href: '/admin/monitoring/system-logs/numbering', label: 'บันทึกระบบ' }, { href: '/admin/monitoring/sessions', label: 'เซสชันที่ใช้งาน' }, { href: '/admin/migration', label: 'คิวนำเข้าข้อมูล' }, { href: '/admin/migration/errors', label: 'บันทึกข้อผิดพลาด' }, ], }, { href: '/admin/ai', label: 'AI Console', icon: Brain }, { href: '/admin/settings', label: 'ตั้งค่าระบบ', sublabel: 'Settings', icon: Settings }, ]; export function AdminSidebar() { const pathname = usePathname(); const [expandedMenus, setExpandedMenus] = useState( // Auto-expand if current path matches a child menuItems .filter((item) => item.children?.some((child) => pathname.startsWith(child.href))) .map((item) => item.label) ); const toggleMenu = (label: string) => { setExpandedMenus((prev) => (prev.includes(label) ? prev.filter((l) => l !== label) : [...prev, label])); }; return ( ); } import { Sheet, SheetContent, SheetTrigger, SheetTitle } from '@/components/ui/sheet'; import { Button } from '@/components/ui/button'; import { Menu } from 'lucide-react'; export function AdminMobileSidebar() { const pathname = usePathname(); const [open, setOpen] = useState(false); const [expandedMenus, setExpandedMenus] = useState( menuItems .filter((item) => item.children?.some((child) => pathname.startsWith(child.href))) .map((item) => item.label) ); const toggleMenu = (label: string) => { setExpandedMenus((prev) => (prev.includes(label) ? prev.filter((l) => l !== label) : [...prev, label])); }; return ( Admin Navigation
Admin Console
setOpen(false)} className="text-sm text-muted-foreground hover:text-foreground flex items-center gap-2" > ← Back to Dashboard
); }