import { ToastProvider } from '@sim/emcn' import { dehydrate, HydrationBoundary } from '@tanstack/react-query' import { cookies } from 'next/headers' import { redirect } from 'next/navigation' import { getSession } from '@/lib/auth' import { getQueryClient } from '@/app/_shell/providers/get-query-client' import { ImpersonationBanner } from '@/app/workspace/[workspaceId]/components/impersonation-banner' import { WorkspaceChrome } from '@/app/workspace/[workspaceId]/components/workspace-chrome' import { prefetchWorkspaceSidebar } from '@/app/workspace/[workspaceId]/prefetch' import { BlockVisibilityLoader } from '@/app/workspace/[workspaceId]/providers/block-visibility-loader' import { CustomBlocksLoader } from '@/app/workspace/[workspaceId]/providers/custom-blocks-loader' import { GlobalCommandsProvider } from '@/app/workspace/[workspaceId]/providers/global-commands-provider' import { ProviderModelsLoader } from '@/app/workspace/[workspaceId]/providers/provider-models-loader' import { SettingsLoader } from '@/app/workspace/[workspaceId]/providers/settings-loader' import { WorkspacePermissionsProvider } from '@/app/workspace/[workspaceId]/providers/workspace-permissions-provider' import { WorkspaceScopeSync } from '@/app/workspace/[workspaceId]/providers/workspace-scope-sync' import { BrandingProvider } from '@/ee/whitelabeling/components/branding-provider' import { getOrgWhitelabelSettings } from '@/ee/whitelabeling/org-branding' export default async function WorkspaceLayout({ children, params, }: { children: React.ReactNode params: Promise<{ workspaceId: string }> }) { const session = await getSession() if (!session?.user) { redirect('/login') } const { workspaceId } = await params const initialSidebarCollapsed = (await cookies()).get('sidebar_collapsed')?.value === '1' const queryClient = getQueryClient() const sidebarPrefetch = prefetchWorkspaceSidebar(queryClient, workspaceId, session.user.id) // The organization plugin is conditionally spread so TS can't infer activeOrganizationId on the base session type. const orgId = (session.session as { activeOrganizationId?: string } | null)?.activeOrganizationId const initialOrgSettings = orgId ? await getOrgWhitelabelSettings(orgId) : null await sidebarPrefetch return (
{children}
) }