UNPKG

@addapptables/notifier

Version:
218 lines 19 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'; 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=