import { use } from 'react'; import { cookies } from 'next/headers'; import { z } from 'zod'; import { CompanyGuard, TeamAccountWorkspaceContextProvider, } from '@kit/team-accounts/components'; import { Page, PageMobileNavigation, PageNavigation } from '@kit/ui/page'; import { SidebarProvider } from '@kit/ui/shadcn-sidebar'; import { AppLogo } from '~/components/app-logo'; import { getTeamAccountSidebarConfig } from '~/config/team-account-navigation.config'; import { withI18n } from '~/lib/i18n/with-i18n'; // local imports import { TeamAccountLayoutMobileNavigation } from './_components/team-account-layout-mobile-navigation'; import { TeamAccountLayoutSidebar } from './_components/team-account-layout-sidebar'; import { TeamAccountNavigationMenu } from './_components/team-account-navigation-menu'; import { loadTeamWorkspace } from './_lib/server/team-account-workspace.loader'; type TeamWorkspaceLayoutProps = React.PropsWithChildren<{ params: Promise<{ account: string }>; }>; function TeamWorkspaceLayout({ children, params }: TeamWorkspaceLayoutProps) { const account = use(params).account; const state = use(getLayoutState(account)); if (state.style === 'sidebar') { return {children}; } return {children}; } function SidebarLayout({ account, children, }: React.PropsWithChildren<{ account: string; }>) { const data = use(loadTeamWorkspace(account)); const state = use(getLayoutState(account)); const accounts = data.accounts.map( ({ name, slug, picture_url, application_role }) => ({ label: name, value: slug, image: picture_url, application_role, }), ); return (
{children}
); } function HeaderLayout({ account, children, }: React.PropsWithChildren<{ account: string; }>) { const data = use(loadTeamWorkspace(account)); const accounts = data.accounts.map( ({ name, slug, picture_url, application_role }) => ({ label: name, value: slug, image: picture_url, application_role, }), ); return (
{children}
); } async function getLayoutState(account: string) { const cookieStore = await cookies(); const config = getTeamAccountSidebarConfig(account); const LayoutStyleSchema = z .enum(['sidebar', 'header', 'custom']) .default(config.style); const sidebarOpenCookie = cookieStore.get('sidebar:state'); const layoutCookie = cookieStore.get('layout-style'); const layoutStyle = LayoutStyleSchema.safeParse(layoutCookie?.value); const sidebarOpenCookieValue = sidebarOpenCookie ? sidebarOpenCookie.value === 'false' : !config.sidebarCollapsed; const style = layoutStyle.success ? layoutStyle.data : config.style; return { open: sidebarOpenCookieValue, style, }; } export default withI18n(CompanyGuard(TeamWorkspaceLayout));