ng-toast-stack
Version:
Beautiful & easy to use toast stack messages, having auto close, pause, resume functionality and customization.
116 lines • 14.9 kB
JavaScript
import { Injectable } from '@angular/core';
import * as i0 from "@angular/core";
export class NgToastStackService {
constructor() {
this.id = 0;
this.toastsBag = [];
}
push(data) {
if (typeof data === 'string')
data = { msg: data };
data.id = ++this.id;
const toast = new NgToastStack(data);
this.toastsBag.push(toast);
if (toast.autoClose) {
toast.timerRef = new Timer(() => {
this.pop(toast.id);
}, toast.autoCloseTimer);
let index = this.toastsBag.findIndex((n) => n.id === toast.id);
this.toastsBag.splice(index, 1, toast);
}
}
pop(id) {
if (!id)
return;
let index = this.toastsBag.findIndex((n) => n.id == id);
this.toastsBag.splice(index, 1);
}
// Sugared methods
static(data) {
if (typeof data === 'string') {
data = { msg: data, autoClose: false };
this.push(data);
}
else {
this.push({ ...data, autoClose: false });
}
}
success(data) {
if (typeof data === 'string') {
data = { msg: data, type: 'success' };
this.push(data);
}
else {
this.push({ ...data, type: 'success' });
}
}
error(data) {
if (typeof data === 'string') {
data = { msg: data, type: 'error' };
this.push(data);
}
else {
this.push({ ...data, type: 'error' });
}
}
}
NgToastStackService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: NgToastStackService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
NgToastStackService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: NgToastStackService, providedIn: 'root' });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: NgToastStackService, decorators: [{
type: Injectable,
args: [{
providedIn: 'root'
}]
}], ctorParameters: function () { return []; } });
export class NgToastStack {
constructor(data) {
this.id = data.id || 5000;
this.type = data.type || 'success';
this.title = this.getTitle(data);
this.msg = data.msg;
this.autoClose = (data.hasOwnProperty('autoClose') && data.autoClose !== undefined) ? data.autoClose : true;
this.autoCloseTimer = data.autoCloseTimer || 5000;
this.icon = (data.hasOwnProperty('icon') && data.icon !== undefined) ? data.icon : true;
this.pauseOnHover = (data.hasOwnProperty('pauseOnHover') && data.pauseOnHover !== undefined) ? data.pauseOnHover : true;
}
getTitle(data) {
if (!data.title && data.type == 'error')
return 'Error';
if (!data.title && (!data.type || data.type == 'success'))
return 'Success';
return data.title || 'Message';
}
}
// Custom Timer with resume/pause
export class Timer {
constructor(callback, delay) {
this.delay = 0;
this.start = 0;
this.remaining = 0;
this.remainingPercentage = 100;
this.delay = delay;
this.remaining = delay;
this.callback = callback;
this.resume();
}
pause() {
window.clearTimeout(this.timeoutId);
this.timeoutId = undefined;
window.clearInterval(this.intervalId);
this.intervalId = undefined;
}
resume() {
if (this.timeoutId && this.intervalId) {
return;
}
this.start = Date.now();
this.timeoutId = window.setTimeout(this.callback, this.remaining);
this.intervalId = window.setInterval(() => {
if (this.remaining <= 0)
window.clearInterval(this.intervalId);
this.remaining -= 10;
this.remainingPercentage = (this.remaining * 100) / this.delay;
}, 10);
}
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmctdG9hc3Qtc3RhY2suc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL25nLXRvYXN0LXN0YWNrL3NyYy9saWIvbmctdG9hc3Qtc3RhY2suc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDOztBQUszQyxNQUFNLE9BQU8sbUJBQW1CO0lBSTlCO1FBSEEsT0FBRSxHQUFXLENBQUMsQ0FBQztRQUNmLGNBQVMsR0FBNEIsRUFBRSxDQUFBO0lBRXZCLENBQUM7SUFFakIsSUFBSSxDQUFDLElBQStCO1FBQ2xDLElBQUksT0FBTyxJQUFJLEtBQUssUUFBUTtZQUFFLElBQUksR0FBcUIsRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLENBQUE7UUFDcEUsSUFBSSxDQUFDLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUM7UUFDcEIsTUFBTSxLQUFLLEdBQUcsSUFBSSxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUE7UUFDcEMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFFM0IsSUFBSSxLQUFLLENBQUMsU0FBUyxFQUFFO1lBQ25CLEtBQUssQ0FBQyxRQUFRLEdBQUcsSUFBSSxLQUFLLENBQUMsR0FBRyxFQUFFO2dCQUM5QixJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUNyQixDQUFDLEVBQUUsS0FBSyxDQUFDLGNBQWMsQ0FBQyxDQUFDO1lBRXpCLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUMvRCxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FB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Q3JDLElBQUksQ0FBQyxVQUFVLEdBQUcsU0FBUyxDQUFBO0lBQzdCLENBQUM7SUFFRCxNQUFNO1FBQ0osSUFBSSxJQUFJLENBQUMsU0FBUyxJQUFJLElBQUksQ0FBQyxVQUFVLEVBQUU7WUFDckMsT0FBTztTQUNSO1FBRUQsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDeEIsSUFBSSxDQUFDLFNBQVMsR0FBRyxNQUFNLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ2xFLElBQUksQ0FBQyxVQUFVLEdBQUcsTUFBTSxDQUFDLFdBQVcsQ0FBQyxHQUFHLEVBQUU7WUFDeEMsSUFBSSxJQUFJLENBQUMsU0FBUyxJQUFJLENBQUM7Z0JBQUUsTUFBTSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUE7WUFDOUQsSUFBSSxDQUFDLFNBQVMsSUFBSSxFQUFFLENBQUM7WUFDckIsSUFBSSxDQUFDLG1CQUFtQixHQUFHLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFBO1FBQ2hFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQTtJQUNSLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5leHBvcnQgY2xhc3MgTmdUb2FzdFN0YWNrU2VydmljZSB7XG4gIGlkOiBudW1iZXIgPSAwO1xuICB0b2FzdHNCYWc6IEFycmF5PE5nVG9hc3RTdGFja1R5cGU+ID0gW11cblxuICBjb25zdHJ1Y3RvcigpIHsgfVxuXG4gIHB1c2goZGF0YTogTmdUb2FzdFN0YWNrVHlwZSB8IHN0cmluZykge1xuICAgIGlmICh0eXBlb2YgZGF0YSA9PT0gJ3N0cmluZycpIGRhdGEgPSA8TmdUb2FzdFN0YWNrVHlwZT57IG1zZzogZGF0YSB9XG4gICAgZGF0YS5pZCA9ICsrdGhpcy5pZDtcbiAgICBjb25zdCB0b2FzdCA9IG5ldyBOZ1RvYXN0U3RhY2soZGF0YSlcbiAgICB0aGlzLnRvYXN0c0JhZy5wdXNoKHRvYXN0KTtcblxuICAgIGlmICh0b2FzdC5hdXRvQ2xvc2UpIHtcbiAgICAgIHRvYXN0LnRpbWVyUmVmID0gbmV3IFRpbWVyKCgpID0+IHtcbiAgICAgICAgdGhpcy5wb3AodG9hc3QuaWQpO1xuICAgICAgfSwgdG9hc3QuYXV0b0Nsb3NlVGltZXIpO1xuXG4gICAgICBsZXQgaW5kZXggPSB0aGlzLnRvYXN0c0JhZy5maW5kSW5kZXgoKG4pID0+IG4uaWQgPT09IHRvYXN0LmlkKTtcbiAgICAgIHRoaXMudG9hc3RzQmFnLnNwbGljZShpbmRleCwgMSwgdG9hc3QpO1xuICAgIH1cbiAgfVxuXG4gIHBvcChpZD86IG51bWJlcikge1xuICAgIGlmICghaWQpIHJldHVybjtcbiAgICBsZXQgaW5kZXggPSB0aGlzLnRvYXN0c0JhZy5maW5kSW5kZXgoKG4pID0+IG4uaWQgPT0gaWQpO1xuICAgIHRoaXMudG9hc3RzQmFnLnNwbGljZShpbmRleCwgMSk7XG4gIH1cblxuICAvLyBTdWdhcmVkIG1ldGhvZHNcblxuICBzdGF0aWMoZGF0YTogTmdUb2FzdFN0YWNrVHlwZSB8IHN0cmluZykge1xuICAgIGlmICh0eXBlb2YgZGF0YSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGRhdGEgPSA8TmdUb2FzdFN0YWNrVHlwZT57IG1zZzogZGF0YSwgYXV0b0Nsb3NlOiBmYWxzZSB9XG4gICAgICB0aGlzLnB1c2goZGF0YSlcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5wdXNoKHsgLi4uZGF0YSwgYXV0b0Nsb3NlOiBmYWxzZSB9KVxuICAgIH1cbiAgfVxuXG4gIHN1Y2Nlc3MoZGF0YTogTmdUb2FzdFN0YWNrVHlwZSB8IHN0cmluZykge1xuICAgIGlmICh0eXBlb2YgZGF0YSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGRhdGEgPSA8TmdUb2FzdFN0YWNrVHlwZT57IG1zZzogZGF0YSwgdHlwZTogJ3N1Y2Nlc3MnIH1cbiAgICAgIHRoaXMucHVzaChkYXRhKVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnB1c2goeyAuLi5kYXRhLCB0eXBlOiAnc3VjY2VzcycgfSlcbiAgICB9XG4gIH1cblxuICBlcnJvcihkYXRhOiBOZ1RvYXN0U3RhY2tUeXBlIHwgc3RyaW5nKSB7XG4gICAgaWYgKHR5cGVvZiBkYXRhID09PSAnc3RyaW5nJykge1xuICAgICAgZGF0YSA9IDxOZ1RvYXN0U3RhY2tUeXBlPnsgbXNnOiBkYXRhLCB0eXBlOiAnZXJyb3InIH1cbiAgICAgIHRoaXMucHVzaChkYXRhKVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnB1c2goeyAuLi5kYXRhLCB0eXBlOiAnZXJyb3InIH0pXG4gICAgfVxuICB9XG5cbn1cblxuZXhwb3J0IGludGVyZmFjZSBOZ1RvYXN0U3RhY2tUeXBlIHtcbiAgaWQ/OiBudW1iZXI7XG4gIHR5cGU/OiBzdHJpbmc7XG4gIHRpdGxlPzogc3RyaW5nO1xuICBtc2c6IHN0cmluZztcbiAgYXV0b0Nsb3NlPzogYm9vbGVhbjtcbiAgYXV0b0Nsb3NlVGltZXI/OiBudW1iZXI7XG4gIHRpbWVyUmVmPzogYW55O1xuICB0aW1lcldpZHRoPzogYW55O1xuICBpY29uPzogc3RyaW5nIHwgYm9vbGVhbjtcbiAgcGF1c2VPbkhvdmVyPzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGNsYXNzIE5nVG9hc3RTdGFjayB7XG4gIGlkOiBudW1iZXJcbiAgdHlwZTogc3RyaW5nXG4gIHRpdGxlOiBzdHJpbmdcbiAgbXNnOiBzdHJpbmdcbiAgYXV0b0Nsb3NlOiBib29sZWFuXG4gIGF1dG9DbG9zZVRpbWVyOiBudW1iZXJcbiAgdGltZXJSZWY/OiBhbnlcbiAgaWNvbj86IHN0cmluZyB8IGJvb2xlYW5cbiAgcGF1c2VPbkhvdmVyPzogYm9vbGVhblxuXG4gIGNvbnN0cnVjdG9yKGRhdGE6IE5nVG9hc3RTdGFja1R5cGUpIHtcbiAgICB0aGlzLmlkID0gZGF0YS5pZCB8fCA1MDAwXG4gICAgdGhpcy50eXBlID0gZGF0YS50eXBlIHx8ICdzdWNjZXNzJ1xuICAgIHRoaXMudGl0bGUgPSB0aGlzLmdldFRpdGxlKGRhdGEpXG4gICAgdGhpcy5tc2cgPSBkYXRhLm1zZ1xuICAgIHRoaXMuYXV0b0Nsb3NlID0gKGRhdGEuaGFzT3duUHJvcGVydHkoJ2F1dG9DbG9zZScpICYmIGRhdGEuYXV0b0Nsb3NlICE9PSB1bmRlZmluZWQpID8gZGF0YS5hdXRvQ2xvc2UgOiB0cnVlXG4gICAgdGhpcy5hdXRvQ2xvc2VUaW1lciA9IGRhdGEuYXV0b0Nsb3NlVGltZXIgfHwgNTAwMFxuICAgIHRoaXMuaWNvbiA9IChkYXRhLmhhc093blByb3BlcnR5KCdpY29uJykgJiYgZGF0YS5pY29uICE9PSB1bmRlZmluZWQpID8gZGF0YS5pY29uIDogdHJ1ZVxuICAgIHRoaXMucGF1c2VPbkhvdmVyID0gKGRhdGEuaGFzT3duUHJvcGVydHkoJ3BhdXNlT25Ib3ZlcicpICYmIGRhdGEucGF1c2VPbkhvdmVyICE9PSB1bmRlZmluZWQpID8gZGF0YS5wYXVzZU9uSG92ZXIgOiB0cnVlXG4gIH1cblxuICBnZXRUaXRsZShkYXRhOiBOZ1RvYXN0U3RhY2tUeXBlKSB7XG4gICAgaWYgKCFkYXRhLnRpdGxlICYmIGRhdGEudHlwZSA9PSAnZXJyb3InKSByZXR1cm4gJ0Vycm9yJztcbiAgICBpZiAoIWRhdGEudGl0bGUgJiYgKCFkYXRhLnR5cGUgfHwgZGF0YS50eXBlID09ICdzdWNjZXNzJykpIHJldHVybiAnU3VjY2Vzcyc7XG4gICAgcmV0dXJuIGRhdGEudGl0bGUgfHwgJ01lc3NhZ2UnO1xuICB9XG59XG5cbi8vIEN1c3RvbSBUaW1lciB3aXRoIHJlc3VtZS9wYXVzZVxuZXhwb3J0IGNsYXNzIFRpbWVyIHtcbiAgdGltZW91dElkOiBudW1iZXIgfCB1bmRlZmluZWRcbiAgaW50ZXJ2YWxJZDogbnVtYmVyIHwgdW5kZWZpbmVkXG4gIGRlbGF5OiBudW1iZXIgPSAwXG4gIHN0YXJ0OiBudW1iZXIgPSAwXG4gIHJlbWFpbmluZzogbnVtYmVyID0gMFxuICByZW1haW5pbmdQZXJjZW50YWdlOiBudW1iZXIgPSAxMDBcbiAgY2FsbGJhY2s6IGFueVxuXG4gIGNvbnN0cnVjdG9yKGNhbGxiYWNrOiBhbnksIGRlbGF5OiBudW1iZXIpIHtcbiAgICB0aGlzLmRlbGF5ID0gZGVsYXlcbiAgICB0aGlzLnJlbWFpbmluZyA9IGRlbGF5XG4gICAgdGhpcy5jYWxsYmFjayA9IGNhbGxiYWNrXG4gICAgdGhpcy5yZXN1bWUoKVxuICB9XG5cbiAgcGF1c2UoKSB7XG4gICAgd2luZG93LmNsZWFyVGltZW91dCh0aGlzLnRpbWVvdXRJZClcbiAgICB0aGlzLnRpbWVvdXRJZCA9IHVuZGVmaW5lZFxuICAgIHdpbmRvdy5jbGVhckludGVydmFsKHRoaXMuaW50ZXJ2YWxJZClcbiAgICB0aGlzLmludGVydmFsSWQgPSB1bmRlZmluZWRcbiAgfVxuXG4gIHJlc3VtZSgpIHtcbiAgICBpZiAodGhpcy50aW1lb3V0SWQgJiYgdGhpcy5pbnRlcnZhbElkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5zdGFydCA9IERhdGUubm93KCk7XG4gICAgdGhpcy50aW1lb3V0SWQgPSB3aW5kb3cuc2V0VGltZW91dCh0aGlzLmNhbGxiYWNrLCB0aGlzLnJlbWFpbmluZyk7XG4gICAgdGhpcy5pbnRlcnZhbElkID0gd2luZG93LnNldEludGVydmFsKCgpID0+IHtcbiAgICAgIGlmICh0aGlzLnJlbWFpbmluZyA8PSAwKSB3aW5kb3cuY2xlYXJJbnRlcnZhbCh0aGlzLmludGVydmFsSWQpXG4gICAgICB0aGlzLnJlbWFpbmluZyAtPSAxMDtcbiAgICAgIHRoaXMucmVtYWluaW5nUGVyY2VudGFnZSA9ICh0aGlzLnJlbWFpbmluZyAqIDEwMCkgLyB0aGlzLmRlbGF5XG4gICAgfSwgMTApXG4gIH1cbn0iXX0=