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 <noreply@anthropic.com>
This commit is contained in:
@@ -1,12 +1,15 @@
|
|||||||
import { Injectable } from '@angular/core';
|
import { Injectable, inject } from '@angular/core';
|
||||||
import { PageConfig } from '../../shared/models/config';
|
import { PageConfig } from '../../shared/models/config';
|
||||||
import { PageRenderModel } from '../page-renderer/page-renderer.model';
|
import { PageRenderModel } from '../page-renderer/page-renderer.model';
|
||||||
import { SectionRendererService } from '../section-renderer/section-renderer.service';
|
import { SectionRendererService } from '../section-renderer/section-renderer.service';
|
||||||
import { PlatformLayoutConfig, PlatformLayoutType } from '../../shared/models/config';
|
import { PlatformLayoutConfig, PlatformLayoutType } from '../../shared/models/config';
|
||||||
import { SectionConfig } from '../../shared/models/config';
|
import { SectionConfig } from '../../shared/models/config';
|
||||||
|
import { ConfigService } from '../../core/config/config.service';
|
||||||
|
|
||||||
@Injectable({ providedIn: 'root' })
|
@Injectable({ providedIn: 'root' })
|
||||||
export class SectionEngineService {
|
export class SectionEngineService {
|
||||||
|
private readonly configService = inject(ConfigService);
|
||||||
|
|
||||||
constructor(private readonly sectionRenderer: SectionRendererService) {}
|
constructor(private readonly sectionRenderer: SectionRendererService) {}
|
||||||
|
|
||||||
toPageRenderModel(page: PageConfig): PageRenderModel {
|
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 {
|
private resolveLayoutType(layout: PageConfig['layout']): string {
|
||||||
if (typeof layout === 'string') {
|
if (typeof layout === 'string') {
|
||||||
return layout;
|
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'] {
|
private normalizeSectionsByLayout(sections: PageConfig['sections'], layoutType: string): PageConfig['sections'] {
|
||||||
|
|||||||
Reference in New Issue
Block a user