"use client"; import { ReactNode } from "react"; import Link from "next/link"; import { usePathname, useRouter } from "next/navigation"; import { usePermissions } from "@/hooks/usePermissions"; import { useAuthStore } from "@/store/authStore"; import { useTenantStore } from "@/store/tenantStore"; import { useLocaleStore } from "@/store/uiStore"; import { logout } from "@/services/auth"; import { t } from "@/lib/locale"; const navItems = [ { href: "/dashboard", label: "Dashboard", key: "dashboard", permission: "ALL" as const }, { href: "/dashboard/users", label: "Users", key: "users", permission: "USER_MANAGE_OR_ADMIN" as const }, { href: "/dashboard/roles", label: "Roles", key: "roles", permission: "ROLE_MANAGE_OR_ADMIN" as const }, { href: "/dashboard/workflow", label: "Workflow", key: "workflow", permission: "WORKFLOW_OR_ADMIN" as const }, { href: "/dashboard/audit", label: "Audit", key: "audit", permission: "ADMIN_ONLY" as const }, { href: "/dashboard/modules", label: "Modules", key: "modules", permission: "ADMIN_ONLY" as const }, { href: "/dashboard/settings", label: "Settings", key: "settings", permission: "ALL" as const } ]; export default function DashboardShell({ children }: { children: ReactNode }) { const pathname = usePathname(); const router = useRouter(); const clearAuth = useAuthStore((s) => s.clearAuth); const { username, tenantId } = useAuthStore((s) => ({ username: s.profile?.username ?? "Unknown", tenantId: s.tenantId })); const permissions = usePermissions(); const locale = useLocaleStore((s) => s.locale); const tenants = useTenantStore((s) => s.availableTenants); const currentTenant = useTenantStore((s) => s.tenantId); const setTenant = useTenantStore((s) => s.setTenantId); const setLocale = useLocaleStore((s) => s.setLocale); const authMode = process.env.NEXT_PUBLIC_AUTH_MODE?.toLowerCase?.() === "ldap" ? "LDAP" : "Local"; const visibleNavItems = navItems.filter((item) => { if (item.permission === "ALL") return true; if (item.permission === "USER_MANAGE_OR_ADMIN") return permissions.canManageUsers || permissions.isAdminOrManager; if (item.permission === "ROLE_MANAGE_OR_ADMIN") return permissions.canManageRoles || permissions.isAdminOrManager; if (item.permission === "WORKFLOW_OR_ADMIN") return permissions.canApproveWorkflow || permissions.isAdminOrManager; return permissions.isAdmin; }); const onTenantChange = (value: string) => { setTenant(value); }; const handleLogout = async () => { await logout(); clearAuth(); router.replace("/(auth)/login"); }; return (
{t("welcome", locale)}, {username} | Mode: {authMode}
{children}
); }