25 lines
826 B
TypeScript
25 lines
826 B
TypeScript
|
|
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
|
||
|
|
};
|
||
|
|
}
|
||
|
|
}
|