Browse Source

Merge pull request #9254 from vvlladd28/improvement/notification/add-loading-state

Added notification popover loadings state
pull/9264/head
Igor Kulikov 3 years ago
committed by GitHub
parent
commit
700165ac53
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
  1. 40
      ui-ngx/src/app/modules/home/components/notification/show-notification-popover.component.html
  2. 10
      ui-ngx/src/app/modules/home/components/notification/show-notification-popover.component.ts
  3. 2
      ui-ngx/src/app/shared/models/websocket/notification-ws.models.ts
  4. 1
      ui-ngx/src/assets/locale/locale.constant-en_US.json

40
ui-ngx/src/app/modules/home/components/notification/show-notification-popover.component.html

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

10
ui-ngx/src/app/modules/home/components/notification/show-notification-popover.component.ts

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

2
ui-ngx/src/app/shared/models/websocket/notification-ws.models.ts

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

1
ui-ngx/src/assets/locale/locale.constant-en_US.json

@ -3203,6 +3203,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…
Cancel
Save