@WidgetComponent

nm-worklists

File

src/app/shared/widgets/portal/worklists/worklists.component.ts

Description

This class represents WorkListComponent.

Implements

OnDestroy

Metadata

changeDetection ChangeDetectionStrategy.OnPush
selector nm-worklists
styleUrls worklists.component.scss
templateUrl ./worklists.component.html

Index

Widget inputs
Widget outputs
Properties
Methods

Constructor

constructor(currentLocaleService: CurrentLocaleService, widgetframeService: WidgetframeService, appsLoaderService: AppsLoaderService, router: Router, translateService: TranslateService, halService: HalService)
Parameters :
Name Type Optional
currentLocaleService CurrentLocaleService no
widgetframeService WidgetframeService no
appsLoaderService AppsLoaderService no
router Router no
translateService TranslateService no
halService HalService no

Methods

Protected configureWidget
configureWidget(configuration: WidgetConfig)
Decorators : WidgetConfigure
Parameters :
Name Type Optional
configuration WidgetConfig no
Returns : void
doRefresh
doRefresh()
Returns : Observable<any>
getLongSyncInfo
getLongSyncInfo(worklist: )
Parameters :
Name Optional
worklist no
Returns : string
ngOnDestroy
ngOnDestroy()
Returns : void
openWorklists
openWorklists(worklist: )
Parameters :
Name Optional
worklist no
Returns : void
refreshAllDynamicWorkLists
refreshAllDynamicWorkLists()
Returns : void
refreshWorkList
refreshWorkList(worklist: , event: )
Parameters :
Name Optional
worklist no
event no
Returns : void

Properties

Public _id
_id:
Decorators : WidgetId
Private _refresh
_refresh:
Default value : new Subject<any>()
Public _refreshButtonVisible
_refreshButtonVisible:
Default value : false
Public configuration
configuration: WidgetConfig
Type : WidgetConfig
Decorators : WidgetConfiguration
Public infoText
infoText: string
Type : string
Public title
title: string
Type : string
Private unsubscribe
unsubscribe:
Default value : NgUnsubscribe.create()
Public worklists
worklists:
Default value : new BehaviorSubject<any[]>([])
import {
  merge,
  Observable,
  Subject,
  timer,
  forkJoin,
  BehaviorSubject,
} from "rxjs";
import { ChangeDetectionStrategy, Component, OnDestroy } from "@angular/core";
import { WidgetConfig } from "../../widget.configuration";
import {
  WidgetComponent,
  WidgetConfiguration,
  WidgetConfigure,
  WidgetId,
} from "../../widget.metadata";
import { WidgetframeService } from "../../widgetframe/widgetframe.service";
import { CurrentLocaleService } from "../../../components/i18n/currentLocale.service";
import { Link } from "../../../components/hal/hal";
import { Router } from "@angular/router";
import { AppsLoaderService } from "../../../components/apps/apps-loader.service";
import {
  first,
  pluck,
  takeUntil,
  tap,
  throttleTime,
  mapTo,
  switchMap,
} from "rxjs/operators";
import { NgUnsubscribe } from "../../../ng-unsubscribe";
import { TranslateService } from "@ngx-translate/core";
import { HalService } from "../../../components/hal/hal.service";

/**
 * This class represents WorkListComponent.
 */
@WidgetComponent("nm-worklists")
@Component({
  selector: "nm-worklists",
  templateUrl: "./worklists.component.html",
  styleUrls: ["./worklists.component.scss"],
  changeDetection: ChangeDetectionStrategy.OnPush,
})
export class WorklistsComponentWidget implements OnDestroy {
  @WidgetConfiguration()
  public configuration: WidgetConfig;

  @WidgetId()
  public _id;

  public worklists = new BehaviorSubject<any[]>([]);
  public title: string;
  public infoText: string;
  private _refresh = new Subject<any>();
  private unsubscribe = NgUnsubscribe.create();
  public _refreshButtonVisible = false;

  constructor(
    private currentLocaleService: CurrentLocaleService,
    private widgetframeService: WidgetframeService,
    private appsLoaderService: AppsLoaderService,
    private router: Router,
    private translateService: TranslateService,
    private halService: HalService
  ) {}

  @WidgetConfigure()
  protected configureWidget(configuration: WidgetConfig) {
    let url = (<Link>configuration._links["data"]).href;
    merge(
      timer(0, this.configuration.configuration.interval).pipe(mapTo("timer")),
      this.currentLocaleService.getCurrentLocale().pipe(mapTo("locale")),
      this._refresh.pipe(mapTo("refresh"))
    )
      .pipe(
        takeUntil(this.unsubscribe),
        throttleTime(100),
        switchMap((type) => {
          if (
            this._refreshButtonVisible &&
            type !== "refresh" &&
            this.configuration.configuration.triggerDynamicSearch == "true"
          ) {
            return this.doRefresh().pipe(
              switchMap(() => this.widgetframeService.getData(url))
            );
          }
          return this.widgetframeService.getData(url);
        }),
        pluck("_embedded", "worklists"),
        tap(
          (worklistArray) =>
            (this._refreshButtonVisible = worklistArray.some(
              (_worklist) => _worklist.isDynamicWorklist
            ))
        )
      )
      .subscribe(this.worklists);
  }

  openWorklists(worklist) {
    // check if worklist app is installed
    this.appsLoaderService.apps.pipe(first()).subscribe((apps) => {
      if (apps.find((entry) => entry.identifier === "worklist")) {
        this.router.navigateByUrl(
          `/apps/worklist?worklist=${worklist.identifier}`
        );
      }
    });
  }

  refreshWorkList(worklist, event) {
    event.stopPropagation();
    this.halService
      .execute("refresh", worklist._actions.refresh)
      .subscribe(this._refresh);
  }

  doRefresh(): Observable<any> {
    const observables = this.worklists.value
      .filter((wl) => wl.isDynamicWorklist)
      .map((wl) => this.halService.execute("refresh", wl._actions.refresh));

    return forkJoin(...observables);
  }
  refreshAllDynamicWorkLists() {
    this.doRefresh().subscribe(this._refresh);
  }

  getLongSyncInfo(worklist): string {
    let pre = this.translateService.instant("web.label.last-synchronization");
    return pre + ": " + new Date(worklist.lastModified).toLocaleString();
  }

  ngOnDestroy() {
    if (this.unsubscribe) {
      this.unsubscribe.destroy();
    }
  }
}
<nm-widgetframe
  [header]="configuration.configuration['header']"
  widgetId="{{ _id }}"
  [configuration]="configuration"
  [infoTitle]="title"
  [infoText]="infoText"
  [infoPlacement]="'bottom'"
>
  <ng-container slot="title">
    <div class="nm-widgetframe__title">
      {{ configuration.configuration["title"] | translate }}
      <button
        *ngIf="_refreshButtonVisible"
        (click)="refreshAllDynamicWorkLists()"
        [matTooltip]="
          'web.dashboard.worklists.all.refresh.tooltip.content' | translate
        "
        class="nm-dataList__headerButton --tree nm-worklist__refreshAll"
        color="primary"
        mat-icon-button
      >
        <mat-icon class="nm-grey-button">update</mat-icon>
      </button>
    </div>
  </ng-container>
  <ng-container slot="content">
    <div class="nm-widgetframe__content">
      <div class="nm-worklist__container">
        <mat-card
          *ngFor="let worklist of worklists | async"
          (click)="openWorklists(worklist)"
          class="nm-worklist__element mat-elevation-z0"
        >
          <mat-card-content>
            <mat-card-title>
              <nm-ellipsis [content]="worklist.description"> </nm-ellipsis
            ></mat-card-title>

            <mat-card-content
              class="{{ _refreshButtonVisible ? 'dynamicWorklists' : '' }}"
            >
              <div class="nm-worklist__number">
                {{ worklist.entries }}
              </div>
              <div
                class="nm-worklist__refresh"
                *ngIf="worklist.isDynamicWorklist"
                [matTooltip]="getLongSyncInfo(worklist)"
                [matTooltipShowDelay]="300"
              >
                <button
                  (click)="refreshWorkList(worklist, $event)"
                  class="nm-dataList__headerButton --tree"
                  color="primary"
                  mat-button
                >
                  <mat-icon class="nm-grey-button">update</mat-icon>
                  <span>{{ worklist.lastModified | amTimeAgo }}</span>
                </button>
              </div>
            </mat-card-content>
          </mat-card-content>
        </mat-card>
      </div>
    </div>
  </ng-container>
</nm-widgetframe>
Legend
Html element
Component
Html element with directive

results matching ""

    No results matching ""