feat(admin): extract AdminLayout as a separate server component

This commit is contained in:
2026-04-22 19:22:14 -04:00
parent cc4527d488
commit 456b1746bd
4 changed files with 30 additions and 29 deletions
+3
View File
@@ -72,6 +72,9 @@
"./features/admin/server": {
"import": "./dist/features/admin/AdminPage.server.js"
},
"./features/admin/layout": {
"import": "./dist/features/admin/AdminLayout.server.js"
},
"./features/admin/client": {
"import": "./dist/features/admin/AdminPage.client.js"
},
+23
View File
@@ -0,0 +1,23 @@
import AdminShell from './components/AdminShell.js';
import { protectAdmin } from './protect.js';
import { buildNavigationSections } from './navigation.js';
import { logoutAction } from '@zen/core/features/auth/actions';
import { getAppName } from '@zen/core';
import './widgets/index.server.js';
export default async function AdminLayout({ children }) {
const session = await protectAdmin();
const appName = getAppName();
const navigationSections = buildNavigationSections('/');
return (
<AdminShell
user={session.user}
onLogout={logoutAction}
appName={appName}
navigationSections={navigationSections}
>
{children}
</AdminShell>
);
}
+4 -19
View File
@@ -1,32 +1,17 @@
import AdminShell from './components/AdminShell.js';
import AdminPageClient from './AdminPage.client.js';
import { protectAdmin } from './protect.js';
import { buildNavigationSections } from './navigation.js';
import { collectWidgetData } from './registry.js';
import { logoutAction } from '@zen/core/features/auth/actions';
import { getAppName } from '@zen/core';
import './widgets/index.server.js';
export default async function AdminPage({ params }) {
const resolvedParams = await params;
const session = await protectAdmin();
const appName = getAppName();
const widgetData = await collectWidgetData();
const navigationSections = buildNavigationSections('/');
return (
<AdminShell
<AdminPageClient
params={resolvedParams}
user={session.user}
onLogout={logoutAction}
appName={appName}
navigationSections={navigationSections}
>
<AdminPageClient
params={resolvedParams}
user={session.user}
widgetData={widgetData}
/>
</AdminShell>
widgetData={widgetData}
/>
);
}
@@ -34,13 +34,6 @@ const AdminSidebar = ({ isMobileMenuOpen, setIsMobileMenuOpen, appName, enabledM
return initial;
});
useEffect(() => {
try {
const stored = sessionStorage.getItem('zen-admin-sidebar-collapsed');
if (stored !== null) setCollapsedSections(new Set(JSON.parse(stored)));
} catch {}
}, []);
const toggleSection = (sectionId) => {
setCollapsedSections(prev => {
const next = new Set(prev);
@@ -49,9 +42,6 @@ const AdminSidebar = ({ isMobileMenuOpen, setIsMobileMenuOpen, appName, enabledM
} else {
next.add(sectionId);
}
try {
sessionStorage.setItem('zen-admin-sidebar-collapsed', JSON.stringify([...next]));
} catch {}
return next;
});
};