import type { IChangesObject, IComponentOptions, IController, IOnChangesObject } from 'angular'; import { module } from 'angular'; import type { INavigationPage } from './PageNavigationState'; import { PageNavigationState } from './PageNavigationState'; interface IPageSectionOnChanges extends IOnChangesObject { visible: IChangesObject; label: IChangesObject; badge: IChangesObject; } class PageSectionController implements IController { public key: string; public label: string; public badge: string; public visible: boolean; public noWrapper: boolean; private pageConfig: INavigationPage; public $onInit(): void { this.visible = this.visible !== false; this.pageConfig = { key: this.key, label: this.label, visible: this.visible, badge: this.badge, }; PageNavigationState.registerPage(this.pageConfig); } public $onChanges(changes: IPageSectionOnChanges): void { if (changes.visible && !changes.visible.isFirstChange()) { this.pageConfig.visible = changes.visible.currentValue; } if (changes.label && !changes.label.isFirstChange()) { this.pageConfig.label = changes.label.currentValue; } if (changes.badge && !changes.badge.isFirstChange()) { this.pageConfig.badge = changes.badge.currentValue; } } } const pageSectionComponent: IComponentOptions = { bindings: { key: '@', label: '@', badge: '<', visible: '<', noWrapper: '<', }, controller: PageSectionController, transclude: true, template: `
`, }; export const PAGE_SECTION_COMPONENT = 'spinnaker.core.presentation.navigation.pageSection'; module(PAGE_SECTION_COMPONENT, []).component('pageSection', pageSectionComponent);