@WidgetComponent
File
Description
This class represents info details widget.
Implements
Metadata
selector |
nm-info-details |
styleUrls |
info-details.component.scss |
templateUrl |
./info-details.component.html |
Index
Widget inputs
|
|
|
Widget outputs
|
|
Properties
|
|
Methods
|
|
Constructor
constructor(currentLocaleService: CurrentLocaleService, widgetframeService: WidgetframeService)
|
|
Parameters :
Name |
Type |
Optional |
currentLocaleService |
CurrentLocaleService
|
no
|
widgetframeService |
WidgetframeService
|
no
|
|
Methods
Protected
configureWidget
|
configureWidget(configuration: WidgetConfig)
|
Decorators : WidgetConfigure
|
|
|
ngOnDestroy
|
ngOnDestroy()
|
|
|
Public
_id
|
_id:
|
Decorators : WidgetId
|
|
Public
data
|
data: any[]
|
Type : any[]
|
Default value : [
{ group: "", data: [{ name: "", value: "", link: null }] },
]
|
|
Private
dataInput
|
dataInput:
|
Default value : new Subject<any>()
|
Decorators : WidgetInput
|
|
Private
unsubscribe
|
unsubscribe:
|
Default value : NgUnsubscribe.create()
|
|
import {
timer,
combineLatest,
Observable,
Subscription,
ReplaySubject,
Subject,
} from "rxjs";
import { takeUntil } from "rxjs/operators";
import { Component, OnDestroy } from "@angular/core";
import {
WidgetComponent,
WidgetId,
WidgetConfiguration,
WidgetConfigure,
WidgetInput,
} from "../widget.metadata";
import { WidgetframeService } from "../widgetframe/widgetframe.service";
import { getOrDefault, WidgetConfig } from "../widget.configuration";
import { NgUnsubscribe } from "../../ng-unsubscribe";
import { CurrentLocaleService } from "../../components/i18n/currentLocale.service";
import { Link } from "../../components/hal/hal";
export interface InfoDetailsConfiguration {
header?: string;
title?: string;
infoText?: string;
infoWidth?: string;
infoHeight?: string;
interval?: number;
}
/**
* This class represents info details widget.
*/
@WidgetComponent("nm-info-details")
@Component({
selector: "nm-info-details",
templateUrl: "./info-details.component.html",
styleUrls: ["./info-details.component.scss"],
})
export class InfoDetailsComponentWidget implements OnDestroy {
@WidgetConfiguration()
public configuration: WidgetConfig<InfoDetailsConfiguration>;
@WidgetId()
public _id;
@WidgetInput("data")
private dataInput = new Subject<any>();
public data: any[] = [
{ group: "", data: [{ name: "", value: "", link: null }] },
];
public title: string;
public infoText: string;
public infoWidth: string;
public infoHeight: string;
public header: string;
public interval: number;
public color: string;
private unsubscribe = NgUnsubscribe.create();
constructor(
private currentLocaleService: CurrentLocaleService,
private widgetframeService: WidgetframeService
) {}
@WidgetConfigure()
protected configureWidget(configuration: WidgetConfig) {
this.header = configuration.configuration.header;
this.title = configuration.configuration.title;
this.color = getOrDefault(configuration.configuration.color, "grey");
this.infoText = configuration.configuration.infoText;
this.infoWidth = configuration.configuration.infoWidth;
this.infoHeight = configuration.configuration.infoHeight;
this.interval = configuration.configuration.interval || 5 * 60 * 1000;
const url = (<Link>configuration._links.data).href;
combineLatest(
timer(0, this.interval),
this.currentLocaleService.getCurrentLocale(),
(interval, locale) => interval
)
.pipe(takeUntil(this.unsubscribe))
.subscribe((action) => {
this.widgetframeService.getData(url).subscribe((response) => {
this.data = response.data;
this.data.forEach((value) => {
value.data.sort((a, b) => a.name.localeCompare(b.name));
});
});
});
}
ngOnDestroy() {
if (this.unsubscribe) {
this.unsubscribe.destroy();
}
}
}
<nm-widgetframe
[header]="configuration.configuration.header"
widgetId="{{ _id }}"
[configuration]="configuration"
[infoTitle]="title"
[infoText]="infoText"
[infoWidth]="infoWidth"
[infoHeight]="infoHeight"
[infoPlacement]="'bottom'"
>
<ng-container slot="title">
{{ configuration.configuration.title | translate }}
</ng-container>
<ng-container slot="content">
<div class="nm-widgetframe__content nm-infoDetails {{ '-' + color }}">
<overlay-scrollbars style="height: 100%">
<ng-container *ngFor="let row of data; last as isLast">
<ul class="nm-infoDetails__list">
<h2 class="nm-infoDetails__listGroup">
{{ row.group }}
</h2>
<ng-container *ngFor="let entry of row.data">
<li class="nm-infoDetails__item">
<p
*ngIf="!entry.link && entry.name"
class="nm-infoDetails__itemName"
>
{{ entry.name }}
</p>
<a
*ngIf="entry.link && entry.name"
href="{{ entry.link }}"
target="_blank"
>
<nm-ellipsis [content]="entry.name"></nm-ellipsis>
</a>
<mat-chip-list>
<mat-chip *ngFor="let value of entry.value">{{
value
}}</mat-chip>
</mat-chip-list>
</li>
</ng-container>
</ul>
<hr *ngIf="!isLast" />
</ng-container>
</overlay-scrollbars>
</div>
</ng-container>
</nm-widgetframe>
Legend
Html element with directive