feat(admin): extract AdminLayout as a separate server component
This commit is contained in:
@@ -72,6 +72,9 @@
|
|||||||
"./features/admin/server": {
|
"./features/admin/server": {
|
||||||
"import": "./dist/features/admin/AdminPage.server.js"
|
"import": "./dist/features/admin/AdminPage.server.js"
|
||||||
},
|
},
|
||||||
|
"./features/admin/layout": {
|
||||||
|
"import": "./dist/features/admin/AdminLayout.server.js"
|
||||||
|
},
|
||||||
"./features/admin/client": {
|
"./features/admin/client": {
|
||||||
"import": "./dist/features/admin/AdminPage.client.js"
|
"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 AdminPageClient from './AdminPage.client.js';
|
||||||
import { protectAdmin } from './protect.js';
|
import { protectAdmin } from './protect.js';
|
||||||
import { buildNavigationSections } from './navigation.js';
|
|
||||||
import { collectWidgetData } from './registry.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 }) {
|
export default async function AdminPage({ params }) {
|
||||||
const resolvedParams = await params;
|
const resolvedParams = await params;
|
||||||
const session = await protectAdmin();
|
const session = await protectAdmin();
|
||||||
const appName = getAppName();
|
|
||||||
|
|
||||||
const widgetData = await collectWidgetData();
|
const widgetData = await collectWidgetData();
|
||||||
const navigationSections = buildNavigationSections('/');
|
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<AdminShell
|
<AdminPageClient
|
||||||
|
params={resolvedParams}
|
||||||
user={session.user}
|
user={session.user}
|
||||||
onLogout={logoutAction}
|
widgetData={widgetData}
|
||||||
appName={appName}
|
/>
|
||||||
navigationSections={navigationSections}
|
|
||||||
>
|
|
||||||
<AdminPageClient
|
|
||||||
params={resolvedParams}
|
|
||||||
user={session.user}
|
|
||||||
widgetData={widgetData}
|
|
||||||
/>
|
|
||||||
</AdminShell>
|
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -34,13 +34,6 @@ const AdminSidebar = ({ isMobileMenuOpen, setIsMobileMenuOpen, appName, enabledM
|
|||||||
return initial;
|
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) => {
|
const toggleSection = (sectionId) => {
|
||||||
setCollapsedSections(prev => {
|
setCollapsedSections(prev => {
|
||||||
const next = new Set(prev);
|
const next = new Set(prev);
|
||||||
@@ -49,9 +42,6 @@ const AdminSidebar = ({ isMobileMenuOpen, setIsMobileMenuOpen, appName, enabledM
|
|||||||
} else {
|
} else {
|
||||||
next.add(sectionId);
|
next.add(sectionId);
|
||||||
}
|
}
|
||||||
try {
|
|
||||||
sessionStorage.setItem('zen-admin-sidebar-collapsed', JSON.stringify([...next]));
|
|
||||||
} catch {}
|
|
||||||
return next;
|
return next;
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|||||||
Reference in New Issue
Block a user