fundamental-ngx
Version:
SAP Fundamentals, implemented in Angular
183 lines • 16.8 kB
JavaScript
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
import { ComponentFactoryResolver, Injectable, ApplicationRef, Injector } from '@angular/core';
import { AlertComponent } from '../alert.component';
import { AlertContainerComponent } from '../alert-utils/alert-container.component';
import { AlertConfig } from '../alert-utils/alert-config';
import { AlertInjector } from '../alert-utils/alert-injector';
import { AlertRef } from '../alert-utils/alert-ref';
/**
* Service used to dynamically generate an alert as an overlay.
*/
export class AlertService {
/**
* @hidden
* @param {?} componentFactoryResolver
* @param {?} appRef
* @param {?} injector
*/
constructor(componentFactoryResolver, appRef, injector) {
this.componentFactoryResolver = componentFactoryResolver;
this.appRef = appRef;
this.injector = injector;
this.alerts = [];
}
/**
* Returns true if there are some alerts currently open. False otherwise.
* @return {?}
*/
hasOpenAlerts() {
return this.alerts && this.alerts.length > 0;
}
/**
* Opens an alert component with a content of type TemplateRef, Component Type or String.
* @param {?} content Content of the alert component.
* @param {?=} alertConfig Configuration of the alert component.
* @return {?}
*/
open(content, alertConfig = new AlertConfig()) {
// If empty or undefined alert array, create container
if (!this.alerts || this.alerts.length === 0) {
this.openAlertContainer();
}
// Get default values from alert model
alertConfig = Object.assign(new AlertConfig(), alertConfig);
// Config setup
/** @type {?} */
const configMap = new WeakMap();
/** @type {?} */
const alertRef = new AlertRef();
alertRef.data = (alertConfig ? alertConfig.data : undefined);
configMap.set(AlertRef, alertRef);
// Prepare new component
/** @type {?} */
const componentFactory = this.componentFactoryResolver.resolveComponentFactory(AlertComponent);
/** @type {?} */
const componentRef = componentFactory.create(new AlertInjector(this.injector, configMap));
componentRef.location.nativeElement.style.marginTop = '10px';
this.appRef.attachView(componentRef.hostView);
// Subscription to close alert from ref
/** @type {?} */
const refSub = alertRef.afterDismissed.subscribe((/**
* @return {?}
*/
() => {
this.destroyAlertComponent(componentRef);
refSub.unsubscribe();
}));
// Prepare component data items
/** @type {?} */
const configObj = Object.assign({}, alertConfig);
Object.keys(configObj).forEach((/**
* @param {?} key
* @return {?}
*/
key => {
if (key !== 'data') {
componentRef.instance[key] = configObj[key];
}
}));
componentRef.instance.childComponentType = content;
// Render new component
/** @type {?} */
const domElem = (/** @type {?} */ (((/** @type {?} */ (componentRef.hostView))).rootNodes[0]));
this.alertContainerRef.location.nativeElement.appendChild(domElem);
// Log new component
this.alerts.push(componentRef);
return alertRef;
}
/**
* Dismisses all service-opened alerts.
* @return {?}
*/
dismissAll() {
this.alerts.forEach((/**
* @param {?} ref
* @return {?}
*/
ref => {
this.destroyAlertComponent(ref);
}));
}
/**
* @private
* @param {?} alert
* @return {?}
*/
destroyAlertComponent(alert) {
this.alerts[this.alerts.indexOf(alert)] = null;
this.alerts = this.alerts.filter((/**
* @param {?} item
* @return {?}
*/
item => item !== null && item !== undefined));
this.appRef.detachView(alert.hostView);
alert.destroy();
if (this.alertContainerRef && (!this.alerts || this.alerts.length === 0)) {
this.destroyAlertContainer();
}
}
/**
* @private
* @return {?}
*/
openAlertContainer() {
/** @type {?} */
const factory = this.componentFactoryResolver.resolveComponentFactory(AlertContainerComponent);
/** @type {?} */
const componentRef = factory.create(this.injector);
this.appRef.attachView(componentRef.hostView);
/** @type {?} */
const domElement = (/** @type {?} */ (((/** @type {?} */ (componentRef.hostView))).rootNodes[0]));
document.body.appendChild(domElement);
this.alertContainerRef = componentRef;
}
/**
* @private
* @return {?}
*/
destroyAlertContainer() {
this.appRef.detachView(this.alertContainerRef.hostView);
this.alertContainerRef.destroy();
this.alertContainerRef = undefined;
}
}
AlertService.decorators = [
{ type: Injectable }
];
/** @nocollapse */
AlertService.ctorParameters = () => [
{ type: ComponentFactoryResolver },
{ type: ApplicationRef },
{ type: Injector }
];
if (false) {
/**
* @type {?}
* @private
*/
AlertService.prototype.alerts;
/**
* @type {?}
* @private
*/
AlertService.prototype.alertContainerRef;
/**
* @type {?}
* @private
*/
AlertService.prototype.componentFactoryResolver;
/**
* @type {?}
* @private
*/
AlertService.prototype.appRef;
/**
* @type {?}
* @private
*/
AlertService.prototype.injector;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWxlcnQuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL2Z1bmRhbWVudGFsLW5neC8iLCJzb3VyY2VzIjpbImxpYi9hbGVydC9hbGVydC1zZXJ2aWNlL2FsZXJ0LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLE9BQU8sRUFDSCx3QkFBd0IsRUFDeEIsVUFBVSxFQUNWLGNBQWMsRUFDZCxRQUFRLEVBS1gsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ3BELE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLDBDQUEwQyxDQUFDO0FBQ25GLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUMxRCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDOUQsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLDBCQUEwQixDQUFDOzs7O0FBTXBELE1BQU0sT0FBTyxZQUFZOzs7Ozs7O0lBS3JCLFlBQW9CLHdCQUFrRCxFQUNsRCxNQUFzQixFQUN0QixRQUFrQjtRQUZsQiw2QkFBd0IsR0FBeEIsd0JBQXdCLENBQTBCO1FBQ2xELFdBQU0sR0FBTixNQUFNLENBQWdCO1FBQ3RCLGFBQVEsR0FBUixRQUFRLENBQVU7UUFOOUIsV0FBTSxHQUFtQyxFQUFFLENBQUM7SUFNWCxDQUFDOzs7OztJQUtuQyxhQUFhO1FBQ2hCLE9BQU8sSUFBSSxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7SUFDakQsQ0FBQzs7Ozs7OztJQU9NLElBQUksQ0FBQyxPQUE4QyxFQUFFLGNBQTJCLElBQUksV0FBVyxFQUFFO1FBRXBHLHNEQUFzRDtRQUN0RCxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7WUFDMUMsSUFBSSxDQUFDLGtC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IEluamVjdGFibGUsXG4gICAgQXBwbGljYXRpb25SZWYsXG4gICAgSW5qZWN0b3IsXG4gICAgQ29tcG9uZW50UmVmLFxuICAgIEVtYmVkZGVkVmlld1JlZixcbiAgICBUZW1wbGF0ZVJlZixcbiAgICBUeXBlXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQWxlcnRDb21wb25lbnQgfSBmcm9tICcuLi9hbGVydC5jb21wb25lbnQnO1xuaW1wb3J0IHsgQWxlcnRDb250YWluZXJDb21wb25lbnQgfSBmcm9tICcuLi9hbGVydC11dGlscy9hbGVydC1jb250YWluZXIuY29tcG9uZW50JztcbmltcG9ydCB7IEFsZXJ0Q29uZmlnIH0gZnJvbSAnLi4vYWxlcnQtdXRpbHMvYWxlcnQtY29uZmlnJztcbmltcG9ydCB7IEFsZXJ0SW5qZWN0b3IgfSBmcm9tICcuLi9hbGVydC11dGlscy9hbGVydC1pbmplY3Rvcic7XG5pbXBvcnQgeyBBbGVydFJlZiB9IGZyb20gJy4uL2FsZXJ0LXV0aWxzL2FsZXJ0LXJlZic7XG5cbi8qKlxuICogU2VydmljZSB1c2VkIHRvIGR5bmFtaWNhbGx5IGdlbmVyYXRlIGFuIGFsZXJ0IGFzIGFuIG92ZXJsYXkuXG4gKi9cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBBbGVydFNlcnZpY2Uge1xuICAgIHByaXZhdGUgYWxlcnRzOiBDb21wb25lbnRSZWY8QWxlcnRDb21wb25lbnQ+W10gPSBbXTtcbiAgICBwcml2YXRlIGFsZXJ0Q29udGFpbmVyUmVmOiBDb21wb25lbnRSZWY8QWxlcnRDb250YWluZXJDb21wb25lbnQ+O1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIGNvbXBvbmVudEZhY3RvcnlSZXNvbHZlcjogQ29tcG9uZW50RmFjdG9yeVJlc29sdmVyLFxuICAgICAgICAgICAgICAgIHByaXZhdGUgYXBwUmVmOiBBcHBsaWNhdGlvblJlZixcbiAgICAgICAgICAgICAgICBwcml2YXRlIGluamVjdG9yOiBJbmplY3Rvcikge31cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdHJ1ZSBpZiB0aGVyZSBhcmUgc29tZSBhbGVydHMgY3VycmVudGx5IG9wZW4uIEZhbHNlIG90aGVyd2lzZS5cbiAgICAgKi9cbiAgICBwdWJsaWMgaGFzT3BlbkFsZXJ0cygpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYWxlcnRzICYmIHRoaXMuYWxlcnRzLmxlbmd0aCA+IDA7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogT3BlbnMgYW4gYWxlcnQgY29tcG9uZW50IHdpdGggYSBjb250ZW50IG9mIHR5cGUgVGVtcGxhdGVSZWYsIENvbXBvbmVudCBUeXBlIG9yIFN0cmluZy5cbiAgICAgKiBAcGFyYW0gY29udGVudCBDb250ZW50IG9mIHRoZSBhbGVydCBjb21wb25lbnQuXG4gICAgICogQHBhcmFtIGFsZXJ0Q29uZmlnIENvbmZpZ3VyYXRpb24gb2YgdGhlIGFsZXJ0IGNvbXBvbmVudC5cbiAgICAgKi9cbiAgICBwdWJsaWMgb3Blbihjb250ZW50OiBUZW1wbGF0ZVJlZjxhbnk+IHwgVHlwZTxhbnk+IHwgc3RyaW5nLCBhbGVydENvbmZpZzogQWxlcnRDb25maWcgPSBuZXcgQWxlcnRDb25maWcoKSk6IEFsZXJ0UmVmIHtcblxuICAgICAgICAvLyBJZiBlbXB0eSBvciB1bmRlZmluZWQgYWxlcnQgYXJyYXksIGNyZWF0ZSBjb250YWluZXJcbiAgICAgICAgaWYgKCF0aGlzLmFsZXJ0cyB8fCB0aGlzLmFsZXJ0cy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHRoaXMub3BlbkFsZXJ0Q29udGFpbmVyKCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBHZXQgZGVmYXVsdCB2YWx1ZXMgZnJvbSBhbGVydCBtb2RlbFxuICAgICAgICBhbGVydENvbmZpZyA9IE9iamVjdC5hc3NpZ24obmV3IEFsZXJ0Q29uZmlnKCksIGFsZXJ0Q29uZmlnKTtcblxuICAgICAgICAvLyBDb25maWcgc2V0dXBcbiAgICAgICAgY29uc3QgY29uZmlnTWFwID0gbmV3IFdlYWtNYXAoKTtcbiAgICAgICAgY29uc3QgYWxlcnRSZWYgPSBuZXcgQWxlcnRSZWYoKTtcbiAgICAgICAgYWxlcnRSZWYuZGF0YSA9IChhbGVydENvbmZpZyA/IGFsZXJ0Q29uZmlnLmRhdGEgOiB1bmRlZmluZWQpO1xuICAgICAgICBjb25maWdNYXAuc2V0KEFsZXJ0UmVmLCBhbGVydFJlZik7XG5cbiAgICAgICAgLy8gUHJlcGFyZSBuZXcgY29tcG9uZW50XG4gICAgICAgIGNvbnN0IGNvbXBvbmVudEZhY3RvcnkgPSB0aGlzLmNvbXBvbmVudEZhY3RvcnlSZXNvbHZlci5yZXNvbHZlQ29tcG9uZW50RmFjdG9yeShBbGVydENvbXBvbmVudCk7XG4gICAgICAgIGNvbnN0IGNvbXBvbmVudFJlZiA9IGNvbXBvbmVudEZhY3RvcnkuY3JlYXRlKG5ldyBBbGVydEluamVjdG9yKHRoaXMuaW5qZWN0b3IsIGNvbmZpZ01hcCkpO1xuICAgICAgICBjb21wb25lbnRSZWYubG9jYXRpb24ubmF0aXZlRWxlbWVudC5zdHlsZS5tYXJnaW5Ub3AgPSAnMTBweCc7XG4gICAgICAgIHRoaXMuYXBwUmVmLmF0dGFjaFZpZXcoY29tcG9uZW50UmVmLmhvc3RWaWV3KTtcblxuICAgICAgICAvLyBTdWJzY3JpcHRpb24gdG8gY2xvc2UgYWxlcnQgZnJvbSByZWZcbiAgICAgICAgY29uc3QgcmVmU3ViID0gYWxlcnRSZWYuYWZ0ZXJEaXNtaXNzZWQuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuZGVzdHJveUFsZXJ0Q29tcG9uZW50KGNvbXBvbmVudFJlZik7XG4gICAgICAgICAgICByZWZTdWIudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgLy8gUHJlcGFyZSBjb21wb25lbnQgZGF0YSBpdGVtc1xuICAgICAgICBjb25zdCBjb25maWdPYmogPSBPYmplY3QuYXNzaWduKHt9LCBhbGVydENvbmZpZyk7XG4gICAgICAgIE9iamVjdC5rZXlzKGNvbmZpZ09iaikuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgICAgICAgaWYgKGtleSAhPT0gJ2RhdGEnKSB7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50UmVmLmluc3RhbmNlW2tleV0gPSBjb25maWdPYmpba2V5XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIGNvbXBvbmVudFJlZi5pbnN0YW5jZS5jaGlsZENvbXBvbmVudFR5cGUgPSBjb250ZW50O1xuXG4gICAgICAgIC8vIFJlbmRlciBuZXcgY29tcG9uZW50XG4gICAgICAgIGNvbnN0IGRvbUVsZW0gPSAoY29tcG9uZW50UmVmLmhvc3RWaWV3IGFzIEVtYmVkZGVkVmlld1JlZjxhbnk+KS5yb290Tm9kZXNbMF0gYXMgSFRNTEVsZW1lbnQ7XG4gICAgICAgIHRoaXMuYWxlcnRDb250YWluZXJSZWYubG9jYXRpb24ubmF0aXZlRWxlbWVudC5hcHBlbmRDaGlsZChkb21FbGVtKTtcblxuICAgICAgICAvLyBMb2cgbmV3IGNvbXBvbmVudFxuICAgICAgICB0aGlzLmFsZXJ0cy5wdXNoKGNvbXBvbmVudFJlZik7XG4gICAgICAgIHJldHVybiBhbGVydFJlZjtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBEaXNtaXNzZXMgYWxsIHNlcnZpY2Utb3BlbmVkIGFsZXJ0cy5cbiAgICAgKi9cbiAgICBwdWJsaWMgZGlzbWlzc0FsbCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5hbGVydHMuZm9yRWFjaChyZWYgPT4ge1xuICAgICAgICAgICAgdGhpcy5kZXN0cm95QWxlcnRDb21wb25lbnQocmVmKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBkZXN0cm95QWxlcnRDb21wb25lbnQoYWxlcnQ6IENvbXBvbmVudFJlZjxBbGVydENvbXBvbmVudD4pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5hbGVydHNbdGhpcy5hbGVydHMuaW5kZXhPZihhbGVydCldID0gbnVsbDtcbiAgICAgICAgdGhpcy5hbGVydHMgPSB0aGlzLmFsZXJ0cy5maWx0ZXIoaXRlbSA9PiBpdGVtICE9PSBudWxsICYmIGl0ZW0gIT09IHVuZGVmaW5lZCk7XG4gICAgICAgIHRoaXMuYXBwUmVmLmRldGFjaFZpZXcoYWxlcnQuaG9zdFZpZXcpO1xuICAgICAgICBhbGVydC5kZXN0cm95KCk7XG5cbiAgICAgICAgaWYgKHRoaXMuYWxlcnRDb250YWluZXJSZWYgJiYgKCF0aGlzLmFsZXJ0cyB8fCB0aGlzLmFsZXJ0cy5sZW5ndGggPT09IDApKSB7XG4gICAgICAgICAgICB0aGlzLmRlc3Ryb3lBbGVydENvbnRhaW5lcigpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBvcGVuQWxlcnRDb250YWluZXIoKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGZhY3RvcnkgPSB0aGlzLmNvbXBvbmVudEZhY3RvcnlSZXNvbHZlci5yZXNvbHZlQ29tcG9uZW50RmFjdG9yeShBbGVydENvbnRhaW5lckNvbXBvbmVudCk7XG4gICAgICAgIGNvbnN0IGNvbXBvbmVudFJlZiA9IGZhY3RvcnkuY3JlYXRlKHRoaXMuaW5qZWN0b3IpO1xuICAgICAgICB0aGlzLmFwcFJlZi5hdHRhY2hWaWV3KGNvbXBvbmVudFJlZi5ob3N0Vmlldyk7XG5cbiAgICAgICAgY29uc3QgZG9tRWxlbWVudCA9IChjb21wb25lbnRSZWYuaG9zdFZpZXcgYXMgRW1iZWRkZWRWaWV3UmVmPGFueT4pLnJvb3ROb2Rlc1swXSBhcyBIVE1MRWxlbWVudDtcbiAgICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChkb21FbGVtZW50KTtcbiAgICAgICAgdGhpcy5hbGVydENvbnRhaW5lclJlZiA9IGNvbXBvbmVudFJlZjtcbiAgICB9XG5cbiAgICBwcml2YXRlIGRlc3Ryb3lBbGVydENvbnRhaW5lcigpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5hcHBSZWYuZGV0YWNoVmlldyh0aGlzLmFsZXJ0Q29udGFpbmVyUmVmLmhvc3RWaWV3KTtcbiAgICAgICAgdGhpcy5hbGVydENvbnRhaW5lclJlZi5kZXN0cm95KCk7XG4gICAgICAgIHRoaXMuYWxlcnRDb250YWluZXJSZWYgPSB1bmRlZmluZWQ7XG4gICAgfVxuXG59XG4iXX0=