feat(portal-shell): implement portal-shell with apollo-router integration

M8: portal-shell unified frontend shell (Modular Monolith + micro-kernel).

- Apollo Client -> apollo-router (port 4010, RSC prefetch)

- 5 layouts: classic/focus/split/triple/canvas

- Registry + PluginLoader (dynamic import ssr:false)

- 3-layer props merge, Zustand PluginStore

- 4 widgets: grades/notification-bell/user-menu/class-selector

- config-service: new pluginConfig GraphQL resolver

- apollo-router: CORS + header propagation for portal-shell

- docker-compose.yml: portal-shell service block
This commit is contained in:
SpecialX
2026-07-15 08:06:09 +08:00
parent 47e950c664
commit 514e26ebb4
49 changed files with 2802 additions and 6 deletions

View File

@@ -20,6 +20,7 @@ import { ConfigModule } from "../config-config/config.module.js";
import { PluginResolver } from "./resolvers/plugin.resolver.js";
import { LayoutTemplateResolver } from "./resolvers/layout-template.resolver.js";
import { UserLayoutResolver } from "./resolvers/user-layout.resolver.js";
import { PluginConfigResolver } from "./resolvers/plugin-config.resolver.js";
import { DataLoaderService } from "./dataloader.service.js";
@Module({
@@ -50,6 +51,7 @@ import { DataLoaderService } from "./dataloader.service.js";
PluginResolver,
LayoutTemplateResolver,
UserLayoutResolver,
PluginConfigResolver,
DataLoaderService,
],
exports: [DataLoaderService],