phase-6: add registry-driven dynamic page-section-widget rendering engine
This commit is contained in:
11
src/app/dynamic-renderer/widget-host/widget-host.model.ts
Normal file
11
src/app/dynamic-renderer/widget-host/widget-host.model.ts
Normal file
@@ -0,0 +1,11 @@
|
||||
import { WidgetConfig } from '../../shared/models/config';
|
||||
|
||||
export interface WidgetRenderNode {
|
||||
id: string;
|
||||
type: string;
|
||||
version: string;
|
||||
props: Record<string, unknown>;
|
||||
featureFlag?: string;
|
||||
visible?: boolean;
|
||||
source: WidgetConfig;
|
||||
}
|
||||
23
src/app/dynamic-renderer/widget-host/widget-host.service.ts
Normal file
23
src/app/dynamic-renderer/widget-host/widget-host.service.ts
Normal file
@@ -0,0 +1,23 @@
|
||||
import { Injectable } from '@angular/core';
|
||||
import { WidgetConfig } from '../../shared/models/config';
|
||||
import { WidgetRegistryService } from '../../widgets/registry/widget-registry.service';
|
||||
import { ResolvedWidget } from '../../widgets/contracts/widget-component.contract';
|
||||
|
||||
@Injectable({ providedIn: 'root' })
|
||||
export class WidgetHostService {
|
||||
constructor(private readonly registry: WidgetRegistryService) {}
|
||||
|
||||
resolveWidget(widget: WidgetConfig): ResolvedWidget | null {
|
||||
const registered = this.registry.resolve(widget.type, widget.version);
|
||||
if (!registered) {
|
||||
return null;
|
||||
}
|
||||
|
||||
return {
|
||||
type: registered.type,
|
||||
version: registered.version,
|
||||
component: registered.component,
|
||||
props: widget.props ?? {}
|
||||
};
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user