UI: Add notification popover loadings state
This commit is contained in:
parent
cf285e25ad
commit
1a272d2595
@ -24,24 +24,32 @@
|
||||
</button>
|
||||
</section>
|
||||
<mat-divider></mat-divider>
|
||||
<div *ngIf="(notifications$ | async).length; else emptyNotification" style="overflow: auto">
|
||||
<section style="min-height: 100px; overflow: auto; padding: 6px 0;">
|
||||
<div *ngFor="let notification of (notifications$ | async); let last = last; trackBy: trackById">
|
||||
<tb-notification [notification]="notification"
|
||||
[onClose]="onClose"
|
||||
(markAsRead)="markAsRead($event)">
|
||||
</tb-notification>
|
||||
<mat-divider *ngIf="!last" style="margin: 4px"></mat-divider>
|
||||
</div>
|
||||
<ng-container *ngIf="loadNotification; else loadingNotification">
|
||||
<div *ngIf="(notifications$ | async).length; else emptyNotification" style="overflow: auto">
|
||||
<section style="min-height: 100px; overflow: auto; padding: 6px 0;">
|
||||
<div *ngFor="let notification of (notifications$ | async); let last = last; trackBy: trackById">
|
||||
<tb-notification [notification]="notification"
|
||||
[onClose]="onClose"
|
||||
(markAsRead)="markAsRead($event)">
|
||||
</tb-notification>
|
||||
<mat-divider *ngIf="!last" style="margin: 4px"></mat-divider>
|
||||
</div>
|
||||
</section>
|
||||
</div>
|
||||
<mat-divider *ngIf="(notifications$ | async).length"></mat-divider>
|
||||
<section fxLayoutAlign="center center" *ngIf="(notifications$ | async).length">
|
||||
<button fxFlex mat-button color="primary" (click)="viewAll($event)">
|
||||
{{ 'notification.view-all' | translate }}
|
||||
</button>
|
||||
</section>
|
||||
</div>
|
||||
<mat-divider *ngIf="(notifications$ | async).length"></mat-divider>
|
||||
<section fxLayoutAlign="center center" *ngIf="(notifications$ | async).length">
|
||||
<button fxFlex mat-button color="primary" (click)="viewAll($event)">
|
||||
{{ 'notification.view-all' | translate }}
|
||||
</button>
|
||||
</section>
|
||||
</ng-container>
|
||||
<ng-template #emptyNotification>
|
||||
<img src="assets/notification-bell.svg" alt="empty notification" style="margin: 20px 24%">
|
||||
<span style="text-align: center; margin-bottom: 12px" translate>notification.no-notifications-yet</span>
|
||||
</ng-template>
|
||||
<ng-template #loadingNotification>
|
||||
<div class="tb-no-data-available" style="margin: 20px; gap: 16px;">
|
||||
<mat-spinner color="accent" diameter="65" strokeWidth="4"></mat-spinner>
|
||||
<div class="tb-no-data-text" translate>notification.loading-notifications</div>
|
||||
</div>
|
||||
</ng-template>
|
||||
|
||||
@ -22,7 +22,7 @@ import { AppState } from '@core/core.state';
|
||||
import { Notification, NotificationRequest } from '@shared/models/notification.models';
|
||||
import { NotificationWebsocketService } from '@core/ws/notification-websocket.service';
|
||||
import { BehaviorSubject, Observable, ReplaySubject, Subscription } from 'rxjs';
|
||||
import { share, tap } from 'rxjs/operators';
|
||||
import { map, share, tap } from 'rxjs/operators';
|
||||
import { Router } from '@angular/router';
|
||||
import { NotificationSubscriber } from '@shared/models/websocket/notification-ws.models';
|
||||
|
||||
@ -46,6 +46,7 @@ export class ShowNotificationPopoverComponent extends PageComponent implements O
|
||||
private notificationCountSubscriber: Subscription;
|
||||
|
||||
notifications$: Observable<Notification[]>;
|
||||
loadNotification = false;
|
||||
|
||||
constructor(protected store: Store<AppState>,
|
||||
private notificationWsService: NotificationWebsocketService,
|
||||
@ -58,6 +59,13 @@ export class ShowNotificationPopoverComponent extends PageComponent implements O
|
||||
ngOnInit() {
|
||||
this.notificationSubscriber = NotificationSubscriber.createNotificationsSubscription(this.notificationWsService, this.zone, 6);
|
||||
this.notifications$ = this.notificationSubscriber.notifications$.pipe(
|
||||
map(value => {
|
||||
if (Array.isArray(value)) {
|
||||
this.loadNotification = true;
|
||||
return value;
|
||||
}
|
||||
return [];
|
||||
}),
|
||||
share({
|
||||
connector: () => new ReplaySubject(1)
|
||||
}),
|
||||
|
||||
@ -52,7 +52,7 @@ export class NotificationSubscriber extends WsSubscriber {
|
||||
cmdUpdateType: undefined,
|
||||
errorCode: 0,
|
||||
errorMsg: '',
|
||||
notifications: [],
|
||||
notifications: null,
|
||||
totalUnreadCount: 0
|
||||
});
|
||||
|
||||
|
||||
@ -3201,6 +3201,7 @@
|
||||
"dashboard": "Open dashboard",
|
||||
"link": "Open URL link"
|
||||
},
|
||||
"loading-notifications": "Loading notifications...",
|
||||
"management": "Notification management",
|
||||
"mark-all-as-read": "Mark all as read",
|
||||
"mark-as-read": "Mark as read",
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user