File
Implements
Metadata
selector |
c8y-application-list |
templateUrl |
./application-list.component.html |
Methods
addApplication
|
addApplication()
|
|
loadApplications
|
loadApplications()
|
|
apps$
|
apps$: Observable<IResultList<IApplication>>
|
Type : Observable<IResultList<IApplication>>
|
Default value : this.reload$.pipe(
tap(() => (this.reloading = true)),
switchMap(() =>
// This is a temporary workaround.
// In MTM-38452, BE will introduce application filtering by multiple types.
combineLatest(
this.ecosystemService.getApplications({ type: ApplicationType.HOSTED, pageSize: 200 }),
this.ecosystemService.getApplications({ type: ApplicationType.EXTERNAL, pageSize: 200 })
).pipe(
map(([hostedApps, externalApps]) => {
hostedApps.data = [...hostedApps.data, ...externalApps.data];
return hostedApps;
})
)
),
tap(() => (this.reloading = false)),
shareReplay()
)
|
reload$
|
reload$: BehaviorSubject<void>
|
Type : BehaviorSubject<void>
|
Default value : new BehaviorSubject(null)
|
<c8y-title>Applications</c8y-title>
<c8y-action-bar-item [placement]="'right'">
<button class="btn btn-link" title="{{ 'Reload' | translate }}" (click)="loadApplications()">
<i c8yIcon="refresh" [ngClass]="{ 'icon-spin': reloading }"></i>
{{ 'Reload' | translate }}
</button>
</c8y-action-bar-item>
<c8y-action-bar-item [placement]="'left'" itemClass="navbar-form hidden-xs">
<c8y-list-display-switch
[listLength]="(apps$ | async)?.length"
(onListClassChange)="listClass = $event"
></c8y-list-display-switch>
</c8y-action-bar-item>
<div class="c8y-empty-state text-center" *ngIf="(apps$ | async)?.length === 0">
<h1 class="c8y-icon c8y-icon-modules c8y-icon-duocolor"></h1>
<h3 translate>No applications to display.</h3>
<p translate>Add your first application by clicking below.</p>
<p>
<button
title="{{ 'Add application' | translate }}"
(click)="addApplication()"
class="btn btn-primary"
>
{{ 'Add application' | translate }}
</button>
</p>
</div>
<div class="card-group" [ngClass]="listClass">
<div class="page-sticky-header hidden-xs flex-row">
<div class="card-block card-column-30">
<div class="card-appicon p-l-32 p-r-16 m-r-0 m-l-4"></div>
Application
</div>
<div class="card-block card-column-90">
<div class="card-column-80">{{ 'Description' | translate }}</div>
<div class="card-column-20">{{ 'Type' | translate }}</div>
<div class="card-column-20"></div>
</div>
</div>
<div *c8yFor="let app of apps$; loadMore: 'hidden'" class="col-xs-12 col-sm-4 col-md-3">
<c8y-application-list-card
[app]="app"
(onAppDeleted)="loadApplications()"
class="d-contents"
></c8y-application-list-card>
</div>
</div>