UNPKG

@addapptables/notifier

Version:
184 lines 17.8 kB
/** * @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'; export class NotifierComponent { /** * @param {?} configuration * @param {?} data * @param {?} componentFactoryResolver */ constructor(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 {?} */ ngOnInit() { if (this.data.templateOrComponent) { this.resolveComponent(this.data.templateOrComponent, this.appDynamic.viewContainerRef); } } /** * @return {?} */ ngAfterViewInit() { this._timeOut(); } /** * @return {?} */ onMouseOver() { this.subject.next(); this.subject.complete(); } /** * @return {?} */ onMouseLeave() { this.subject = new Subject(); this._timeOut(); } /** * @private * @return {?} */ _timeOut() { this.seconds.pipe(takeUntil(this.subject), take(1), tap((/** * @return {?} */ () => this.close()))).subscribe(); } /** * @return {?} */ close() { this._close.emit(); } /** * @return {?} */ startExitAnimation() { this._state = 'exit'; } /** * @private * @param {?} component * @param {?} viewContainerRef * @return {?} */ resolveComponent(component, viewContainerRef) { if (!component) { return; } viewContainerRef.clear(); if (component instanceof TemplateRef) { viewContainerRef.createEmbeddedView(component, { $implicit: this.data }); } else { /** @type {?} */ const componentFactory = component && this.componentFactoryResolver.resolveComponentFactory(component); /** @type {?} */ const injector = this.createInjector(viewContainerRef.injector); viewContainerRef.createComponent(componentFactory, null, injector); } } /** * @private * @param {?} injector * @return {?} */ createInjector(injector) { /** @type {?} */ const injectionTokens = new WeakMap([ [ADDAPPTABLE_NOTIFIER_DATA, this.data] ]); return new PortalInjector(injector, injectionTokens); } /** * @return {?} */ ngOnDestroy() { 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 = () => [ { 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',] }] }; 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm90aWZpZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vQGFkZGFwcHRhYmxlcy9ub3RpZmllci8iLCJzb3VyY2VzIjpbImxpYi9ub3RpZmllci5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLE9BQU8sRUFDTCxTQUFTLEVBQ1QsdUJBQXVCLEVBQ3ZCLFlBQVksRUFFWixZQUFZLEVBRVosTUFBTSxFQUNOLGlCQUFpQixFQUVqQixXQUFXLEVBRVgsd0JBQXdCLEVBQ3hCLFNBQVMsRUFFVixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUVwRSxPQUFPLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUN6QyxPQUFPLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN0RCxPQUFPLEVBQUUsdUNBQXVDLEVBQUUseUJBQXlCLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFDOUYsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFDOUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ25ELE9BQU8sRUFBRSxjQUFjLEVBQWlCLE1BQU0scUJBQXFCLENBQUM7QUFDcEUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDdEQsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFVN0UsTUFBTSxPQUFPLGlCQUFpQjs7Ozs7O0lBMEI1QixZQUNtRCxhQUFvQyxFQUMzQyxJQUFjLEVBQ2hELHdCQUFrRDtRQURoQixTQUFJLEdBQUosSUFBSSxDQUFVO1FBQ2hELDZCQUF3QixHQUF4Qix3QkFBd0IsQ0FBMEI7UUF6QjVELFdBQU0sR0FBeUMsV0FBVyxDQUFDO1FBRTNELFdBQU0sR0FBRyxJQUFJLFlB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WUFDNUMsQ0FBQyx5QkFBeUIsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDO1NBQ3ZDLENBQUM7UUFDRixPQUFPLElBQUksY0FBYyxDQUFDLFFBQVEsRUFBRSxlQUFlLENBQUMsQ0FBQztJQUN2RCxDQUFDOzs7O0lBRUQsV0FBVztRQUNULElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDcEIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUMxQixDQUFDOzs7WUEzR0YsU0FBUyxTQUFDO2dCQUNULFFBQVEsRUFBRSxzQkFBc0I7Z0JBQ2hDLDJrQkFBd0M7Z0JBRXhDLGVBQWUsRUFBRSx1QkFBdUIsQ0FBQyxPQUFPO2dCQUNoRCxVQUFVLEVBQUUsQ0FBQyxpQkFBaUIsQ0FBQyxnQkFBZ0IsQ0FBQztnQkFDaEQsYUFBYSxFQUFFLGlCQUFpQixDQUFDLElBQUk7O2FBQ3RDOzs7O1lBYlEscUJBQXFCLHVCQXlDekIsTUFBTSxTQUFDLHVDQUF1QztZQXhDMUMsUUFBUSx1QkF5Q1osTUFBTSxTQUFDLHlCQUF5QjtZQW5EbkMsd0JBQXdCOzs7eUJBOEN2QixTQUFTLFNBQUMsZ0JBQWdCLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFOzBCQTJCNUMsWUFBWSxTQUFDLFdBQVc7MkJBTXhCLFlBQVksU0FBQyxZQUFZOzs7O0lBdEQxQixnQ0FBWTs7SUFFWixtQ0FBMkQ7O0lBRTNELG1DQUE0Qjs7SUFFNUIsbURBQTREOztJQUU1RCxtQ0FBWTs7SUFFWixvQ0FBOEI7O0lBRTlCLG9DQUF5Qjs7SUFFekIsMENBS0U7O0lBRUYsdUNBQzZCOztJQUkzQixpQ0FBd0Q7Ozs7O0lBQ3hELHFEQUEwRCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENvbXBvbmVudCxcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIEV2ZW50RW1pdHRlcixcbiAgQWZ0ZXJWaWV3SW5pdCxcbiAgSG9zdExpc3RlbmVyLFxuICBPbkRlc3Ryb3ksXG4gIEluamVjdCxcbiAgVmlld0VuY2Fwc3VsYXRpb24sXG4gIEluamVjdG9yLFxuICBUZW1wbGF0ZVJlZixcbiAgVmlld0NvbnRhaW5lclJlZixcbiAgQ29tcG9uZW50RmFjdG9yeVJlc29sdmVyLFxuICBWaWV3Q2hpbGQsXG4gIE9uSW5pdFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IG5vdGlmaWVyQW5pbWF0aW9uIH0gZnJvbSAnLi9hbmltYXRpb25zL25vdGlmaWVyLmFuaW1hdGlvbic7XG5pbXBvcnQgeyBBbmltYXRpb25FdmVudCB9IGZyb20gJ0Bhbmd1bGFyL2FuaW1hdGlvbnMnO1xuaW1wb3J0IHsgaW50ZXJ2YWwsIFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IHRha2UsIHRhcCwgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgQUREQVBQVEFCTEVfQ09ORklHVVJBVElPTl9OT1RJRklFUl9EQVRBLCBBRERBUFBUQUJMRV9OT1RJRklFUl9EQVRBIH0gZnJvbSAnLi90b2tlbnMnO1xuaW1wb3J0IHsgTm90aWZpZXJDb25maWd1cmF0aW9uIH0gZnJvbSAnLi9tb2RlbHMvbm90aWZpZXItY29uZmlndXJhdGlvbi5tb2RlbCc7XG5pbXBvcnQgeyBOb3RpZmllciB9IGZyb20gJy4vbW9kZWxzL25vdGlmaWVyLm1vZGVsJztcbmltcG9ydCB7IFBvcnRhbEluamVjdG9yLCBDb21wb25lbnRUeXBlIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL3BvcnRhbCc7XG5pbXBvcnQgeyBEeW5hbWljRGlyZWN0aXZlIH0gZnJvbSAnQGFkZGFwcHRhYmxlcy9jb3JlJztcbmltcG9ydCB7IE5vdGlmaWVyUG9zaXRpb25UeXBlIH0gZnJvbSAnLi9tb2RlbHMvbm90aWZpZXItcG9zaXRpb24tZW51bS5tb2RlbCc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2FkZGFwcHRhYmxlLW5vdGlmaWVyJyxcbiAgdGVtcGxhdGVVcmw6ICcuL25vdGlmaWVyLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vbm90aWZpZXIuY29tcG9uZW50LnNjc3MnXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5EZWZhdWx0LFxuICBhbmltYXRpb25zOiBbbm90aWZpZXJBbmltYXRpb24ubm90aWZpZXJBbmltYXRvcl0sXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmVcbn0pXG5leHBvcnQgY2xhc3MgTm90aWZpZXJDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveSB7XG5cbiAgX2lkOiBzdHJpbmc7XG5cbiAgX3N0YXRlOiAnc2xpZGVJblVwJyB8ICdleGl0JyB8ICdzbGlkZUluRG93bicgPSAnc2xpZGVJblVwJztcblxuICBfY2xvc2UgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgX2FuaW1hdGlvblN0YXRlQ2hhbmdlZCA9IG5ldyBFdmVudEVtaXR0ZXI8QW5pbWF0aW9uRXZlbnQ+KCk7XG5cbiAgX3N0eWxlID0ge307XG5cbiAgc3ViamVjdCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgc2Vjb25kcyA9IGludGVydmFsKDUwMDApO1xuXG4gIGNvbmZpZ3VyYXRpb246IE5vdGlmaWVyQ29uZmlndXJhdGlvbiA9IHtcbiAgICBwb3NpdGlvbjogTm90aWZpZXJQb3NpdGlvblR5cGUuYm90dG9tUmlnaHQsXG4gICAgdGltZW91dDogNTAwMCxcbiAgICBjbGFzc0ljb246ICdtYXRlcmlhbC1pY29ucycsXG4gICAgaWNvblZhbHVlOiAnbm90aWZpY2F0aW9ucydcbiAgfTtcblxuICBAVmlld0NoaWxkKER5bmFtaWNEaXJlY3RpdmUsIHsgc3RhdGljOiB0cnVlIH0pXG4gIGFwcER5bmFtaWM6IER5bmFtaWNEaXJlY3RpdmU7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgQEluamVjdChBRERBUFBUQUJMRV9DT05GSUdVUkFUSU9OX05PVElGSUVSX0RBVEEpIGNvbmZpZ3VyYXRpb246IE5vdGlmaWVyQ29uZmlndXJhdGlvbixcbiAgICBASW5qZWN0KEFEREFQUFRBQkxFX05PVElGSUVSX0RBVEEpIHB1YmxpYyBkYXRhOiBOb3RpZmllcixcbiAgICBwcml2YXRlIGNvbXBvbmVudEZhY3RvcnlSZXNvbHZlcjogQ29tcG9uZW50RmFjdG9yeVJlc29sdmVyXG4gICkge1xuICAgIHRoaXMuY29uZmlndXJhdGlvbiA9IE9iamVjdC5hc3NpZ24oe1xuICAgICAgcG9zaXRpb246IE5vdGlmaWVyUG9zaXRpb25UeXBlLmJvdHRvbVJpZ2h0LFxuICAgICAgdGltZW91dDogNTAwMCxcbiAgICAgIGNsYXNzSWNvbjogJ21hdGVyaWFsLWljb25zJyxcbiAgICAgIGljb25WYWx1ZTogJ25vdGlmaWNhdGlvbnMnXG4gICAgfSwgY29uZmlndXJhdGlvbik7XG4gICAgdGhpcy5zZWNvbmRzID0gaW50ZXJ2YWwodGhpcy5jb25maWd1cmF0aW9uLnRpbWVvdXQpO1xuICB9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuZGF0YS50ZW1wbGF0ZU9yQ29tcG9uZW50KSB7XG4gICAgICB0aGlzLnJlc29sdmVDb21wb25lbnQodGhpcy5kYXRhLnRlbXBsYXRlT3JDb21wb25lbnQsIHRoaXMuYXBwRHluYW1pYy52aWV3Q29udGFpbmVyUmVmKTtcbiAgICB9XG4gIH1cblxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgdGhpcy5fdGltZU91dCgpO1xuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcignbW91c2VvdmVyJykgb25Nb3VzZU92ZXIoKSB7XG4gICAgdGhpcy5zdWJqZWN0Lm5leHQoKTtcbiAgICB0aGlzLnN1YmplY3QuY29tcGxldGUoKTtcbiAgfVxuXG5cbiAgQEhvc3RMaXN0ZW5lcignbW91c2VsZWF2ZScpIG9uTW91c2VMZWF2ZSgpIHtcbiAgICB0aGlzLnN1YmplY3QgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuICAgIHRoaXMuX3RpbWVPdXQoKTtcbiAgfVxuXG4gIHByaXZhdGUgX3RpbWVPdXQoKSB7XG4gICAgdGhpcy5zZWNvbmRzLnBpcGUoXG4gICAgICB0YWtlVW50aWwodGhpcy5zdWJqZWN0KSxcbiAgICAgIHRha2UoMSksXG4gICAgICB0YXAoKCkgPT4gdGhpcy5jbG9zZSgpKVxuICAgICkuc3Vic2NyaWJlKCk7XG4gIH1cblxuICBjbG9zZSgpIHtcbiAgICB0aGlzLl9jbG9zZS5lbWl0KCk7XG4gIH1cblxuICBzdGFydEV4aXRBbmltYXRpb24oKTogdm9pZCB7XG4gICAgdGhpcy5fc3RhdGUgPSAnZXhpdCc7XG4gIH1cblxuICBwcml2YXRlIHJlc29sdmVDb21wb25lbnQoY29tcG9uZW50OiBDb21wb25lbnRUeXBlPHt9PiB8IFRlbXBsYXRlUmVmPHt9Piwgdmlld0NvbnRhaW5lclJlZjogVmlld0NvbnRhaW5lclJlZikge1xuICAgIGlmICghY29tcG9uZW50KSB7IHJldHVybjsgfVxuICAgIHZpZXdDb250YWluZXJSZWYuY2xlYXIoKTtcbiAgICBpZiAoY29tcG9uZW50IGluc3RhbmNlb2YgVGVtcGxhdGVSZWYpIHtcbiAgICAgIHZpZXdDb250YWluZXJSZWYuY3JlYXRlRW1iZWRkZWRWaWV3KGNvbXBvbmVudCwgeyAkaW1wbGljaXQ6IHRoaXMuZGF0YSB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgY29tcG9uZW50RmFjdG9yeSA9IGNvbXBvbmVudCAmJiB0aGlzLmNvbXBvbmVudEZhY3RvcnlSZXNvbHZlci5yZXNvbHZlQ29tcG9uZW50RmFjdG9yeShjb21wb25lbnQpO1xuICAgICAgY29uc3QgaW5qZWN0b3IgPSB0aGlzLmNyZWF0ZUluamVjdG9yKHZpZXdDb250YWluZXJSZWYuaW5qZWN0b3IpO1xuICAgICAgdmlld0NvbnRhaW5lclJlZi5jcmVhdGVDb21wb25lbnQoY29tcG9uZW50RmFjdG9yeSwgbnVsbCwgaW5qZWN0b3IpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlSW5qZWN0b3IoaW5qZWN0b3I6IEluamVjdG9yKTogUG9ydGFsSW5qZWN0b3Ige1xuICAgIGNvbnN0IGluamVjdGlvblRva2VucyA9IG5ldyBXZWFrTWFwPGFueSwgYW55PihbXG4gICAgICBbQUREQVBQVEFCTEVfTk9USUZJRVJfREFUQSwgdGhpcy5kYXRhXVxuICAgIF0pO1xuICAgIHJldHVybiBuZXcgUG9ydGFsSW5qZWN0b3IoaW5qZWN0b3IsIGluamVjdGlvblRva2Vucyk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLnN1YmplY3QubmV4dCgpO1xuICAgIHRoaXMuc3ViamVjdC5jb21wbGV0ZSgpO1xuICB9XG59XG4iXX0=