@addapptables/notifier
Version:
Material notifier library for angular
218 lines • 19 kB
JavaScript
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
import { Component, ChangeDetectionStrategy, EventEmitter, HostListener, Inject, ViewEncapsulation, TemplateRef, ComponentFactoryResolver, ViewChild } from '@angular/core';
import { notifierAnimation } from './animations/notifier.animation';
import { interval, Subject } from 'rxjs';
import { take, tap, takeUntil } from 'rxjs/operators';
import { ADDAPPTABLE_CONFIGURATION_NOTIFIER_DATA, ADDAPPTABLE_NOTIFIER_DATA } from './tokens';
import { NotifierConfiguration } from './models/notifier-configuration.model';
import { Notifier } from './models/notifier.model';
import { PortalInjector } from '@angular/cdk/portal';
import { DynamicDirective } from '@addapptables/core';
import { NotifierPositionType } from './models/notifier-position-enum.model';
var NotifierComponent = /** @class */ (function () {
function NotifierComponent(configuration, data, componentFactoryResolver) {
this.data = data;
this.componentFactoryResolver = componentFactoryResolver;
this._state = 'slideInUp';
this._close = new EventEmitter();
this._animationStateChanged = new EventEmitter();
this._style = {};
this.subject = new Subject();
this.seconds = interval(5000);
this.configuration = {
position: NotifierPositionType.bottomRight,
timeout: 5000,
classIcon: 'material-icons',
iconValue: 'notifications'
};
this.configuration = Object.assign({
position: NotifierPositionType.bottomRight,
timeout: 5000,
classIcon: 'material-icons',
iconValue: 'notifications'
}, configuration);
this.seconds = interval(this.configuration.timeout);
}
/**
* @return {?}
*/
NotifierComponent.prototype.ngOnInit = /**
* @return {?}
*/
function () {
if (this.data.templateOrComponent) {
this.resolveComponent(this.data.templateOrComponent, this.appDynamic.viewContainerRef);
}
};
/**
* @return {?}
*/
NotifierComponent.prototype.ngAfterViewInit = /**
* @return {?}
*/
function () {
this._timeOut();
};
/**
* @return {?}
*/
NotifierComponent.prototype.onMouseOver = /**
* @return {?}
*/
function () {
this.subject.next();
this.subject.complete();
};
/**
* @return {?}
*/
NotifierComponent.prototype.onMouseLeave = /**
* @return {?}
*/
function () {
this.subject = new Subject();
this._timeOut();
};
/**
* @private
* @return {?}
*/
NotifierComponent.prototype._timeOut = /**
* @private
* @return {?}
*/
function () {
var _this = this;
this.seconds.pipe(takeUntil(this.subject), take(1), tap((/**
* @return {?}
*/
function () { return _this.close(); }))).subscribe();
};
/**
* @return {?}
*/
NotifierComponent.prototype.close = /**
* @return {?}
*/
function () {
this._close.emit();
};
/**
* @return {?}
*/
NotifierComponent.prototype.startExitAnimation = /**
* @return {?}
*/
function () {
this._state = 'exit';
};
/**
* @private
* @param {?} component
* @param {?} viewContainerRef
* @return {?}
*/
NotifierComponent.prototype.resolveComponent = /**
* @private
* @param {?} component
* @param {?} viewContainerRef
* @return {?}
*/
function (component, viewContainerRef) {
if (!component) {
return;
}
viewContainerRef.clear();
if (component instanceof TemplateRef) {
viewContainerRef.createEmbeddedView(component, { $implicit: this.data });
}
else {
/** @type {?} */
var componentFactory = component && this.componentFactoryResolver.resolveComponentFactory(component);
/** @type {?} */
var injector = this.createInjector(viewContainerRef.injector);
viewContainerRef.createComponent(componentFactory, null, injector);
}
};
/**
* @private
* @param {?} injector
* @return {?}
*/
NotifierComponent.prototype.createInjector = /**
* @private
* @param {?} injector
* @return {?}
*/
function (injector) {
/** @type {?} */
var injectionTokens = new WeakMap([
[ADDAPPTABLE_NOTIFIER_DATA, this.data]
]);
return new PortalInjector(injector, injectionTokens);
};
/**
* @return {?}
*/
NotifierComponent.prototype.ngOnDestroy = /**
* @return {?}
*/
function () {
this.subject.next();
this.subject.complete();
};
NotifierComponent.decorators = [
{ type: Component, args: [{
selector: 'addapptable-notifier',
template: "<div [class]=\"'addapptable-notifier '+ data.type\" [@notifierAnimator]=\"_state\" (@notifierAnimator.start)=\"_animationStateChanged.emit($event)\"\n (@notifierAnimator.done)=\"_animationStateChanged.emit($event)\" [ngStyle]=\"_style\">\n <i *ngIf=\"configuration.classIcon\" [class]=\"configuration.classIcon\">{{configuration.iconValue}}</i>\n <button type=\"button\" (click)=\"close()\">x</button>\n <span class=\"message\">\n <ng-template addapptablesDynamic></ng-template>\n <span *ngIf=\"!data.templateOrComponent\">{{data.message}}</span>\n </span>\n</div>",
changeDetection: ChangeDetectionStrategy.Default,
animations: [notifierAnimation.notifierAnimator],
encapsulation: ViewEncapsulation.None,
styles: [".addapptable-notifier{margin:1em;display:inline-block;position:fixed;z-index:1031;border-radius:3px;transition:.19s ease-in-out}.addapptable-notifier-success{background-color:#5cb85c;color:#5cb85c}.addapptable-notifier-info{background-color:#20a9d2;color:#20a9d2}.addapptable-notifier-warning{background-color:#e09d3d;color:#e09d3d}.addapptable-notifier-danger{background-color:#d43934;color:#d43934}.addapptable-notifier>i{display:block;left:15px;position:absolute;margin-top:-26px;font-size:20px;background-color:#fff!important;padding:9px;border-radius:50%;max-width:38px;box-shadow:0 16px 38px -12px rgba(0,0,0,.56),0 4px 25px 0 rgba(0,0,0,.12),0 8px 10px -5px rgba(0,0,0,.2)}.addapptable-notifier>button{float:right;min-width:auto;color:#fff!important;text-shadow:none;opacity:.9;box-sizing:border-box;position:relative;cursor:pointer;outline:0;border:none;white-space:nowrap;text-decoration:none;vertical-align:baseline;text-align:center;margin:0;line-height:36px;padding:0 16px;border-radius:4px;overflow:visible;background-color:transparent}.addapptable-notifier .message{display:block;color:#fff;min-width:376px;max-width:500px;padding:1.5em;text-align:justify}"]
}] }
];
/** @nocollapse */
NotifierComponent.ctorParameters = function () { return [
{ type: NotifierConfiguration, decorators: [{ type: Inject, args: [ADDAPPTABLE_CONFIGURATION_NOTIFIER_DATA,] }] },
{ type: Notifier, decorators: [{ type: Inject, args: [ADDAPPTABLE_NOTIFIER_DATA,] }] },
{ type: ComponentFactoryResolver }
]; };
NotifierComponent.propDecorators = {
appDynamic: [{ type: ViewChild, args: [DynamicDirective, { static: true },] }],
onMouseOver: [{ type: HostListener, args: ['mouseover',] }],
onMouseLeave: [{ type: HostListener, args: ['mouseleave',] }]
};
return NotifierComponent;
}());
export { NotifierComponent };
if (false) {
/** @type {?} */
NotifierComponent.prototype._id;
/** @type {?} */
NotifierComponent.prototype._state;
/** @type {?} */
NotifierComponent.prototype._close;
/** @type {?} */
NotifierComponent.prototype._animationStateChanged;
/** @type {?} */
NotifierComponent.prototype._style;
/** @type {?} */
NotifierComponent.prototype.subject;
/** @type {?} */
NotifierComponent.prototype.seconds;
/** @type {?} */
NotifierComponent.prototype.configuration;
/** @type {?} */
NotifierComponent.prototype.appDynamic;
/** @type {?} */
NotifierComponent.prototype.data;
/**
* @type {?}
* @private
*/
NotifierComponent.prototype.componentFactoryResolver;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm90aWZpZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vQGFkZGFwcHRhYmxlcy9ub3RpZmllci8iLCJzb3VyY2VzIjpbImxpYi9ub3RpZmllci5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLE9BQU8sRUFDTCxTQUFTLEVBQ1QsdUJBQXVCLEVBQ3ZCLFlBQVksRUFFWixZQUFZLEVBRVosTUFBTSxFQUNOLGlCQUFpQixFQUVqQixXQUFXLEVBRVgsd0JBQXdCLEVBQ3hCLFNBQVMsRUFFVixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUVwRSxPQUFPLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUN6QyxPQUFPLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN0RCxPQUFPLEVBQUUsdUNBQXVDLEVBQUUseUJBQXlCLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFDOUYsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFDOUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ25ELE9BQU8sRUFBRSxjQUFjLEVBQWlCLE1BQU0scUJBQXFCLENBQUM7QUFDcEUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDdEQsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFFN0U7SUFrQ0UsMkJBQ21ELGFBQW9DLEVBQzNDLElBQWMsRUFDaEQsd0JBQWtEO1FBRGhCLFNBQUksR0FBSixJQUFJLENBQVU7UUFDaEQsNkJBQXdCLEdBQXhCLHdCQUF3QixDQUEwQjtRQXpCNUQsV0FBTSxHQUF5QyxXQUFXLENBQUM7UUFFM0QsV0FBTSxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7UUFFNUIsMkJB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XG4gIENvbXBvbmVudCxcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIEV2ZW50RW1pdHRlcixcbiAgQWZ0ZXJWaWV3SW5pdCxcbiAgSG9zdExpc3RlbmVyLFxuICBPbkRlc3Ryb3ksXG4gIEluamVjdCxcbiAgVmlld0VuY2Fwc3VsYXRpb24sXG4gIEluamVjdG9yLFxuICBUZW1wbGF0ZVJlZixcbiAgVmlld0NvbnRhaW5lclJlZixcbiAgQ29tcG9uZW50RmFjdG9yeVJlc29sdmVyLFxuICBWaWV3Q2hpbGQsXG4gIE9uSW5pdFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IG5vdGlmaWVyQW5pbWF0aW9uIH0gZnJvbSAnLi9hbmltYXRpb25zL25vdGlmaWVyLmFuaW1hdGlvbic7XG5pbXBvcnQgeyBBbmltYXRpb25FdmVudCB9IGZyb20gJ0Bhbmd1bGFyL2FuaW1hdGlvbnMnO1xuaW1wb3J0IHsgaW50ZXJ2YWwsIFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IHRha2UsIHRhcCwgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgQUREQVBQVEFCTEVfQ09ORklHVVJBVElPTl9OT1RJRklFUl9EQVRBLCBBRERBUFBUQUJMRV9OT1RJRklFUl9EQVRBIH0gZnJvbSAnLi90b2tlbnMnO1xuaW1wb3J0IHsgTm90aWZpZXJDb25maWd1cmF0aW9uIH0gZnJvbSAnLi9tb2RlbHMvbm90aWZpZXItY29uZmlndXJhdGlvbi5tb2RlbCc7XG5pbXBvcnQgeyBOb3RpZmllciB9IGZyb20gJy4vbW9kZWxzL25vdGlmaWVyLm1vZGVsJztcbmltcG9ydCB7IFBvcnRhbEluamVjdG9yLCBDb21wb25lbnRUeXBlIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL3BvcnRhbCc7XG5pbXBvcnQgeyBEeW5hbWljRGlyZWN0aXZlIH0gZnJvbSAnQGFkZGFwcHRhYmxlcy9jb3JlJztcbmltcG9ydCB7IE5vdGlmaWVyUG9zaXRpb25UeXBlIH0gZnJvbSAnLi9tb2RlbHMvbm90aWZpZXItcG9zaXRpb24tZW51bS5tb2RlbCc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2FkZGFwcHRhYmxlLW5vdGlmaWVyJyxcbiAgdGVtcGxhdGVVcmw6ICcuL25vdGlmaWVyLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vbm90aWZpZXIuY29tcG9uZW50LnNjc3MnXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5EZWZhdWx0LFxuICBhbmltYXRpb25zOiBbbm90aWZpZXJBbmltYXRpb24ubm90aWZpZXJBbmltYXRvcl0sXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmVcbn0pXG5leHBvcnQgY2xhc3MgTm90aWZpZXJDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveSB7XG5cbiAgX2lkOiBzdHJpbmc7XG5cbiAgX3N0YXRlOiAnc2xpZGVJblVwJyB8ICdleGl0JyB8ICdzbGlkZUluRG93bicgPSAnc2xpZGVJblVwJztcblxuICBfY2xvc2UgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgX2FuaW1hdGlvblN0YXRlQ2hhbmdlZCA9IG5ldyBFdmVudEVtaXR0ZXI8QW5pbWF0aW9uRXZlbnQ+KCk7XG5cbiAgX3N0eWxlID0ge307XG5cbiAgc3ViamVjdCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgc2Vjb25kcyA9IGludGVydmFsKDUwMDApO1xuXG4gIGNvbmZpZ3VyYXRpb246IE5vdGlmaWVyQ29uZmlndXJhdGlvbiA9IHtcbiAgICBwb3NpdGlvbjogTm90aWZpZXJQb3NpdGlvblR5cGUuYm90dG9tUmlnaHQsXG4gICAgdGltZW91dDogNTAwMCxcbiAgICBjbGFzc0ljb246ICdtYXRlcmlhbC1pY29ucycsXG4gICAgaWNvblZhbHVlOiAnbm90aWZpY2F0aW9ucydcbiAgfTtcblxuICBAVmlld0NoaWxkKER5bmFtaWNEaXJlY3RpdmUsIHsgc3RhdGljOiB0cnVlIH0pXG4gIGFwcER5bmFtaWM6IER5bmFtaWNEaXJlY3RpdmU7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgQEluamVjdChBRERBUFBUQUJMRV9DT05GSUdVUkFUSU9OX05PVElGSUVSX0RBVEEpIGNvbmZpZ3VyYXRpb246IE5vdGlmaWVyQ29uZmlndXJhdGlvbixcbiAgICBASW5qZWN0KEFEREFQUFRBQkxFX05PVElGSUVSX0RBVEEpIHB1YmxpYyBkYXRhOiBOb3RpZmllcixcbiAgICBwcml2YXRlIGNvbXBvbmVudEZhY3RvcnlSZXNvbHZlcjogQ29tcG9uZW50RmFjdG9yeVJlc29sdmVyXG4gICkge1xuICAgIHRoaXMuY29uZmlndXJhdGlvbiA9IE9iamVjdC5hc3NpZ24oe1xuICAgICAgcG9zaXRpb246IE5vdGlmaWVyUG9zaXRpb25UeXBlLmJvdHRvbVJpZ2h0LFxuICAgICAgdGltZW91dDogNTAwMCxcbiAgICAgIGNsYXNzSWNvbjogJ21hdGVyaWFsLWljb25zJyxcbiAgICAgIGljb25WYWx1ZTogJ25vdGlmaWNhdGlvbnMnXG4gICAgfSwgY29uZmlndXJhdGlvbik7XG4gICAgdGhpcy5zZWNvbmRzID0gaW50ZXJ2YWwodGhpcy5jb25maWd1cmF0aW9uLnRpbWVvdXQpO1xuICB9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuZGF0YS50ZW1wbGF0ZU9yQ29tcG9uZW50KSB7XG4gICAgICB0aGlzLnJlc29sdmVDb21wb25lbnQodGhpcy5kYXRhLnRlbXBsYXRlT3JDb21wb25lbnQsIHRoaXMuYXBwRHluYW1pYy52aWV3Q29udGFpbmVyUmVmKTtcbiAgICB9XG4gIH1cblxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgdGhpcy5fdGltZU91dCgpO1xuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcignbW91c2VvdmVyJykgb25Nb3VzZU92ZXIoKSB7XG4gICAgdGhpcy5zdWJqZWN0Lm5leHQoKTtcbiAgICB0aGlzLnN1YmplY3QuY29tcGxldGUoKTtcbiAgfVxuXG5cbiAgQEhvc3RMaXN0ZW5lcignbW91c2VsZWF2ZScpIG9uTW91c2VMZWF2ZSgpIHtcbiAgICB0aGlzLnN1YmplY3QgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuICAgIHRoaXMuX3RpbWVPdXQoKTtcbiAgfVxuXG4gIHByaXZhdGUgX3RpbWVPdXQoKSB7XG4gICAgdGhpcy5zZWNvbmRzLnBpcGUoXG4gICAgICB0YWtlVW50aWwodGhpcy5zdWJqZWN0KSxcbiAgICAgIHRha2UoMSksXG4gICAgICB0YXAoKCkgPT4gdGhpcy5jbG9zZSgpKVxuICAgICkuc3Vic2NyaWJlKCk7XG4gIH1cblxuICBjbG9zZSgpIHtcbiAgICB0aGlzLl9jbG9zZS5lbWl0KCk7XG4gIH1cblxuICBzdGFydEV4aXRBbmltYXRpb24oKTogdm9pZCB7XG4gICAgdGhpcy5fc3RhdGUgPSAnZXhpdCc7XG4gIH1cblxuICBwcml2YXRlIHJlc29sdmVDb21wb25lbnQoY29tcG9uZW50OiBDb21wb25lbnRUeXBlPHt9PiB8IFRlbXBsYXRlUmVmPHt9Piwgdmlld0NvbnRhaW5lclJlZjogVmlld0NvbnRhaW5lclJlZikge1xuICAgIGlmICghY29tcG9uZW50KSB7IHJldHVybjsgfVxuICAgIHZpZXdDb250YWluZXJSZWYuY2xlYXIoKTtcbiAgICBpZiAoY29tcG9uZW50IGluc3RhbmNlb2YgVGVtcGxhdGVSZWYpIHtcbiAgICAgIHZpZXdDb250YWluZXJSZWYuY3JlYXRlRW1iZWRkZWRWaWV3KGNvbXBvbmVudCwgeyAkaW1wbGljaXQ6IHRoaXMuZGF0YSB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgY29tcG9uZW50RmFjdG9yeSA9IGNvbXBvbmVudCAmJiB0aGlzLmNvbXBvbmVudEZhY3RvcnlSZXNvbHZlci5yZXNvbHZlQ29tcG9uZW50RmFjdG9yeShjb21wb25lbnQpO1xuICAgICAgY29uc3QgaW5qZWN0b3IgPSB0aGlzLmNyZWF0ZUluamVjdG9yKHZpZXdDb250YWluZXJSZWYuaW5qZWN0b3IpO1xuICAgICAgdmlld0NvbnRhaW5lclJlZi5jcmVhdGVDb21wb25lbnQoY29tcG9uZW50RmFjdG9yeSwgbnVsbCwgaW5qZWN0b3IpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlSW5qZWN0b3IoaW5qZWN0b3I6IEluamVjdG9yKTogUG9ydGFsSW5qZWN0b3Ige1xuICAgIGNvbnN0IGluamVjdGlvblRva2VucyA9IG5ldyBXZWFrTWFwPGFueSwgYW55PihbXG4gICAgICBbQUREQVBQVEFCTEVfTk9USUZJRVJfREFUQSwgdGhpcy5kYXRhXVxuICAgIF0pO1xuICAgIHJldHVybiBuZXcgUG9ydGFsSW5qZWN0b3IoaW5qZWN0b3IsIGluamVjdGlvblRva2Vucyk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLnN1YmplY3QubmV4dCgpO1xuICAgIHRoaXMuc3ViamVjdC5jb21wbGV0ZSgpO1xuICB9XG59XG4iXX0=