Sprint 7: add section engine
This commit is contained in:
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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
|
||||
};
|
||||
}
|
||||
}
|
||||
@@ -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[];
|
||||
|
||||
@@ -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,
|
||||
|
||||
Reference in New Issue
Block a user