File

src/app/core/navigation/notifications/notifications.component.ts

Implements

OnInit OnDestroy

Metadata

selector cd-notifications
styleUrls ./notifications.component.scss
templateUrl ./notifications.component.html

Index

Properties
Methods

Constructor

constructor(notificationService: NotificationService, prometheusNotificationService: PrometheusNotificationService, authStorageService: AuthStorageService, prometheusAlertService: PrometheusAlertService, ngZone: NgZone)
Parameters :
Name Type Optional
notificationService NotificationService No
prometheusNotificationService PrometheusNotificationService No
authStorageService AuthStorageService No
prometheusAlertService PrometheusAlertService No
ngZone NgZone No

Methods

ngOnDestroy
ngOnDestroy()
Returns : void
ngOnInit
ngOnInit()
Returns : void
removeAll
removeAll()
Returns : void
Private triggerPrometheusAlerts
triggerPrometheusAlerts()
Returns : void

Properties

Private interval
Type : number
notifications
Type : CdNotification[]
Public notificationService
Type : NotificationService
import { Component, NgZone, OnDestroy, OnInit } from '@angular/core';

import * as _ from 'lodash';

import { CdNotification } from '../../../shared/models/cd-notification';
import { AuthStorageService } from '../../../shared/services/auth-storage.service';
import { NotificationService } from '../../../shared/services/notification.service';
import { PrometheusAlertService } from '../../../shared/services/prometheus-alert.service';
import { PrometheusNotificationService } from '../../../shared/services/prometheus-notification.service';

@Component({
  selector: 'cd-notifications',
  templateUrl: './notifications.component.html',
  styleUrls: ['./notifications.component.scss']
})
export class NotificationsComponent implements OnInit, OnDestroy {
  notifications: CdNotification[];
  private interval: number;

  constructor(
    public notificationService: NotificationService,
    private prometheusNotificationService: PrometheusNotificationService,
    private authStorageService: AuthStorageService,
    private prometheusAlertService: PrometheusAlertService,
    private ngZone: NgZone
  ) {
    this.notifications = [];
  }

  ngOnDestroy() {
    window.clearInterval(this.interval);
  }

  ngOnInit() {
    if (this.authStorageService.getPermissions().prometheus.read) {
      this.triggerPrometheusAlerts();
      this.ngZone.runOutsideAngular(() => {
        this.interval = window.setInterval(() => {
          this.ngZone.run(() => {
            this.triggerPrometheusAlerts();
          });
        }, 5000);
      });
    }
    this.notificationService.data$.subscribe((notifications: CdNotification[]) => {
      this.notifications = _.orderBy(notifications, ['timestamp'], ['desc']);
    });
  }

  private triggerPrometheusAlerts() {
    this.prometheusAlertService.refresh();
    this.prometheusNotificationService.refresh();
  }

  removeAll() {
    this.notificationService.removeAll();
  }
}
<ng-template #notificationsTpl>
  <div *ngIf="notifications.length > 0">
    <button type="button" class="btn btn-default btn-sm btn-block" (click)="removeAll()">
      <i class="fa fa-trash-o" aria-hidden="true"></i>
      &nbsp;
      <ng-container i18n>Remove all</ng-container>
    </button>
    <hr>
    <div *ngFor="let notification of notifications">
      <table>
        <tr>
          <td rowspan="3" class="icon-col text-center">
            <span [ngClass]="['fa-stack fa-2x', notification.textClass]">
              <i class="fa fa-circle fa-stack-2x"></i>
              <i [ngClass]="['fa fa-stack-1x fa-inverse', notification.iconClass]"></i>
            </span>
          </td>
          <td>
            <strong>{{ notification.title }}</strong>
          </td>
        </tr>
        <tr>
          <td [innerHtml]="notification.message">
          </td>
        </tr>
        <tr>
          <td [innerHtml]="notificationService.renderTimeAndApplicationHtml(notification)"></td>
        </tr>
      </table>
      <hr>
    </div>
  </div>
</ng-template>

<ng-template #emptyTpl>
  <div *ngIf="notifications.length === 0">
    <div class="message">
      There are no notifications.
    </div>
  </div>
</ng-template>

<ng-template #popTpl>
  <ng-container *ngTemplateOutlet="notificationsTpl"></ng-container>
  <ng-container *ngTemplateOutlet="emptyTpl"></ng-container>
</ng-template>

<a [popover]="popTpl"
   placement="bottom"
   container="body"
   outsideClick="true"
   i18n-title
   title="Recent Notifications">
  <i class="fa fa-fw fa-bell"></i>
  <span i18n
        class="visible-xs-inline-block">Recent Notifications</span>
</a>

./notifications.component.scss

@import '../../../../styles/popover.scss';
Legend
Html element
Component
Html element with directive

result-matching ""

    No results matching ""