@asi-ngtools/lib
Version:
This project is a little components library, simple to use, which will help you to simplify your project.
95 lines (94 loc) • 9.46 kB
JavaScript
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
*/
import { AsiDropdownContainer } from './container/asi-dropdown-container.component';
import { Injectable, ComponentFactoryResolver, ApplicationRef } from '@angular/core';
import * as nh from '../../native-helper';
import { of } from 'rxjs';
export class AsiDropdownService {
/**
* @param {?} resolver
* @param {?} appRef
*/
constructor(resolver, appRef) {
this.resolver = resolver;
this.appRef = appRef;
this.containers = [];
}
/**
*
* @param {?} elementRef
* @param {?} asiDropDown
* @return {?}
*/
showDropdown(elementRef, asiDropDown) {
/** @type {?} */
let containerRef = this.getContainer();
containerRef.instance.injectService(this);
containerRef.instance.forElement(elementRef);
containerRef.instance.show(asiDropDown);
containerRef.instance.setIndex(this.containers.length);
containerRef.instance.canClose = asiDropDown.canClose;
containerRef.instance.onClose().subscribe((containerToRemove) => {
nh.remove(this.containers, (container) => {
return containerToRemove.index === container.instance.index;
});
});
this.containers.push(containerRef);
return containerRef;
}
/**
* @param {?} index
* @param {?} canClose
* @return {?}
*/
canClose(index, canClose) {
if (index >= this.containers.length - 1) {
if (canClose) {
return nh.observe(canClose(document.activeElement));
}
else {
return of(true);
}
}
else {
return of(false);
}
}
/**
* @return {?}
*/
getContainer() {
/** @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('AsiDropdown : Please add "viewContainerRef : ViewContainerRef" declaration in your root component constructor : ' + appName);
}
/** @type {?} */
const asiDropdownContainerFactory = this.resolver.resolveComponentFactory(AsiDropdownContainer);
/** @type {?} */
let containerRef = rootComponent.viewContainerRef.createComponent(asiDropdownContainerFactory, 0);
return containerRef;
}
}
AsiDropdownService.decorators = [
{ type: Injectable }
];
/** @nocollapse */
AsiDropdownService.ctorParameters = () => [
{ type: ComponentFactoryResolver },
{ type: ApplicationRef }
];
if (false) {
/** @type {?} */
AsiDropdownService.prototype.containers;
/** @type {?} */
AsiDropdownService.prototype.resolver;
/** @type {?} */
AsiDropdownService.prototype.appRef;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXNpLWRyb3Bkb3duLnNlcnZpY2UuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9AYXNpLW5ndG9vbHMvbGliLyIsInNvdXJjZXMiOlsibGliL2NvbXBvbmVudHMvYXNpLWRyb3Bkb3duL2FzaS1kcm9wZG93bi5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFDQSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSw4Q0FBOEMsQ0FBQztBQUNwRixPQUFPLEVBQUUsVUFBVSxFQUFvQix3QkFBd0IsRUFBZ0IsY0FBYyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRXJILE9BQU8sS0FBSyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDMUMsT0FBTyxFQUFFLEVBQUUsRUFBYyxNQUFNLE1BQU0sQ0FBQztBQUd0QyxNQUFNOzs7OztJQUlKLFlBQW9CLFFBQWtDLEVBQVUsTUFBc0I7UUFBbEUsYUFBUSxHQUFSLFFBQVEsQ0FBMEI7UUFBVSxXQUFNLEdBQU4sTUFBTSxDQUFnQjswQkFGdEIsRUFBRTtLQUdqRTs7Ozs7OztJQU9ELFlBQVksQ0FBQyxVQUFlLEVBQUUsV0FBd0I7O1FBQ3BELElBQUksWUFBWSxHQUF1QyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7UUFFM0UsWUFBWSxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDMUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDN0MsWUFBWSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDeEMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUN2RCxZQUFZLENBQUMsUUFBUSxDQUFDLFFBQVEsR0FBRyxXQUFXLENBQUMsUUFBUSxDQUFDO1FBRXRELFlBQVksQ0FBQyxRQUFRLENBQUMsT0FBTyxFQUFFLENBQUMsU0FBUyxDQUFDLENBQUMsaUJBQWlCLEVBQUUsRUFBRTtZQUM5RCxFQUFFLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQyxTQUFTLEVBQUUsRUFBRTtnQkFDdkMsTUFBTSxDQUFDLGlCQUFpQixDQUFDLEtBQUssS0FBSyxTQUFTLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQzthQUM3RCxDQUFDLENBQUM7U0FDSixDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUVuQyxNQUFNLENBQUMsWUFBWSxDQUFDO0tBQ3JCOzs7Ozs7SUFFRCxRQUFRLENBQUMsS0FBYSxFQUFFLFFBQWtCO1FBQ3hDLEVBQUUsQ0FBQyxDQUFDLEtBQUssSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3hDLEVBQUUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7Z0JBQ2IsTUFBTSxDQUFDLEVBQUUsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDO2FBQ3JEO1lBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQ04sTUFBTSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQzthQUNqQjtTQUNGO1FBQUMsSUFBSSxDQUFDLENBQUM7WUFDTixNQUFNLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDO1NBQ2xCO0tBQ0Y7Ozs7SUFFTyxZQUFZOztRQUVsQixNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUM7UUFDekQsRUFBRSxDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDOztZQUNwQyxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7O1lBRW5ELE1BQU0sSUFBSSxLQUFLLENBQUMsa0hBQWtILEdBQUcsT0FBTyxDQUFDLENBQUM7U0FDL0k7O1FBRUQsTUFBTSwyQkFBMkIsR0FBMkMsSUFBSSxDQUFDLFFBQVEsQ0FBQyx1QkFBdUIsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDOztRQUN4SSxJQUFJLFlBQVksR0FBRyxhQUFhLENBQUMsZ0JBQWdCLENBQUMsZUFBZSxDQUFDLDJCQUEyQixFQUFFLENBQUMsQ0FBQyxDQUFDO1FBRWxHLE1BQU0sQ0FBQyxZQUFZLENBQUM7Ozs7WUF6RHZCLFVBQVU7Ozs7WUFMNEIsd0JBQXdCO1lBQWdCLGNBQWMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBc2lEcm9wRG93biB9IGZyb20gJy4vYXNpLWRyb3Bkb3duLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IEFzaURyb3Bkb3duQ29udGFpbmVyIH0gZnJvbSAnLi9jb250YWluZXIvYXNpLWRyb3Bkb3duLWNvbnRhaW5lci5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBJbmplY3RhYmxlLCBDb21wb25lbnRGYWN0b3J5LCBDb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIsIENvbXBvbmVudFJlZiwgQXBwbGljYXRpb25SZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuXHJcbmltcG9ydCAqIGFzIG5oIGZyb20gJy4uLy4uL25hdGl2ZS1oZWxwZXInO1xyXG5pbXBvcnQgeyBvZiwgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xyXG5cclxuQEluamVjdGFibGUoKVxyXG5leHBvcnQgY2xhc3MgQXNpRHJvcGRvd25TZXJ2aWNlIHtcclxuXHJcbiAgcHJpdmF0ZSBjb250YWluZXJzOiBBcnJheTxDb21wb25lbnRSZWY8QXNpRHJvcGRvd25Db250YWluZXI+PiA9IFtdO1xyXG5cclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlc29sdmVyOiBDb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIsIHByaXZhdGUgYXBwUmVmOiBBcHBsaWNhdGlvblJlZikge1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICpcclxuICAgKiBAcGFyYW0gdGVtcGxhdGVSZWYgVGhlIHRlbXBsYXRlIGNvbnRlbnQgb2YgdGhlIGRyb3Bkb3duXHJcbiAgICogQHBhcmFtIGh0bWxFbGVtZW50IFRoZSBwYXJlbnQgSFRNTEVsZW1lbnQsIHdoZXJlIHRoZSBkcm9wZG93biBzaG91bGQgZGlzcGxheVxyXG4gICAqL1xyXG4gIHNob3dEcm9wZG93bihlbGVtZW50UmVmOiBhbnksIGFzaURyb3BEb3duOiBBc2lEcm9wRG93bik6IENvbXBvbmVudFJlZjxBc2lEcm9wZG93bkNvbnRhaW5lcj4ge1xyXG4gICAgbGV0IGNvbnRhaW5lclJlZjogQ29tcG9uZW50UmVmPEFzaURyb3Bkb3duQ29udGFpbmVyPiA9IHRoaXMuZ2V0Q29udGFpbmVyKCk7XHJcblxyXG4gICAgY29udGFpbmVyUmVmLmluc3RhbmNlLmluamVjdFNlcnZpY2UodGhpcyk7XHJcbiAgICBjb250YWluZXJSZWYuaW5zdGFuY2UuZm9yRWxlbWVudChlbGVtZW50UmVmKTtcclxuICAgIGNvbnRhaW5lclJlZi5pbnN0YW5jZS5zaG93KGFzaURyb3BEb3duKTtcclxuICAgIGNvbnRhaW5lclJlZi5pbnN0YW5jZS5zZXRJbmRleCh0aGlzLmNvbnRhaW5lcnMubGVuZ3RoKTtcclxuICAgIGNvbnRhaW5lclJlZi5pbnN0YW5jZS5jYW5DbG9zZSA9IGFzaURyb3BEb3duLmNhbkNsb3NlO1xyXG5cclxuICAgIGNvbnRhaW5lclJlZi5pbnN0YW5jZS5vbkNsb3NlKCkuc3Vic2NyaWJlKChjb250YWluZXJUb1JlbW92ZSkgPT4ge1xyXG4gICAgICBuaC5yZW1vdmUodGhpcy5jb250YWluZXJzLCAoY29udGFpbmVyKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIGNvbnRhaW5lclRvUmVtb3ZlLmluZGV4ID09PSBjb250YWluZXIuaW5zdGFuY2UuaW5kZXg7XHJcbiAgICAgIH0pO1xyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5jb250YWluZXJzLnB1c2goY29udGFpbmVyUmVmKTtcclxuXHJcbiAgICByZXR1cm4gY29udGFpbmVyUmVmO1xyXG4gIH1cclxuXHJcbiAgY2FuQ2xvc2UoaW5kZXg6IG51bWJlciwgY2FuQ2xvc2U6IEZ1bmN0aW9uKTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuICAgIGlmIChpbmRleCA+PSB0aGlzLmNvbnRhaW5lcnMubGVuZ3RoIC0gMSkge1xyXG4gICAgICBpZiAoY2FuQ2xvc2UpIHtcclxuICAgICAgICByZXR1cm4gbmgub2JzZXJ2ZShjYW5DbG9zZShkb2N1bWVudC5hY3RpdmVFbGVtZW50KSk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgcmV0dXJuIG9mKHRydWUpO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gb2YoZmFsc2UpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRDb250YWluZXIoKTogQ29tcG9uZW50UmVmPEFzaURyb3Bkb3duQ29udGFpbmVyPiB7XHJcbiAgICAvLyByZXRyZWl2ZSByb290Q29tcG9uZW50XHJcbiAgICBjb25zdCByb290Q29tcG9uZW50ID0gdGhpcy5hcHBSZWYuY29tcG9uZW50c1swXS5pbnN0YW5jZTtcclxuICAgIGlmICghcm9vdENvbXBvbmVudC52aWV3Q29udGFpbmVyUmVmKSB7XHJcbiAgICAgIGNvbnN0IGFwcE5hbWUgPSB0aGlzLmFwcFJlZi5jb21wb25lbnRUeXBlc1swXS5uYW1lO1xyXG4gICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6bWF4LWxpbmUtbGVuZ3RoXHJcbiAgICAgIHRocm93IG5ldyBFcnJvcignQXNpRHJvcGRvd24gOiBQbGVhc2UgYWRkIFwidmlld0NvbnRhaW5lclJlZiA6IFZpZXdDb250YWluZXJSZWZcIiBkZWNsYXJhdGlvbiBpbiB5b3VyIHJvb3QgY29tcG9uZW50IGNvbnN0cnVjdG9yIDogJyArIGFwcE5hbWUpO1xyXG4gICAgfVxyXG4gICAgLy8gQ3JlYXRlIGFuIEFzaURyb3Bkb3duQ29udGFpbmVyXHJcbiAgICBjb25zdCBhc2lEcm9wZG93bkNvbnRhaW5lckZhY3Rvcnk6IENvbXBvbmVudEZhY3Rvcnk8QXNpRHJvcGRvd25Db250YWluZXI+ID0gdGhpcy5yZXNvbHZlci5yZXNvbHZlQ29tcG9uZW50RmFjdG9yeShBc2lEcm9wZG93bkNvbnRhaW5lcik7XHJcbiAgICBsZXQgY29udGFpbmVyUmVmID0gcm9vdENvbXBvbmVudC52aWV3Q29udGFpbmVyUmVmLmNyZWF0ZUNvbXBvbmVudChhc2lEcm9wZG93bkNvbnRhaW5lckZhY3RvcnksIDApO1xyXG5cclxuICAgIHJldHVybiBjb250YWluZXJSZWY7XHJcbiAgfVxyXG59XHJcbiJdfQ==