notify-dash
Version:
A modern, beautiful toast notification library for Angular
67 lines • 9.61 kB
JavaScript
import { Injectable } from '@angular/core';
import { BehaviorSubject } from 'rxjs';
import * as i0 from "@angular/core";
export class ToastService {
constructor() {
this.toastsByPosition = {
'top-right': [],
'top-left': [],
'bottom-right': [],
'bottom-left': []
};
this.toastsSubject = new BehaviorSubject([]);
}
getToasts() {
return this.toastsSubject.asObservable();
}
show(config) {
const toast = {
id: Math.random().toString(36).substr(2, 9),
visible: true,
duration: config.duration || 3000,
position: config.position || 'top-right',
...config
};
const position = toast.position || 'top-right';
this.toastsByPosition[position] = [...this.toastsByPosition[position], toast];
this.toastsSubject.next(Object.values(this.toastsByPosition).flat());
setTimeout(() => {
this.hide(toast.id);
}, toast.duration);
}
success(message, duration, position) {
this.show({ message, type: 'success', duration, position });
}
error(message, duration, position) {
this.show({ message, type: 'error', duration, position });
}
warning(message, duration, position) {
this.show({ message, type: 'warning', duration, position });
}
info(message, duration, position) {
this.show({ message, type: 'info', duration, position });
}
hide(id) {
for (const position in this.toastsByPosition) {
const toast = this.toastsByPosition[position].find(t => t.id === id);
if (toast) {
toast.visible = false;
this.toastsSubject.next(Object.values(this.toastsByPosition).flat());
setTimeout(() => {
this.toastsByPosition[position] = this.toastsByPosition[position].filter(t => t.id !== id);
this.toastsSubject.next(Object.values(this.toastsByPosition).flat());
}, 300);
break;
}
}
}
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ToastService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ToastService, providedIn: 'root' }); }
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ToastService, decorators: [{
type: Injectable,
args: [{
providedIn: 'root'
}]
}], ctorParameters: function () { return []; } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9hc3Quc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL3RvYXN0L3NyYy9saWIvdG9hc3Quc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxlQUFlLEVBQWMsTUFBTSxNQUFNLENBQUM7O0FBa0JuRCxNQUFNLE9BQU8sWUFBWTtJQVN2QjtRQVJRLHFCQUFnQixHQUErQjtZQUNyRCxXQUFXLEVBQUUsRUFBRTtZQUNmLFVBQVUsRUFBRSxFQUFFO1lBQ2QsY0FBYyxFQUFFLEVBQUU7WUFDbEIsYUFBYSxFQUFFLEVBQUU7U0FDbEIsQ0FBQztRQUNNLGtCQUFhLEdBQUcsSUFBSSxlQUFlLENBQVUsRUFBRSxDQUFDLENBQUM7SUFFekMsQ0FBQztJQUVqQixTQUFTO1FBQ1AsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQzNDLENBQUM7SUFFRCxJQUFJLENBQUMsTUFBbUI7UUFDdEIsTUFBTSxLQUFLLEdBQVU7WUFDbkIsRUFBRSxFQUFFLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDM0MsT0FBTyxFQUFFLElBQUk7WUFDYixRQUFRLEVBQUUsTUFBTSxDQUFDLFFBQVEsSUFBSSxJQUFJO1lBQ2pDLFFBQVEsRUFBRSxNQUFNLENBQUMsUUFBUSxJQUFJLFdBQVc7WUFDeEMsR0FBRyxNQUFNO1NBQ1YsQ0FBQztRQUVGLE1BQU0sUUFBUSxHQUFHLEtBQUssQ0FBQyxRQUFRLElBQUksV0FBVyxDQUFDO1FBQy9DLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQzlFLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUVyRSxVQUFVLENBQUMsR0FBRyxFQUFFO1lBQ2QsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDdEIsQ0FBQyxFQUFFLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUNyQixDQUFDO0lBRUQsT0FBTyxDQUFDLE9BQWUsRUFBRSxRQUFpQixFQUFFLFFBQWtDO1FBQzVFLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLENBQUMsQ0FBQztJQUM5RCxDQUFDO0lBRUQsS0FBSyxDQUFDLE9BQWUsRUFBRSxRQUFpQixFQUFFLFFBQWtDO1FBQzFFLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLENBQUMsQ0FBQztJQUM1RCxDQUFDO0lBRUQsT0FBTyxDQUFDLE9BQWUsRUFBRSxRQUFpQixFQUFFLFFBQWtDO1FBQzVFLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLENBQUMsQ0FBQztJQUM5RCxDQUFDO0lBRUQsSUFBSSxDQUFDLE9BQWUsRUFBRSxRQUFpQixFQUFFLFFBQWtDO1FBQ3pFLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLENBQUMsQ0FBQztJQUMzRCxDQUFDO0lBRUQsSUFBSSxDQUFDLEVBQVU7UUFDYixLQUFLLE1BQU0sUUFBUSxJQUFJLElBQUksQ0FBQyxnQkFBZ0IsRUFBRTtZQUM1QyxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztZQUNyRSxJQUFJLEtBQUssRUFBRTtnQkFDVCxLQUFLLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQztnQkFDdEIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO2dCQUNyRSxVQUFVLENBQUMsR0FBRyxFQUFFO29CQUNkLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztvQkFDM0YsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO2dCQUN2RSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7Z0JBQ1IsTUFBTTthQUNQO1NBQ0Y7SUFDSCxDQUFDOytHQTlEVSxZQUFZO21IQUFaLFlBQVksY0FGWCxNQUFNOzs0RkFFUCxZQUFZO2tCQUh4QixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xuXG5leHBvcnQgaW50ZXJmYWNlIFRvYXN0Q29uZmlnIHtcbiAgbWVzc2FnZTogc3RyaW5nO1xuICB0eXBlOiAnc3VjY2VzcycgfCAnZXJyb3InIHwgJ3dhcm5pbmcnIHwgJ2luZm8nO1xuICBkdXJhdGlvbj86IG51bWJlcjtcbiAgcG9zaXRpb24/OiAndG9wLXJpZ2h0JyB8ICd0b3AtbGVmdCcgfCAnYm90dG9tLXJpZ2h0JyB8ICdib3R0b20tbGVmdCc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVG9hc3QgZXh0ZW5kcyBUb2FzdENvbmZpZyB7XG4gIGlkOiBzdHJpbmc7XG4gIHZpc2libGU6IGJvb2xlYW47XG4gIHRpbWVvdXRJZD86IG51bWJlcjtcbn1cblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5leHBvcnQgY2xhc3MgVG9hc3RTZXJ2aWNlIHtcbiAgcHJpdmF0ZSB0b2FzdHNCeVBvc2l0aW9uOiB7IFtrZXk6IHN0cmluZ106IFRvYXN0W10gfSA9IHtcbiAgICAndG9wLXJpZ2h0JzogW10sXG4gICAgJ3RvcC1sZWZ0JzogW10sXG4gICAgJ2JvdHRvbS1yaWdodCc6IFtdLFxuICAgICdib3R0b20tbGVmdCc6IFtdXG4gIH07XG4gIHByaXZhdGUgdG9hc3RzU3ViamVjdCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8VG9hc3RbXT4oW10pO1xuXG4gIGNvbnN0cnVjdG9yKCkgeyB9XG5cbiAgZ2V0VG9hc3RzKCk6IE9ic2VydmFibGU8VG9hc3RbXT4ge1xuICAgIHJldHVybiB0aGlzLnRvYXN0c1N1YmplY3QuYXNPYnNlcnZhYmxlKCk7XG4gIH1cblxuICBzaG93KGNvbmZpZzogVG9hc3RDb25maWcpOiB2b2lkIHtcbiAgICBjb25zdCB0b2FzdDogVG9hc3QgPSB7XG4gICAgICBpZDogTWF0aC5yYW5kb20oKS50b1N0cmluZygzNikuc3Vic3RyKDIsIDkpLFxuICAgICAgdmlzaWJsZTogdHJ1ZSxcbiAgICAgIGR1cmF0aW9uOiBjb25maWcuZHVyYXRpb24gfHwgMzAwMCxcbiAgICAgIHBvc2l0aW9uOiBjb25maWcucG9zaXRpb24gfHwgJ3RvcC1yaWdodCcsXG4gICAgICAuLi5jb25maWdcbiAgICB9O1xuXG4gICAgY29uc3QgcG9zaXRpb24gPSB0b2FzdC5wb3NpdGlvbiB8fCAndG9wLXJpZ2h0JztcbiAgICB0aGlzLnRvYXN0c0J5UG9zaXRpb25bcG9zaXRpb25dID0gWy4uLnRoaXMudG9hc3RzQnlQb3NpdGlvbltwb3NpdGlvbl0sIHRvYXN0XTtcbiAgICB0aGlzLnRvYXN0c1N1YmplY3QubmV4dChPYmplY3QudmFsdWVzKHRoaXMudG9hc3RzQnlQb3NpdGlvbikuZmxhdCgpKTtcblxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5oaWRlKHRvYXN0LmlkKTtcbiAgICB9LCB0b2FzdC5kdXJhdGlvbik7XG4gIH1cblxuICBzdWNjZXNzKG1lc3NhZ2U6IHN0cmluZywgZHVyYXRpb24/OiBudW1iZXIsIHBvc2l0aW9uPzogVG9hc3RDb25maWdbJ3Bvc2l0aW9uJ10pOiB2b2lkIHtcbiAgICB0aGlzLnNob3coeyBtZXNzYWdlLCB0eXBlOiAnc3VjY2VzcycsIGR1cmF0aW9uLCBwb3NpdGlvbiB9KTtcbiAgfVxuXG4gIGVycm9yKG1lc3NhZ2U6IHN0cmluZywgZHVyYXRpb24/OiBudW1iZXIsIHBvc2l0aW9uPzogVG9hc3RDb25maWdbJ3Bvc2l0aW9uJ10pOiB2b2lkIHtcbiAgICB0aGlzLnNob3coeyBtZXNzYWdlLCB0eXBlOiAnZXJyb3InLCBkdXJhdGlvbiwgcG9zaXRpb24gfSk7XG4gIH1cblxuICB3YXJuaW5nKG1lc3NhZ2U6IHN0cmluZywgZHVyYXRpb24/OiBudW1iZXIsIHBvc2l0aW9uPzogVG9hc3RDb25maWdbJ3Bvc2l0aW9uJ10pOiB2b2lkIHtcbiAgICB0aGlzLnNob3coeyBtZXNzYWdlLCB0eXBlOiAnd2FybmluZycsIGR1cmF0aW9uLCBwb3NpdGlvbiB9KTtcbiAgfVxuXG4gIGluZm8obWVzc2FnZTogc3RyaW5nLCBkdXJhdGlvbj86IG51bWJlciwgcG9zaXRpb24/OiBUb2FzdENvbmZpZ1sncG9zaXRpb24nXSk6IHZvaWQge1xuICAgIHRoaXMuc2hvdyh7IG1lc3NhZ2UsIHR5cGU6ICdpbmZvJywgZHVyYXRpb24sIHBvc2l0aW9uIH0pO1xuICB9XG5cbiAgaGlkZShpZDogc3RyaW5nKTogdm9pZCB7XG4gICAgZm9yIChjb25zdCBwb3NpdGlvbiBpbiB0aGlzLnRvYXN0c0J5UG9zaXRpb24pIHtcbiAgICAgIGNvbnN0IHRvYXN0ID0gdGhpcy50b2FzdHNCeVBvc2l0aW9uW3Bvc2l0aW9uXS5maW5kKHQgPT4gdC5pZCA9PT0gaWQpO1xuICAgICAgaWYgKHRvYXN0KSB7XG4gICAgICAgIHRvYXN0LnZpc2libGUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy50b2FzdHNTdWJqZWN0Lm5leHQoT2JqZWN0LnZhbHVlcyh0aGlzLnRvYXN0c0J5UG9zaXRpb24pLmZsYXQoKSk7XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgIHRoaXMudG9hc3RzQnlQb3NpdGlvbltwb3NpdGlvbl0gPSB0aGlzLnRvYXN0c0J5UG9zaXRpb25bcG9zaXRpb25dLmZpbHRlcih0ID0+IHQuaWQgIT09IGlkKTtcbiAgICAgICAgICB0aGlzLnRvYXN0c1N1YmplY3QubmV4dChPYmplY3QudmFsdWVzKHRoaXMudG9hc3RzQnlQb3NpdGlvbikuZmxhdCgpKTtcbiAgICAgICAgfSwgMzAwKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG4iXX0=