import { createFileRoute, Outlet, Link, redirect, useRouter } from '@tanstack/react-router' import { useQuery } from '@tanstack/react-query' import { useEffect } from 'react' import { useAuthStore } from '@/stores/auth.store' import { myPermissionsOptions } from '@/api/rbac' import { Avatar } from '@/components/shared/avatar-upload' import { Button } from '@/components/ui/button' import { Users, UserRound, HelpCircle, Shield, UserCog, LogOut, User, Wrench, Package, ClipboardList } from 'lucide-react' export const Route = createFileRoute('/_authenticated')({ beforeLoad: () => { const { token } = useAuthStore.getState() if (!token) { throw redirect({ to: '/login' }) } }, component: AuthenticatedLayout, }) function NavLink({ to, icon, label }: { to: string; icon: React.ReactNode; label: string }) { return ( {icon} {label} ) } function AuthenticatedLayout() { const router = useRouter() const user = useAuthStore((s) => s.user) const logout = useAuthStore((s) => s.logout) const hasPermission = useAuthStore((s) => s.hasPermission) const setPermissions = useAuthStore((s) => s.setPermissions) const permissionsLoaded = useAuthStore((s) => s.permissionsLoaded) // Fetch permissions on mount const { data: permData } = useQuery({ ...myPermissionsOptions(), enabled: !!useAuthStore.getState().token, }) useEffect(() => { if (permData?.permissions) { setPermissions(permData.permissions) } }, [permData, setPermissions]) function handleLogout() { logout() router.navigate({ to: '/login', replace: true }) } const canViewAccounts = !permissionsLoaded || hasPermission('accounts.view') const canViewRepairs = !permissionsLoaded || hasPermission('repairs.view') const canViewUsers = !permissionsLoaded || hasPermission('users.view') return (