import { Injectable } from '@angular/core'; import { Observable, map } from 'rxjs'; import { ConfigService } from '../../core/config/config.service'; import { BrandingEngineService } from '../../theme/runtime/branding-engine.service'; import { ThemeEngineService } from '../../theme/runtime/theme-engine.service'; import { PageRendererService } from '../../dynamic-renderer/page-renderer/page-renderer.service'; import { PageRenderModel } from '../../dynamic-renderer/page-renderer/page-renderer.model'; import { WidgetRegistryBootstrapService } from '../../widgets/registry/widget-registry.bootstrap.service'; @Injectable({ providedIn: 'root' }) export class WebsiteRuntimeFacade { constructor( private readonly configService: ConfigService, private readonly pageRenderer: PageRendererService, private readonly registryBootstrap: WidgetRegistryBootstrapService, private readonly themeEngine: ThemeEngineService, private readonly brandingEngine: BrandingEngineService ) {} initializeRuntime(): void { this.registryBootstrap.registerDefaults(); this.themeEngine.initialize(); this.brandingEngine.initialize(); } getPageRenderModel(pageKey: string): Observable { return this.configService.loadBootstrap().pipe( map(bootstrap => { const page = bootstrap.pages.find(p => p.key === pageKey && p.visible !== false); return page ? this.pageRenderer.toRenderModel(page) : null; }) ); } }