Sprint 7: add section engine

This commit is contained in:
sdarbinyan
2026-07-05 01:55:41 +04:00
parent d4a5daeb4c
commit 91d9444875
10 changed files with 203 additions and 62 deletions

View File

@@ -1,25 +1,13 @@
import { Injectable } from '@angular/core';
import { PageConfig } from '../../shared/models/config';
import { PageRenderModel } from './page-renderer.model';
import { SectionRendererService } from '../section-renderer/section-renderer.service';
import { SectionEngineService } from '../section-engine/section-engine.service';
@Injectable({ providedIn: 'root' })
export class PageRendererService {
constructor(private readonly sectionRenderer: SectionRendererService) {}
constructor(private readonly sectionEngine: SectionEngineService) {}
toRenderModel(page: PageConfig): PageRenderModel {
const sections = (page.sections ?? [])
.filter(section => section.visible !== false)
.sort((a, b) => a.order - b.order)
.map(section => this.sectionRenderer.toRenderNode(section));
return {
id: page.id,
key: page.key,
title: page.title,
layout: page.layout,
sections,
source: page
};
return this.sectionEngine.toPageRenderModel(page);
}
}

View File

@@ -0,0 +1,25 @@
import { Injectable } from '@angular/core';
import { PageConfig } from '../../shared/models/config';
import { PageRenderModel } from '../page-renderer/page-renderer.model';
import { SectionRendererService } from '../section-renderer/section-renderer.service';
@Injectable({ providedIn: 'root' })
export class SectionEngineService {
constructor(private readonly sectionRenderer: SectionRendererService) {}
toPageRenderModel(page: PageConfig): PageRenderModel {
const sections = (page.sections ?? [])
.filter((section) => section.visible !== false)
.sort((a, b) => a.order - b.order)
.map((section) => this.sectionRenderer.toRenderNode(section));
return {
id: page.id,
key: page.key,
title: page.title,
layout: page.layout,
sections,
source: page
};
}
}

View File

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

View File

@@ -22,6 +22,8 @@ export class SectionRendererService {
id: section.id,
type: section.type,
order: section.order,
layout: section.layout,
visibility: section.visibility,
featureFlag: section.featureFlag,
visible: section.visible,
widgets,