From ec8ed8f6a87e8b5c8bce3cbf28070fd2617c8cd8 Mon Sep 17 00:00:00 2001 From: sdarbinyan Date: Thu, 13 Aug 2026 09:14:56 +0400 Subject: [PATCH] fix: Site Layout builder setting saved but never read by page rendering bootstrap.layout.type (the 'Site Layout' selector in the theme editor) was only ever consulted by a validator checking it against the known list - nothing used it to actually pick a layout. SectionEngineService already resolves a per-page layout.type with a hardcoded 'default' fallback; that fallback now reads the site-wide setting first. Co-Authored-By: Claude Sonnet 5 --- .../section-engine/section-engine.service.ts | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/src/app/dynamic-renderer/section-engine/section-engine.service.ts b/src/app/dynamic-renderer/section-engine/section-engine.service.ts index 889c163..6fddddf 100644 --- a/src/app/dynamic-renderer/section-engine/section-engine.service.ts +++ b/src/app/dynamic-renderer/section-engine/section-engine.service.ts @@ -1,12 +1,15 @@ -import { Injectable } from '@angular/core'; +import { Injectable, inject } 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'; import { PlatformLayoutConfig, PlatformLayoutType } from '../../shared/models/config'; import { SectionConfig } from '../../shared/models/config'; +import { ConfigService } from '../../core/config/config.service'; @Injectable({ providedIn: 'root' }) export class SectionEngineService { + private readonly configService = inject(ConfigService); + constructor(private readonly sectionRenderer: SectionRendererService) {} toPageRenderModel(page: PageConfig): PageRenderModel { @@ -27,12 +30,23 @@ export class SectionEngineService { }; } + /** + * Falls back to the site-wide builder setting (bootstrap.layout.type, + * "Site Layout" in the theme editor) when a page has no layout of its + * own - previously that global setting was saved but never read by + * rendering at all, so it had no visible effect. + */ private resolveLayoutType(layout: PageConfig['layout']): string { if (typeof layout === 'string') { return layout; } - return (layout as PlatformLayoutConfig)?.type ?? 'default'; + const pageLayoutType = (layout as PlatformLayoutConfig)?.type; + if (pageLayoutType) { + return pageLayoutType; + } + + return this.configService.getBootstrapSnapshot()?.layout?.type ?? 'default'; } private normalizeSectionsByLayout(sections: PageConfig['sections'], layoutType: string): PageConfig['sections'] {