@asi-ngtools/lib
Version:
This project is a little components library, simple to use, which will help you to simplify your project.
107 lines (106 loc) • 13.4 kB
JavaScript
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
*/
import { AsiNotification } from './notification/asi-notification.component';
import { AsiNotificationContainer } from './container/asi-notification-container.component';
import { Injectable, ComponentFactoryResolver, ApplicationRef } from '@angular/core';
export class AsiNotificationService {
/**
* @param {?} resolver
* @param {?} appRef
*/
constructor(resolver, appRef) {
this.resolver = resolver;
this.appRef = appRef;
this.containerByPosition = new Map();
}
/**
* @template T
* @param {?} content
* @param {?} config
* @return {?}
*/
fromComponent(content, config) {
/** @type {?} */
let containerRef = this.getContainerForPosition(config.position);
/** @type {?} */
let notificationRef = this.createNotificiation(content, containerRef, config);
containerRef.instance.addNotification(notificationRef, config);
return notificationRef.instance;
}
/**
* @param {?} position
* @return {?}
*/
getContainerForPosition(position) {
if (this.containerByPosition.get(position) == null) {
/** @type {?} */
const rootComponent = this.appRef.components[0].instance;
if (!rootComponent.viewContainerRef) {
/** @type {?} */
const appName = this.appRef.componentTypes[0].name;
// tslint:disable-next-line:max-line-length
throw new Error('AsiNotification : Please add "viewContainerRef : ViewContainerRef" declaration in your root component constructor : ' + appName);
}
/** @type {?} */
const asiNotificationContainerFactory = this.resolver.resolveComponentFactory(AsiNotificationContainer);
/** @type {?} */
let containerRef = rootComponent.viewContainerRef.createComponent(asiNotificationContainerFactory, 0);
containerRef.instance.setPosition(position);
this.containerByPosition.set(position, containerRef);
// Ecoute de la mise a vide du container pour le supprimer
containerRef.instance.onContainerEmpty().subscribe((asiNotificationContainer) => {
/** @type {?} */
const containerToDestroy = this.containerByPosition.get(asiNotificationContainer.getPosition());
this.containerByPosition.delete(asiNotificationContainer.getPosition());
containerToDestroy.destroy();
});
}
return this.containerByPosition.get(position);
}
/**
* @template T
* @param {?} content
* @param {?} containerRef
* @param {?} config
* @return {?}
*/
createNotificiation(content, containerRef, config) {
/** @type {?} */
const asiNotificationFactory = this.resolver.resolveComponentFactory(AsiNotification);
/** @type {?} */
let asiNotificationRef = containerRef.instance.viewContainerRef.createComponent(asiNotificationFactory, 0);
asiNotificationRef.instance.setConfig(config);
// Deplacement de la notification dans la div notifications-container
containerRef.location.nativeElement.children[0].appendChild(asiNotificationRef.location.nativeElement);
/** @type {?} */
const contentFactory = this.resolver.resolveComponentFactory(content);
/** @type {?} */
let contentRef = asiNotificationRef.instance.viewContainerRef.createComponent(contentFactory);
/** @type {?} */
let contentComponent = contentRef.instance;
// Ajout de la reference du composant dans le AsiNotification
asiNotificationRef.instance['_component'] = contentComponent;
// Deplacement du contenu dans la div notification-panel
asiNotificationRef.location.nativeElement.appendChild(contentRef.location.nativeElement);
return asiNotificationRef;
}
}
AsiNotificationService.decorators = [
{ type: Injectable }
];
/** @nocollapse */
AsiNotificationService.ctorParameters = () => [
{ type: ComponentFactoryResolver },
{ type: ApplicationRef }
];
if (false) {
/** @type {?} */
AsiNotificationService.prototype.containerByPosition;
/** @type {?} */
AsiNotificationService.prototype.resolver;
/** @type {?} */
AsiNotificationService.prototype.appRef;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXNpLW5vdGlmaWNhdGlvbi5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6Im5nOi8vQGFzaS1uZ3Rvb2xzL2xpYi8iLCJzb3VyY2VzIjpbImxpYi9jb21wb25lbnRzL2FzaS1ub3RpZmljYXRpb24vYXNpLW5vdGlmaWNhdGlvbi5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFDQSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMkNBQTJDLENBQUM7QUFDNUUsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sa0RBQWtELENBQUM7QUFFNUYsT0FBTyxFQUFFLFVBQVUsRUFBb0Isd0JBQXdCLEVBQWdCLGNBQWMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUdySCxNQUFNOzs7OztJQUlKLFlBQW9CLFFBQWtDLEVBQVUsTUFBc0I7UUFBbEUsYUFBUSxHQUFSLFFBQVEsQ0FBMEI7UUFBVSxXQUFNLEdBQU4sTUFBTSxDQUFnQjttQ0FGeEQsSUFBSSxHQUFHLEVBQW1FO0tBR3ZHOzs7Ozs7O0lBRUQsYUFBYSxDQUFJLE9BQXlCLEVBQUUsTUFBNkI7O1FBQ3ZFLElBQUksWUFBWSxHQUFHLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7O1FBRWpFLElBQUksZUFBZSxHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQzlFLFlBQVksQ0FBQyxRQUFRLENBQUMsZUFBZSxDQUFDLGVBQWUsRUFBRSxNQUFNLENBQUMsQ0FBQztRQUUvRCxNQUFNLENBQUMsZUFBZSxDQUFDLFFBQVEsQ0FBQztLQUNqQzs7Ozs7SUFFTyx1QkFBdUIsQ0FBQyxRQUFpQztRQUMvRCxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUM7O1lBRW5ELE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQztZQUN6RCxFQUFFLENBQUMsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUM7O2dCQUNwQyxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7O2dCQUVuRCxNQUFNLElBQUksS0FBSyxDQUFDLHNIQUFzSCxHQUFHLE9BQU8sQ0FBQyxDQUFDO2FBQ25KOztZQUVELE1BQU0sK0JBQStCLEdBQ25DLElBQUksQ0FBQyxRQUFRLENBQUMsdUJBQXVCLENBQUMsd0JBQXdCLENBQUMsQ0FBQzs7WUFDbEUsSUFBSSxZQUFZLEdBQUcsYUFBYSxDQUFDLGdCQUFnQixDQUFDLGVBQWUsQ0FBQywrQkFBK0IsRUFBRSxDQUFDLENBQUMsQ0FBQztZQUN0RyxZQUFZLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUM1QyxJQUFJLENBQUMsbUJBQW1CLENBQUMsR0FBRyxDQUFDLFFBQVEsRUFBRSxZQUFZLENBQUMsQ0FBQzs7WUFHckQsWUFBWSxDQUFDLFFBQVEsQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDLFNBQVMsQ0FBQyxDQUFDLHdCQUFrRCxFQUFFLEVBQUU7O2dCQUN4RyxNQUFNLGtCQUFrQixHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxHQUFHLENBQUMsd0JBQXdCLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQztnQkFDaEcsSUFBSSxDQUFDLG1CQUFtQixDQUFDLE1BQU0sQ0FBQyx3QkFBd0IsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDO2dCQUN4RSxrQkFBa0IsQ0FBQyxPQUFPLEVBQUUsQ0FBQzthQUM5QixDQUFDLENBQUM7U0FDSjtRQUNELE1BQU0sQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDOzs7Ozs7Ozs7SUFHeEMsbUJBQW1CLENBQUksT0FBeUIsRUFBRSxZQUFvRCxFQUM1RyxNQUE2Qjs7UUFHN0IsTUFBTSxzQkFBc0IsR0FDMUIsSUFBSSxDQUFDLFFBQVEsQ0FBQyx1QkFBdUIsQ0FBcUIsZUFBZSxDQUFDLENBQUM7O1FBQzdFLElBQUksa0JBQWtCLEdBQUcsWUFBWSxDQUFDLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxlQUFlLENBQUMsc0JBQXNCLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFFM0csa0JBQWtCLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQzs7UUFHOUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxrQkFBa0IsQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLENBQUM7O1FBR3ZHLE1BQU0sY0FBYyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsdUJBQXVCLENBQUMsT0FBTyxDQUFDLENBQUM7O1FBQ3RFLElBQUksVUFBVSxHQUFHLGtCQUFrQixDQUFDLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxlQUFlLENBQUMsY0FBYyxDQUFDLENBQUM7O1FBRTlGLElBQUksZ0JBQWdCLEdBQUcsVUFBVSxDQUFDLFFBQVEsQ0FBQzs7UUFHM0Msa0JBQWtCLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQyxHQUFHLGdCQUFnQixDQUFDOztRQUc3RCxrQkFBa0IsQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLFdBQVcsQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBRXpGLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQzs7OztZQXBFN0IsVUFBVTs7OztZQUY0Qix3QkFBd0I7WUFBZ0IsY0FBYyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudFR5cGUgfSBmcm9tICcuLy4uL2NvbW1vbi9jb21wb25lbnQtdHlwZSc7XHJcbmltcG9ydCB7IEFzaU5vdGlmaWNhdGlvbiB9IGZyb20gJy4vbm90aWZpY2F0aW9uL2FzaS1ub3RpZmljYXRpb24uY29tcG9uZW50JztcclxuaW1wb3J0IHsgQXNpTm90aWZpY2F0aW9uQ29udGFpbmVyIH0gZnJvbSAnLi9jb250YWluZXIvYXNpLW5vdGlmaWNhdGlvbi1jb250YWluZXIuY29tcG9uZW50JztcclxuaW1wb3J0IHsgQXNpTm90aWZpY2F0aW9uQ29uZmlnLCBBc2lOb3RpZmljYXRpb25Qb3NpdGlvbiB9IGZyb20gJy4vYXNpLW5vdGlmaWNhdGlvbi1jb25maWcnO1xyXG5pbXBvcnQgeyBJbmplY3RhYmxlLCBDb21wb25lbnRGYWN0b3J5LCBDb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIsIENvbXBvbmVudFJlZiwgQXBwbGljYXRpb25SZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuXHJcbkBJbmplY3RhYmxlKClcclxuZXhwb3J0IGNsYXNzIEFzaU5vdGlmaWNhdGlvblNlcnZpY2Uge1xyXG5cclxuICBwcml2YXRlIGNvbnRhaW5lckJ5UG9zaXRpb24gPSBuZXcgTWFwPEFzaU5vdGlmaWNhdGlvblBvc2l0aW9uLCBDb21wb25lbnRSZWY8QXNpTm90aWZpY2F0aW9uQ29udGFpbmVyPj4oKTtcclxuXHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSByZXNvbHZlcjogQ29tcG9uZW50RmFjdG9yeVJlc29sdmVyLCBwcml2YXRlIGFwcFJlZjogQXBwbGljYXRpb25SZWYpIHtcclxuICB9XHJcblxyXG4gIGZyb21Db21wb25lbnQ8VD4oY29udGVudDogQ29tcG9uZW50VHlwZTxUPiwgY29uZmlnOiBBc2lOb3RpZmljYXRpb25Db25maWcpOiBBc2lOb3RpZmljYXRpb248VD4ge1xyXG4gICAgbGV0IGNvbnRhaW5lclJlZiA9IHRoaXMuZ2V0Q29udGFpbmVyRm9yUG9zaXRpb24oY29uZmlnLnBvc2l0aW9uKTtcclxuXHJcbiAgICBsZXQgbm90aWZpY2F0aW9uUmVmID0gdGhpcy5jcmVhdGVOb3RpZmljaWF0aW9uKGNvbnRlbnQsIGNvbnRhaW5lclJlZiwgY29uZmlnKTtcclxuICAgIGNvbnRhaW5lclJlZi5pbnN0YW5jZS5hZGROb3RpZmljYXRpb24obm90aWZpY2F0aW9uUmVmLCBjb25maWcpO1xyXG5cclxuICAgIHJldHVybiBub3RpZmljYXRpb25SZWYuaW5zdGFuY2U7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldENvbnRhaW5lckZvclBvc2l0aW9uKHBvc2l0aW9uOiBBc2lOb3RpZmljYXRpb25Qb3NpdGlvbik6IENvbXBvbmVudFJlZjxBc2lOb3RpZmljYXRpb25Db250YWluZXI+IHtcclxuICAgIGlmICh0aGlzLmNvbnRhaW5lckJ5UG9zaXRpb24uZ2V0KHBvc2l0aW9uKSA9PSBudWxsKSB7XHJcbiAgICAgIC8vIFLDqWN1cGVyYXRpb24gZHUgcm9vdENvbXBvbmVudFxyXG4gICAgICBjb25zdCByb290Q29tcG9uZW50ID0gdGhpcy5hcHBSZWYuY29tcG9uZW50c1swXS5pbnN0YW5jZTtcclxuICAgICAgaWYgKCFyb290Q29tcG9uZW50LnZpZXdDb250YWluZXJSZWYpIHtcclxuICAgICAgICBjb25zdCBhcHBOYW1lID0gdGhpcy5hcHBSZWYuY29tcG9uZW50VHlwZXNbMF0ubmFtZTtcclxuICAgICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6bWF4LWxpbmUtbGVuZ3RoXHJcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdBc2lOb3RpZmljYXRpb24gOiBQbGVhc2UgYWRkIFwidmlld0NvbnRhaW5lclJlZiA6IFZpZXdDb250YWluZXJSZWZcIiBkZWNsYXJhdGlvbiBpbiB5b3VyIHJvb3QgY29tcG9uZW50IGNvbnN0cnVjdG9yIDogJyArIGFwcE5hbWUpO1xyXG4gICAgICB9XHJcbiAgICAgIC8vIENyw6lhdGlvbiBkJ3VuIEFzaU5vdGlmaWNhdGlvbkNvbnRhaW5lclxyXG4gICAgICBjb25zdCBhc2lOb3RpZmljYXRpb25Db250YWluZXJGYWN0b3J5OiBDb21wb25lbnRGYWN0b3J5PEFzaU5vdGlmaWNhdGlvbkNvbnRhaW5lcj4gPVxyXG4gICAgICAgIHRoaXMucmVzb2x2ZXIucmVzb2x2ZUNvbXBvbmVudEZhY3RvcnkoQXNpTm90aWZpY2F0aW9uQ29udGFpbmVyKTtcclxuICAgICAgbGV0IGNvbnRhaW5lclJlZiA9IHJvb3RDb21wb25lbnQudmlld0NvbnRhaW5lclJlZi5jcmVhdGVDb21wb25lbnQoYXNpTm90aWZpY2F0aW9uQ29udGFpbmVyRmFjdG9yeSwgMCk7XHJcbiAgICAgIGNvbnRhaW5lclJlZi5pbnN0YW5jZS5zZXRQb3NpdGlvbihwb3NpdGlvbik7XHJcbiAgICAgIHRoaXMuY29udGFpbmVyQnlQb3NpdGlvbi5zZXQocG9zaXRpb24sIGNvbnRhaW5lclJlZik7XHJcblxyXG4gICAgICAvLyBFY291dGUgZGUgbGEgbWlzZSBhIHZpZGUgZHUgY29udGFpbmVyIHBvdXIgbGUgc3VwcHJpbWVyXHJcbiAgICAgIGNvbnRhaW5lclJlZi5pbnN0YW5jZS5vbkNvbnRhaW5lckVtcHR5KCkuc3Vic2NyaWJlKChhc2lOb3RpZmljYXRpb25Db250YWluZXI6IEFzaU5vdGlmaWNhdGlvbkNvbnRhaW5lcikgPT4ge1xyXG4gICAgICAgIGNvbnN0IGNvbnRhaW5lclRvRGVzdHJveSA9IHRoaXMuY29udGFpbmVyQnlQb3NpdGlvbi5nZXQoYXNpTm90aWZpY2F0aW9uQ29udGFpbmVyLmdldFBvc2l0aW9uKCkpO1xyXG4gICAgICAgIHRoaXMuY29udGFpbmVyQnlQb3NpdGlvbi5kZWxldGUoYXNpTm90aWZpY2F0aW9uQ29udGFpbmVyLmdldFBvc2l0aW9uKCkpO1xyXG4gICAgICAgIGNvbnRhaW5lclRvRGVzdHJveS5kZXN0cm95KCk7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRoaXMuY29udGFpbmVyQnlQb3NpdGlvbi5nZXQocG9zaXRpb24pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjcmVhdGVOb3RpZmljaWF0aW9uPFQ+KGNvbnRlbnQ6IENvbXBvbmVudFR5cGU8VD4sIGNvbnRhaW5lclJlZjogQ29tcG9uZW50UmVmPEFzaU5vdGlmaWNhdGlvbkNvbnRhaW5lcj4sXHJcbiAgICBjb25maWc6IEFzaU5vdGlmaWNhdGlvbkNvbmZpZyk6IENvbXBvbmVudFJlZjxBc2lOb3RpZmljYXRpb248VD4+IHtcclxuXHJcbiAgICAvLyBDcmVhdGlvbiBkZSBsYSBudG9maWNpYXRpb25cclxuICAgIGNvbnN0IGFzaU5vdGlmaWNhdGlvbkZhY3Rvcnk6IENvbXBvbmVudEZhY3Rvcnk8QXNpTm90aWZpY2F0aW9uPFQ+PiA9XHJcbiAgICAgIHRoaXMucmVzb2x2ZXIucmVzb2x2ZUNvbXBvbmVudEZhY3Rvcnk8QXNpTm90aWZpY2F0aW9uPFQ+PihBc2lOb3RpZmljYXRpb24pO1xyXG4gICAgbGV0IGFzaU5vdGlmaWNhdGlvblJlZiA9IGNvbnRhaW5lclJlZi5pbnN0YW5jZS52aWV3Q29udGFpbmVyUmVmLmNyZWF0ZUNvbXBvbmVudChhc2lOb3RpZmljYXRpb25GYWN0b3J5LCAwKTtcclxuXHJcbiAgICBhc2lOb3RpZmljYXRpb25SZWYuaW5zdGFuY2Uuc2V0Q29uZmlnKGNvbmZpZyk7XHJcblxyXG4gICAgLy8gRGVwbGFjZW1lbnQgZGUgbGEgbm90aWZpY2F0aW9uIGRhbnMgbGEgZGl2IG5vdGlmaWNhdGlvbnMtY29udGFpbmVyXHJcbiAgICBjb250YWluZXJSZWYubG9jYXRpb24ubmF0aXZlRWxlbWVudC5jaGlsZHJlblswXS5hcHBlbmRDaGlsZChhc2lOb3RpZmljYXRpb25SZWYubG9jYXRpb24ubmF0aXZlRWxlbWVudCk7XHJcblxyXG4gICAgLy8gQ3LDqWF0aW9uIGR1IGNvbXBvc2FudCBkw6lzaXLDqVxyXG4gICAgY29uc3QgY29udGVudEZhY3RvcnkgPSB0aGlzLnJlc29sdmVyLnJlc29sdmVDb21wb25lbnRGYWN0b3J5KGNvbnRlbnQpO1xyXG4gICAgbGV0IGNvbnRlbnRSZWYgPSBhc2lOb3RpZmljYXRpb25SZWYuaW5zdGFuY2Uudmlld0NvbnRhaW5lclJlZi5jcmVhdGVDb21wb25lbnQoY29udGVudEZhY3RvcnkpO1xyXG5cclxuICAgIGxldCBjb250ZW50Q29tcG9uZW50ID0gY29udGVudFJlZi5pbnN0YW5jZTtcclxuXHJcbiAgICAvLyBBam91dCBkZSBsYSByZWZlcmVuY2UgZHUgY29tcG9zYW50IGRhbnMgbGUgQXNpTm90aWZpY2F0aW9uXHJcbiAgICBhc2lOb3RpZmljYXRpb25SZWYuaW5zdGFuY2VbJ19jb21wb25lbnQnXSA9IGNvbnRlbnRDb21wb25lbnQ7XHJcblxyXG4gICAgLy8gRGVwbGFjZW1lbnQgZHUgY29udGVudSBkYW5zIGxhIGRpdiBub3RpZmljYXRpb24tcGFuZWxcclxuICAgIGFzaU5vdGlmaWNhdGlvblJlZi5sb2NhdGlvbi5uYXRpdmVFbGVtZW50LmFwcGVuZENoaWxkKGNvbnRlbnRSZWYubG9jYXRpb24ubmF0aXZlRWxlbWVudCk7XHJcblxyXG4gICAgcmV0dXJuIGFzaU5vdGlmaWNhdGlvblJlZjtcclxuICB9XHJcbn1cclxuIl19