31 lines
888 B
TypeScript
31 lines
888 B
TypeScript
import { Injectable } from '@angular/core';
|
|
import { BehaviorSubject, Observable } from 'rxjs';
|
|
|
|
export interface Message {
|
|
severity: 'success' | 'danger' | 'warning';
|
|
text: string;
|
|
duration: number;
|
|
}
|
|
|
|
@Injectable({
|
|
providedIn: 'root',
|
|
})
|
|
export class MessageService {
|
|
private messagesSubject = new BehaviorSubject<Message[]>([]);
|
|
messages$: Observable<Message[]> = this.messagesSubject.asObservable();
|
|
|
|
addMessage(message: Message): void {
|
|
const currentMessages = this.messagesSubject.value;
|
|
this.messagesSubject.next([...currentMessages, message]);
|
|
|
|
if (message.duration > 0) {
|
|
setTimeout(() => this.removeMessage(message), message.duration);
|
|
}
|
|
}
|
|
|
|
removeMessage(messageToRemove: Message): void {
|
|
const currentMessages = this.messagesSubject.value;
|
|
this.messagesSubject.next(currentMessages.filter(msg => msg !== messageToRemove));
|
|
}
|
|
}
|