@hyahfoufi/ng-snotify
Version:
Angular 2+ alternative notifications center
131 lines • 15.8 kB
JavaScript
import { Component, ViewEncapsulation } from '@angular/core';
import { SnotifyPosition } from '../../enums/snotify-position.enum';
import * as i0 from "@angular/core";
import * as i1 from "../../services/snotify.service";
import * as i2 from "@angular/common";
import * as i3 from "../toast/toast.component";
import * as i4 from "../../pipes/keys.pipe";
export class SnotifyComponent {
service;
/**
* Toasts array
*/
notifications;
/**
* Toasts emitter
*/
emitter;
/**
* Helper for slice pipe (maxOnScreen)
*/
dockSizeA;
/**
* Helper for slice pipe (maxOnScreen)
*/
dockSizeB;
/**
* Helper for slice pipe (maxAtPosition)
*/
blockSizeA;
/**
* Helper for slice pipe (maxAtPosition)
*/
blockSizeB;
/**
* Backdrop Opacity
*/
backdrop = -1;
/**
* How many toasts with backdrop in current queue
*/
withBackdrop;
constructor(service) {
this.service = service;
}
/**
* Init base options. Subscribe to options, lifecycle change
*/
ngOnInit() {
this.emitter = this.service.emitter.subscribe((toasts) => {
if (this.service.config.global.newOnTop) {
this.dockSizeA = -this.service.config.global.maxOnScreen;
this.dockSizeB = undefined;
this.blockSizeA = -this.service.config.global.maxAtPosition;
this.blockSizeB = undefined;
this.withBackdrop = toasts.filter(toast => toast.config.backdrop >= 0);
}
else {
this.dockSizeA = 0;
this.dockSizeB = this.service.config.global.maxOnScreen;
this.blockSizeA = 0;
this.blockSizeB = this.service.config.global.maxAtPosition;
this.withBackdrop = toasts.filter(toast => toast.config.backdrop >= 0).reverse();
}
this.notifications = this.splitToasts(toasts.slice(this.dockSizeA, this.dockSizeB));
this.stateChanged('mounted');
});
}
// TODO: fix backdrop if more than one toast called in a row
/**
* Changes the backdrop opacity
* @param event SnotifyEventType
*/
stateChanged(event) {
if (!this.withBackdrop.length) {
if (this.backdrop >= 0) {
this.backdrop = -1;
}
return;
}
switch (event) {
case 'mounted':
if (this.backdrop < 0) {
this.backdrop = 0;
}
break;
case 'beforeShow':
this.backdrop = this.withBackdrop[this.withBackdrop.length - 1].config.backdrop;
break;
case 'beforeHide':
if (this.withBackdrop.length === 1) {
this.backdrop = 0;
}
break;
case 'hidden':
if (this.withBackdrop.length === 1) {
this.backdrop = -1;
}
break;
}
}
/**
* Split toasts toasts into different objects
* @param toasts SnotifyToast[]
* @returns SnotifyNotifications
*/
splitToasts(toasts) {
const result = {};
for (const property in SnotifyPosition) {
if (SnotifyPosition.hasOwnProperty(property)) {
result[SnotifyPosition[property]] = [];
}
}
toasts.forEach((toast) => {
result[toast.config.position].push(toast);
});
return result;
}
/**
* Unsubscribe subscriptions
*/
ngOnDestroy() {
this.emitter.unsubscribe();
}
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: SnotifyComponent, deps: [{ token: i1.SnotifyService }], target: i0.ɵɵFactoryTarget.Component });
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: SnotifyComponent, selector: "ng-snotify", ngImport: i0, template: "<div class=\"snotify-backdrop\" *ngIf=\"backdrop >= 0\" [style.opacity]=\"backdrop\"></div>\n<div *ngFor=\"let position of notifications | keys\" class=\"snotify snotify-{{ position }}\">\n <ng-snotify-toast\n *ngFor=\"let notification of notifications[position] | slice: blockSizeA:blockSizeB\"\n [toast]=\"notification\"\n (stateChanged)=\"stateChanged($event)\"\n >\n </ng-snotify-toast>\n</div>\n", dependencies: [{ kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i3.ToastComponent, selector: "ng-snotify-toast", inputs: ["toast"], outputs: ["stateChanged"] }, { kind: "pipe", type: i2.SlicePipe, name: "slice" }, { kind: "pipe", type: i4.KeysPipe, name: "keys" }], encapsulation: i0.ViewEncapsulation.None });
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: SnotifyComponent, decorators: [{
type: Component,
args: [{ selector: 'ng-snotify', encapsulation: ViewEncapsulation.None, template: "<div class=\"snotify-backdrop\" *ngIf=\"backdrop >= 0\" [style.opacity]=\"backdrop\"></div>\n<div *ngFor=\"let position of notifications | keys\" class=\"snotify snotify-{{ position }}\">\n <ng-snotify-toast\n *ngFor=\"let notification of notifications[position] | slice: blockSizeA:blockSizeB\"\n [toast]=\"notification\"\n (stateChanged)=\"stateChanged($event)\"\n >\n </ng-snotify-toast>\n</div>\n" }]
}], ctorParameters: () => [{ type: i1.SnotifyService }] });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic25vdGlmeS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy1zbm90aWZ5L3NyYy9saWIvY29tcG9uZW50cy9zbm90aWZ5L3Nub3RpZnkuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctc25vdGlmeS9zcmMvbGliL2NvbXBvbmVudHMvc25vdGlmeS9zbm90aWZ5LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQXFCLGlCQUFpQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBS2hGLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQzs7Ozs7O0FBUXBFLE1BQU0sT0FBTyxnQkFBZ0I7SUFrQ1A7SUFqQ3BCOztPQUVHO0lBQ0gsYUFBYSxDQUF1QjtJQUNwQzs7T0FFRztJQUNILE9BQU8sQ0FBZTtJQUN0Qjs7T0FFRztJQUNILFNBQVMsQ0FBUztJQUNsQjs7T0FFRztJQUNILFNBQVMsQ0FBcUI7SUFDOUI7O09BRUc7SUFDSCxVQUFVLENBQVM7SUFDbkI7O09BRUc7SUFDSCxVQUFVLENBQXFCO0lBQy9COztPQUVHO0lBQ0gsUUFBUSxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQ2Q7O09BRUc7SUFDSCxZQUFZLENBQWlCO0lBRTdCLFlBQW9CLE9BQXVCO1FBQXZCLFlBQU8sR0FBUCxPQUFPLENBQWdCO0lBQUcsQ0FBQztJQUUvQzs7T0FFRztJQUNILFFBQVE7UUFDTixJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDLE1BQXNCLEVBQUUsRUFBRTtZQUN2RSxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxRQUFRLEVBQUUsQ0FBQztnQkFDeEMsSUFBSSxDQUFDLFNBQVMsR0FBRyxDQUFDLElB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Q0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQztnQkFDN0MsTUFBTSxDQUFDLGVBQWUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztZQUN6QyxDQUFDO1FBQ0gsQ0FBQztRQUVELE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxLQUFtQixFQUFFLEVBQUU7WUFDckMsTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsUUFBa0IsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN0RCxDQUFDLENBQUMsQ0FBQztRQUVILE9BQU8sTUFBTSxDQUFDO0lBQ2hCLENBQUM7SUFFRDs7T0FFRztJQUNILFdBQVc7UUFDVCxJQUFJLENBQUMsT0FBTyxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBQzdCLENBQUM7d0dBdkhVLGdCQUFnQjs0RkFBaEIsZ0JBQWdCLGtEQ2I3Qiw4WkFTQTs7NEZESWEsZ0JBQWdCO2tCQUw1QixTQUFTOytCQUNFLFlBQVksaUJBRVAsaUJBQWlCLENBQUMsSUFBSSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgT25EZXN0cm95LCBPbkluaXQsIFZpZXdFbmNhcHN1bGF0aW9uIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBTbm90aWZ5U2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3Nub3RpZnkuc2VydmljZSc7XG5pbXBvcnQgeyBTbm90aWZ5VG9hc3QgfSBmcm9tICcuLi8uLi9tb2RlbHMvc25vdGlmeS10b2FzdC5tb2RlbCc7XG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IFNub3RpZnlOb3RpZmljYXRpb25zIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9zbm90aWZ5LW5vdGlmaWNhdGlvbnMuaW50ZXJmYWNlJztcbmltcG9ydCB7IFNub3RpZnlQb3NpdGlvbiB9IGZyb20gJy4uLy4uL2VudW1zL3Nub3RpZnktcG9zaXRpb24uZW51bSc7XG5pbXBvcnQgeyBTbm90aWZ5RXZlbnRUeXBlIH0gZnJvbSAnLi4vLi4vdHlwZXMvc25vdGlmeS1ldmVudC50eXBlJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnbmctc25vdGlmeScsXG4gIHRlbXBsYXRlVXJsOiAnLi9zbm90aWZ5LmNvbXBvbmVudC5odG1sJyxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZVxufSlcbmV4cG9ydCBjbGFzcyBTbm90aWZ5Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuICAvKipcbiAgICogVG9hc3RzIGFycmF5XG4gICAqL1xuICBub3RpZmljYXRpb25zOiBTbm90aWZ5Tm90aWZpY2F0aW9ucztcbiAgLyoqXG4gICAqIFRvYXN0cyBlbWl0dGVyXG4gICAqL1xuICBlbWl0dGVyOiBTdWJzY3JpcHRpb247XG4gIC8qKlxuICAgKiBIZWxwZXIgZm9yIHNsaWNlIHBpcGUgKG1heE9uU2NyZWVuKVxuICAgKi9cbiAgZG9ja1NpemVBOiBudW1iZXI7XG4gIC8qKlxuICAgKiBIZWxwZXIgZm9yIHNsaWNlIHBpcGUgKG1heE9uU2NyZWVuKVxuICAgKi9cbiAgZG9ja1NpemVCOiBudW1iZXIgfCB1bmRlZmluZWQ7XG4gIC8qKlxuICAgKiBIZWxwZXIgZm9yIHNsaWNlIHBpcGUgKG1heEF0UG9zaXRpb24pXG4gICAqL1xuICBibG9ja1NpemVBOiBudW1iZXI7XG4gIC8qKlxuICAgKiBIZWxwZXIgZm9yIHNsaWNlIHBpcGUgKG1heEF0UG9zaXRpb24pXG4gICAqL1xuICBibG9ja1NpemVCOiBudW1iZXIgfCB1bmRlZmluZWQ7XG4gIC8qKlxuICAgKiBCYWNrZHJvcCBPcGFjaXR5XG4gICAqL1xuICBiYWNrZHJvcCA9IC0xO1xuICAvKipcbiAgICogSG93IG1hbnkgdG9hc3RzIHdpdGggYmFja2Ryb3AgaW4gY3VycmVudCBxdWV1ZVxuICAgKi9cbiAgd2l0aEJhY2tkcm9wOiBTbm90aWZ5VG9hc3RbXTtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHNlcnZpY2U6IFNub3RpZnlTZXJ2aWNlKSB7fVxuXG4gIC8qKlxuICAgKiBJbml0IGJhc2Ugb3B0aW9ucy4gU3Vic2NyaWJlIHRvIG9wdGlvbnMsIGxpZmVjeWNsZSBjaGFuZ2VcbiAgICovXG4gIG5nT25Jbml0KCkge1xuICAgIHRoaXMuZW1pdHRlciA9IHRoaXMuc2VydmljZS5lbWl0dGVyLnN1YnNjcmliZSgodG9hc3RzOiBTbm90aWZ5VG9hc3RbXSkgPT4ge1xuICAgICAgaWYgKHRoaXMuc2VydmljZS5jb25maWcuZ2xvYmFsLm5ld09uVG9wKSB7XG4gICAgICAgIHRoaXMuZG9ja1NpemVBID0gLXRoaXMuc2VydmljZS5jb25maWcuZ2xvYmFsLm1heE9uU2NyZWVuO1xuICAgICAgICB0aGlzLmRvY2tTaXplQiA9IHVuZGVmaW5lZDtcbiAgICAgICAgdGhpcy5ibG9ja1NpemVBID0gLXRoaXMuc2VydmljZS5jb25maWcuZ2xvYmFsLm1heEF0UG9zaXRpb247XG4gICAgICAgIHRoaXMuYmxvY2tTaXplQiA9IHVuZGVmaW5lZDtcbiAgICAgICAgdGhpcy53aXRoQmFja2Ryb3AgPSB0b2FzdHMuZmlsdGVyKHRvYXN0ID0+IHRvYXN0LmNvbmZpZy5iYWNrZHJvcCA+PSAwKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuZG9ja1NpemVBID0gMDtcbiAgICAgICAgdGhpcy5kb2NrU2l6ZUIgPSB0aGlzLnNlcnZpY2UuY29uZmlnLmdsb2JhbC5tYXhPblNjcmVlbjtcbiAgICAgICAgdGhpcy5ibG9ja1NpemVBID0gMDtcbiAgICAgICAgdGhpcy5ibG9ja1NpemVCID0gdGhpcy5zZXJ2aWNlLmNvbmZpZy5nbG9iYWwubWF4QXRQb3NpdGlvbjtcbiAgICAgICAgdGhpcy53aXRoQmFja2Ryb3AgPSB0b2FzdHMuZmlsdGVyKHRvYXN0ID0+IHRvYXN0LmNvbmZpZy5iYWNrZHJvcCA+PSAwKS5yZXZlcnNlKCk7XG4gICAgICB9XG4gICAgICB0aGlzLm5vdGlmaWNhdGlvbnMgPSB0aGlzLnNwbGl0VG9hc3RzKHRvYXN0cy5zbGljZSh0aGlzLmRvY2tTaXplQSwgdGhpcy5kb2NrU2l6ZUIpKTtcbiAgICAgIHRoaXMuc3RhdGVDaGFuZ2VkKCdtb3VudGVkJyk7XG4gICAgfSk7XG4gIH1cblxuICAvLyBUT0RPOiBmaXggYmFja2Ryb3AgaWYgbW9yZSB0aGFuIG9uZSB0b2FzdCBjYWxsZWQgaW4gYSByb3dcbiAgLyoqXG4gICAqIENoYW5nZXMgdGhlIGJhY2tkcm9wIG9wYWNpdHlcbiAgICogQHBhcmFtIGV2ZW50IFNub3RpZnlFdmVudFR5cGVcbiAgICovXG4gIHN0YXRlQ2hhbmdlZChldmVudDogU25vdGlmeUV2ZW50VHlwZSkge1xuICAgIGlmICghdGhpcy53aXRoQmFja2Ryb3AubGVuZ3RoKSB7XG4gICAgICBpZiAodGhpcy5iYWNrZHJvcCA+PSAwKSB7XG4gICAgICAgIHRoaXMuYmFja2Ryb3AgPSAtMTtcbiAgICAgIH1cbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgc3dpdGNoIChldmVudCkge1xuICAgICAgY2FzZSAnbW91bnRlZCc6XG4gICAgICAgIGlmICh0aGlzLmJhY2tkcm9wIDwgMCkge1xuICAgICAgICAgIHRoaXMuYmFja2Ryb3AgPSAwO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnYmVmb3JlU2hvdyc6XG4gICAgICAgIHRoaXMuYmFja2Ryb3AgPSB0aGlzLndpdGhCYWNrZHJvcFt0aGlzLndpdGhCYWNrZHJvcC5sZW5ndGggLSAxXS5jb25maWcuYmFja2Ryb3A7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnYmVmb3JlSGlkZSc6XG4gICAgICAgIGlmICh0aGlzLndpdGhCYWNrZHJvcC5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICB0aGlzLmJhY2tkcm9wID0gMDtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2hpZGRlbic6XG4gICAgICAgIGlmICh0aGlzLndpdGhCYWNrZHJvcC5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICB0aGlzLmJhY2tkcm9wID0gLTE7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFNwbGl0IHRvYXN0cyB0b2FzdHMgaW50byBkaWZmZXJlbnQgb2JqZWN0c1xuICAgKiBAcGFyYW0gdG9hc3RzIFNub3RpZnlUb2FzdFtdXG4gICAqIEByZXR1cm5zIFNub3RpZnlOb3RpZmljYXRpb25zXG4gICAqL1xuICBzcGxpdFRvYXN0cyh0b2FzdHM6IFNub3RpZnlUb2FzdFtdKTogU25vdGlmeU5vdGlmaWNhdGlvbnMge1xuICAgIGNvbnN0IHJlc3VsdDogU25vdGlmeU5vdGlmaWNhdGlvbnMgPSB7fTtcblxuICAgIGZvciAoY29uc3QgcHJvcGVydHkgaW4gU25vdGlmeVBvc2l0aW9uKSB7XG4gICAgICBpZiAoU25vdGlmeVBvc2l0aW9uLmhhc093blByb3BlcnR5KHByb3BlcnR5KSkge1xuICAgICAgICByZXN1bHRbU25vdGlmeVBvc2l0aW9uW3Byb3BlcnR5XV0gPSBbXTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0b2FzdHMuZm9yRWFjaCgodG9hc3Q6IFNub3RpZnlUb2FzdCkgPT4ge1xuICAgICAgcmVzdWx0W3RvYXN0LmNvbmZpZy5wb3NpdGlvbiBhcyBzdHJpbmddLnB1c2godG9hc3QpO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIC8qKlxuICAgKiBVbnN1YnNjcmliZSBzdWJzY3JpcHRpb25zXG4gICAqL1xuICBuZ09uRGVzdHJveSgpIHtcbiAgICB0aGlzLmVtaXR0ZXIudW5zdWJzY3JpYmUoKTtcbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cInNub3RpZnktYmFja2Ryb3BcIiAqbmdJZj1cImJhY2tkcm9wID49IDBcIiBbc3R5bGUub3BhY2l0eV09XCJiYWNrZHJvcFwiPjwvZGl2PlxuPGRpdiAqbmdGb3I9XCJsZXQgcG9zaXRpb24gb2Ygbm90aWZpY2F0aW9ucyB8IGtleXNcIiBjbGFzcz1cInNub3RpZnkgc25vdGlmeS17eyBwb3NpdGlvbiB9fVwiPlxuICA8bmctc25vdGlmeS10b2FzdFxuICAgICpuZ0Zvcj1cImxldCBub3RpZmljYXRpb24gb2Ygbm90aWZpY2F0aW9uc1twb3NpdGlvbl0gfCBzbGljZTogYmxvY2tTaXplQTpibG9ja1NpemVCXCJcbiAgICBbdG9hc3RdPVwibm90aWZpY2F0aW9uXCJcbiAgICAoc3RhdGVDaGFuZ2VkKT1cInN0YXRlQ2hhbmdlZCgkZXZlbnQpXCJcbiAgPlxuICA8L25nLXNub3RpZnktdG9hc3Q+XG48L2Rpdj5cbiJdfQ==