nm-worklists
src/app/shared/widgets/portal/worklists/worklists.component.ts
This class represents WorkListComponent.
changeDetection | ChangeDetectionStrategy.OnPush |
selector | nm-worklists |
styleUrls | worklists.component.scss |
templateUrl | ./worklists.component.html |
Widget inputs |
Widget outputs |
Properties |
|
Methods |
constructor(currentLocaleService: CurrentLocaleService, widgetframeService: WidgetframeService, appsLoaderService: AppsLoaderService, router: Router, translateService: TranslateService, halService: HalService)
|
|||||||||||||||||||||
Parameters :
|
Protected configureWidget | ||||||
configureWidget(configuration: WidgetConfig)
|
||||||
Decorators : WidgetConfigure
|
||||||
Parameters :
Returns :
void
|
doRefresh |
doRefresh()
|
Returns :
Observable<any>
|
getLongSyncInfo | ||||
getLongSyncInfo(worklist: )
|
||||
Parameters :
Returns :
string
|
ngOnDestroy |
ngOnDestroy()
|
Returns :
void
|
openWorklists | ||||
openWorklists(worklist: )
|
||||
Parameters :
Returns :
void
|
refreshAllDynamicWorkLists |
refreshAllDynamicWorkLists()
|
Returns :
void
|
refreshWorkList | ||||||
refreshWorkList(worklist: , event: )
|
||||||
Parameters :
Returns :
void
|
Public _id |
_id:
|
Decorators : WidgetId
|
Private _refresh |
_refresh:
|
Default value : new Subject<any>()
|
Public _refreshButtonVisible |
_refreshButtonVisible:
|
Default value : false
|
Public configuration |
configuration:
|
Type : WidgetConfig
|
Decorators : WidgetConfiguration
|
Public infoText |
infoText:
|
Type : string
|
Public title |
title:
|
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>