1 import { Injectable, SecurityContext } from '@angular/core';
2 import { Observable } from 'rxjs/Observable';
3 import { Subject } from 'rxjs/Subject';
6 export type AlertType = 'error' | 'warning' | 'info' | 'success';
8 export interface IAlert {
12 dismissible?: boolean;
13 dismissTimeout?: number; // close alert after this time (in seconds)
18 export class AlertService {
19 public alerts: Observable<IAlert[]>;
21 private _alerts: IAlert[];
22 private alertsSubject = <Subject<IAlert[]>>new Subject();
24 private defaultDismissTmo = 5; // in seconds
27 this.alerts = this.alertsSubject.asObservable();
32 public error(msg: string, dismissTime?: number) {
34 type: 'error', msg: msg, dismissible: true, dismissTimeout: dismissTime,
38 public warning(msg: string, dismissible?: boolean) {
39 this.add({ type: 'warning', msg: msg, dismissible: true, dismissTimeout: (dismissible ? this.defaultDismissTmo : 0) });
42 public info(msg: string) {
43 this.add({ type: 'info', msg: msg, dismissible: true, dismissTimeout: this.defaultDismissTmo });
46 public add(al: IAlert) {
47 const msg = String(al.msg).replace('\n', '<br>');
48 // this._alerts.push({
53 dismissible: al.dismissible || true,
54 dismissTimeout: (al.dismissTimeout * 1000) || 0,
58 this.alertsSubject.next(this._alerts);
62 public del(al: IAlert) {
64 const idx = this._alerts.findIndex((a) => a.id === al.id);
66 this._alerts.splice(idx, 1);
67 this.alertsSubject.next(this._alerts);
71 this.alertsSubject.next(this._alerts);