/* * Copyright (c) 2022. Deutsche Telekom AG * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * * SPDX-License-Identifier: Apache-2.0 */ import { Injectable } from '@angular/core'; import { Observable, Subject } from 'rxjs'; import { filter } from 'rxjs/operators'; import { Alert, AlertType } from './alert.model'; @Injectable({ providedIn: 'root' }) export class AlertService { private subject = new Subject(); private defaultId = 'default-alert'; // enable subscribing to alerts observable onAlert(id = this.defaultId): Observable { return this.subject.asObservable().pipe(filter(x => x && x.id === id)); } get alerts() { return this.subject; } // convenience methods success(message: string, options?: Partial) { this.alert(new Alert({ ...options, type: AlertType.Success, message })); } error(message: string, options?: Partial) { this.alert(new Alert({ ...options, type: AlertType.Error, message })); } info(message: string, options?: Partial) { this.alert(new Alert({ ...options, type: AlertType.Info, message })); } warn(message: string, options?: Partial) { this.alert(new Alert({ ...options, type: AlertType.Warning, message })); } // main alert method alert(alert: Alert) { alert.id = alert.id || this.defaultId; this.subject.next(alert); } // clear alerts clear(id = this.defaultId) { this.subject.next(new Alert({ id })); } }