feat(core)!: introduce runtime extension registry and flat module conventions
BREAKING CHANGE: sup config now derives entries from package.json#exports and a server/client glob instead of manual lists; module structure follows flat + barrel convention with .server.js/.client.js runtime suffixes
This commit is contained in:
@@ -1,11 +1,37 @@
|
||||
'use client';
|
||||
|
||||
/**
|
||||
* Admin Pages Export for Next.js App Router
|
||||
*
|
||||
* This exports the admin client components.
|
||||
* Users must create their own server component wrapper that uses protectAdmin.
|
||||
*/
|
||||
import { getPage } from './registry.js';
|
||||
import './pages/index.client.js';
|
||||
import './widgets/index.client.js';
|
||||
|
||||
export { default as AdminPagesClient } from './components/AdminPages.js';
|
||||
export { default as AdminPagesLayout } from './components/AdminPagesLayout.js';
|
||||
export default function AdminPageClient({ params, user, widgetData }) {
|
||||
const parts = params?.admin || [];
|
||||
const [first, second, third] = parts;
|
||||
|
||||
// Routes paramétrées — le registre stocke le composant sous un slug
|
||||
// "namespace:form", le client y attache les bons props.
|
||||
if (first === 'users' && second === 'edit' && third) {
|
||||
const page = getPage('users:edit');
|
||||
if (page) return <page.Component userId={third} user={user} />;
|
||||
}
|
||||
if (first === 'roles' && second === 'edit' && third) {
|
||||
const page = getPage('roles:edit');
|
||||
if (page) return <page.Component roleId={third} user={user} />;
|
||||
}
|
||||
if (first === 'roles' && second === 'new') {
|
||||
const page = getPage('roles:edit');
|
||||
if (page) return <page.Component roleId="new" user={user} />;
|
||||
}
|
||||
|
||||
const slug = first || 'dashboard';
|
||||
const page = getPage(slug) || getPage('dashboard');
|
||||
if (!page) return null;
|
||||
|
||||
const { Component } = page;
|
||||
// Le tableau de bord reçoit les données collectées côté serveur ; les
|
||||
// autres pages ne connaissent pas le widget data.
|
||||
if (slug === 'dashboard') {
|
||||
return <Component user={user} stats={widgetData} />;
|
||||
}
|
||||
return <Component user={user} params={parts} />;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user