UI: Add notification popover loadings state

This commit is contained in:
Vladyslav_Prykhodko 2023-09-14 15:20:07 +03:00
parent cf285e25ad
commit 1a272d2595
4 changed files with 35 additions and 18 deletions

View File

@ -24,6 +24,7 @@
</button>
</section>
<mat-divider></mat-divider>
<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">
@ -41,7 +42,14 @@
{{ '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>

View File

@ -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)
}),

View File

@ -52,7 +52,7 @@ export class NotificationSubscriber extends WsSubscriber {
cmdUpdateType: undefined,
errorCode: 0,
errorMsg: '',
notifications: [],
notifications: null,
totalUnreadCount: 0
});

View File

@ -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",