@WidgetComponent

nm-info-details

File

src/app/shared/widgets/info-details/info-details.component.ts

Description

This class represents info details widget.

Implements

OnDestroy

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
Parameters :
Name Type Optional
configuration WidgetConfig no
Returns : void
ngOnDestroy
ngOnDestroy()
Returns : void

Properties

Public _id
_id:
Decorators : WidgetId
Public color
color: string
Type : string
Public configuration
configuration: WidgetConfig<InfoDetailsConfiguration>
Type : WidgetConfig<InfoDetailsConfiguration>
Decorators : WidgetConfiguration
Public data
data: any[]
Type : any[]
Default value : [ { group: "", data: [{ name: "", value: "", link: null }] }, ]
Private dataInput
dataInput:
Default value : new Subject<any>()
Decorators : WidgetInput
Public header
header: string
Type : string
Public infoHeight
infoHeight: string
Type : string
Public infoText
infoText: string
Type : string
Public infoWidth
infoWidth: string
Type : string
Public interval
interval: number
Type : number
Public title
title: string
Type : string
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
Component
Html element with directive

results matching ""

    No results matching ""