File

src/modules/app-data/components/app-data.component.ts

Description

Component to display all the data concerning the current user session including the following info:

  • User full name + profile.
  • Last access date of the user.
  • App version + Environment (PROD, DEV, etc...).

Extends

AbstractStarkUiComponent

Implements

OnInit

Metadata

Index

Properties
Methods
Inputs

Constructor

Public constructor(logger: StarkLoggingService, renderer: Renderer2, elementRef: ElementRef)

Class constructor

Parameters :
Name Type Optional Description
logger StarkLoggingService No
  • The StarkLoggingService instance of the application.
renderer Renderer2 No
  • Angular Renderer2 wrapper for DOM manipulations.
elementRef ElementRef No
  • Reference to the DOM element where this component is attached to.

Inputs

mode
Type : StarkAppDataComponentMode
Default value : "dropdown"

The mode in which the component should be displayed.

Default: "dropdown"

color
Type : string
Inherited from AbstractStarkUiComponent

Color theme

Methods

Public ngOnInit
ngOnInit()
Inherited from AbstractStarkUiComponent

Component lifecycle hook

Returns : void

Properties

Public logger
Type : StarkLoggingService
Decorators :
@Inject(STARK_LOGGING_SERVICE)
- The `StarkLoggingService` instance of the application.
import { ChangeDetectionStrategy, Component, ElementRef, Inject, Input, OnInit, Renderer2, ViewEncapsulation } from "@angular/core";
import { STARK_LOGGING_SERVICE, StarkLoggingService } from "@nationalbankbelgium/stark-core";
import { AbstractStarkUiComponent } from "@nationalbankbelgium/stark-ui/src/internal-common";

/**
 * @ignore
 */
const componentName = "stark-app-data";

/**
 * Modes in which the {@link StarkAppDataComponent} can be displayed
 */
export type StarkAppDataComponentMode = "dropdown" | "menu";

/**
 * Component to display all the data concerning the current user session including the following info:
 * - User full name + profile.
 * - Last access date of the user.
 * - App version + Environment (PROD, DEV, etc...).
 */
@Component({
	selector: "stark-app-data",
	templateUrl: "./app-data.component.html",
	encapsulation: ViewEncapsulation.None,
	changeDetection: ChangeDetectionStrategy.OnPush,
	host: {
		class: componentName
	}
})
export class StarkAppDataComponent extends AbstractStarkUiComponent implements OnInit {
	/**
	 * The mode in which the component should be displayed.
	 *
	 * Default: `"dropdown"`
	 */
	@Input() public mode?: StarkAppDataComponentMode = "dropdown";

	/**
	 * Class constructor
	 * @param logger - The `StarkLoggingService` instance of the application.
	 * @param renderer - Angular `Renderer2` wrapper for DOM manipulations.
	 * @param elementRef - Reference to the DOM element where this component is attached to.
	 */
	public constructor(
		@Inject(STARK_LOGGING_SERVICE) public logger: StarkLoggingService,
		renderer: Renderer2,
		elementRef: ElementRef
	) {
		super(renderer, elementRef);
	}

	/**
	 * Component lifecycle hook
	 */
	public override ngOnInit(): void {
		super.ngOnInit();
		this.logger.debug(componentName + ": controller initialized");
	}
}
<!-- the projected detail content should be put in an ng-template so that it can be rendered multiple times in this template -->
<!-- solution taken from https://github.com/angular/angular/issues/22972#issuecomment-407358396 -->
<ng-template #appDataDetail>
	<div class="stark-app-data-detail" (click)="$event.stopPropagation()">
		<ng-content select=".detail-slot"></ng-content>
	</div>
</ng-template>

<div *ngIf="mode === 'dropdown'" class="stark-app-data dropdown">
	<div class="stark-app-data-summary">
		<ng-content select=".summary-slot"></ng-content>
	</div>

	<button
		mat-icon-button
		aria-label="Application Data"
		#dropdownDetailTrigger="matMenuTrigger"
		[matMenuTriggerFor]="dropdownDetail"
		[class.is-open]="dropdownDetailTrigger.menuOpen"
		mat-button
	>
		<mat-icon svgIcon="menu-down"></mat-icon>
	</button>
	<mat-menu #dropdownDetail="matMenu" xPosition="before" yPosition="below" class="stark-app-data dropdown-detail">
		<ng-template matMenuContent>
			<ng-container *ngTemplateOutlet="appDataDetail"></ng-container>
		</ng-template>
	</mat-menu>
</div>

<div *ngIf="mode === 'menu'" class="stark-app-data menu">
	<button
		mat-button
		mat-icon-button
		aria-label="Application Data"
		[matMenuTriggerFor]="menuDetail"
		[matTooltip]="'STARK.ICONS.APP_DATA' | translate"
	>
		<mat-icon svgIcon="dots-vertical"></mat-icon>
	</button>
	<mat-menu #menuDetail="matMenu" yPosition="below" class="stark-app-data menu-detail">
		<ng-template matMenuContent>
			<ng-container *ngTemplateOutlet="appDataDetail"></ng-container>
		</ng-template>
	</mat-menu>
</div>
Legend
Html element
Component
Html element with directive

results matching ""

    No results matching ""