24 lines
924 B
TypeScript
24 lines
924 B
TypeScript
import { Injectable, TemplateRef, signal } from '@angular/core';
|
|
|
|
/**
|
|
* Bridges per-page action controls into the shared system header rendered by
|
|
* UserPortalComponent. A child route cannot project content into its parent
|
|
* shell through <router-outlet>, so pages register a TemplateRef here and the
|
|
* shell renders it in the header's right-side actions slot.
|
|
*/
|
|
@Injectable({ providedIn: 'root' })
|
|
export class PageHeaderService {
|
|
/** The current page's action controls, or null when the page has none. */
|
|
readonly actions = signal<TemplateRef<unknown> | null>(null);
|
|
|
|
/** Called by a page (typically in ngAfterViewInit) to publish its actions. */
|
|
public setActions(actionsTemplate: TemplateRef<unknown> | null): void {
|
|
this.actions.set(actionsTemplate);
|
|
}
|
|
|
|
/** Called by a page in ngOnDestroy so its actions do not leak to the next page. */
|
|
public clear(): void {
|
|
this.actions.set(null);
|
|
}
|
|
}
|