phase-6: add registry-driven dynamic page-section-widget rendering engine

This commit is contained in:
sdarbinyan
2026-07-03 01:35:09 +04:00
parent 7dca7fee7d
commit 3f00884f33
8 changed files with 171 additions and 0 deletions

View File

@@ -0,0 +1,12 @@
import { SectionConfig } from '../../shared/models/config';
import { WidgetRenderNode } from '../widget-host/widget-host.model';
export interface SectionRenderNode {
id: string;
type: string;
order: number;
featureFlag?: string;
visible?: boolean;
widgets: WidgetRenderNode[];
source: SectionConfig;
}

View File

@@ -0,0 +1,31 @@
import { Injectable } from '@angular/core';
import { SectionConfig } from '../../shared/models/config';
import { SectionRenderNode } from './section-renderer.model';
import { WidgetRenderNode } from '../widget-host/widget-host.model';
@Injectable({ providedIn: 'root' })
export class SectionRendererService {
toRenderNode(section: SectionConfig): SectionRenderNode {
const widgets = (section.widgets ?? [])
.filter(widget => widget.visible !== false)
.map<WidgetRenderNode>(widget => ({
id: widget.id,
type: widget.type,
version: widget.version,
props: widget.props ?? {},
featureFlag: widget.featureFlag,
visible: widget.visible,
source: widget
}));
return {
id: section.id,
type: section.type,
order: section.order,
featureFlag: section.featureFlag,
visible: section.visible,
widgets,
source: section
};
}
}