'use client'; import { memo, useEffect } from 'react'; import { useTranslations } from 'next-intl'; import { usePathname, useRouter } from '@/i18n/navigation'; import { useAuth } from '@/lib/hooks/useAuth'; import Sidebar from '@/components/ui/shared/Sidebar'; import { TopBarControls } from '@/components/ui/shared/TopBarControls'; import { DashboardAccountMenu } from '@/components/ui/dashboard/DashboardAccountMenu'; import { canAccessAppointmentsSection, firstAccessibleDashboardPath, getRequiredReadPermissionForPath, hasPermission, } from '@/components/shared/permissions'; export default function DashboardLayout({ children }: { children: React.ReactNode }) { const t = useTranslations('common'); const { user, currentOrganization, isAuthReady } = useAuth(); const router = useRouter(); const pathname = usePathname(); useEffect(() => { if (!isAuthReady) return; if (!user) { router.replace('/login'); return; } if (!currentOrganization) { router.replace('/select-organization'); return; } const required = getRequiredReadPermissionForPath(pathname); if (required) { const allowed = hasPermission(currentOrganization, required) || (required === 'TAB_APPOINTMENTS_READ' && canAccessAppointmentsSection(currentOrganization)); if (!allowed) { router.replace(firstAccessibleDashboardPath(currentOrganization)); } } }, [isAuthReady, user, currentOrganization, router, pathname]); if (!isAuthReady) { return (
{t('loadingApp')}
); } if (!user || !currentOrganization) { return (
{t('loadingWorkspace')}
); } return (
{children}
); } const DashboardHeader = memo(function DashboardHeader({ organizationName, }: { organizationName: string; }) { return (

{organizationName}

); });