feat(admin): extract AdminLayout as a separate server component
This commit is contained in:
@@ -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"
|
||||
},
|
||||
|
||||
@@ -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>
|
||||
);
|
||||
}
|
||||
@@ -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;
|
||||
});
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user