@asi-ngtools/lib
Version:
This project is a little components library, simple to use, which will help you to simplify your project.
82 lines (81 loc) • 8.15 kB
JavaScript
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
*/
import { AsiDropdownContainer } from './container/asi-dropdown-container.component';
import { Injectable, ComponentFactoryResolver, } from '@angular/core';
import * as nh from '../../native-helper';
import { of } from 'rxjs';
export class AsiDropdownService {
/**
* @param {?} resolver
*/
constructor(resolver) {
this.resolver = resolver;
this.containers = [];
}
/**
*
* @param {?} viewContainerRef The ViewContainerRef of the parent component
* @param {?} elementRef The parent HTMLElement, where the dropdown should display
* @param {?} asiDropDown The template content of the dropdown
* @return {?}
*/
showDropdown(viewContainerRef, elementRef, asiDropDown) {
/** @type {?} */
let containerRef = this.getContainer(viewContainerRef);
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);
}
}
/**
* @param {?} viewContainerRef
* @return {?}
*/
getContainer(viewContainerRef) {
/** @type {?} */
const asiDropdownContainerFactory = this.resolver.resolveComponentFactory(AsiDropdownContainer);
return viewContainerRef.createComponent(asiDropdownContainerFactory, 0);
}
}
AsiDropdownService.decorators = [
{ type: Injectable }
];
/** @nocollapse */
AsiDropdownService.ctorParameters = () => [
{ type: ComponentFactoryResolver }
];
if (false) {
/** @type {?} */
AsiDropdownService.prototype.containers;
/** @type {?} */
AsiDropdownService.prototype.resolver;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXNpLWRyb3Bkb3duLnNlcnZpY2UuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9AYXNpLW5ndG9vbHMvbGliLyIsInNvdXJjZXMiOlsibGliL2NvbXBvbmVudHMvYXNpLWRyb3Bkb3duL2FzaS1kcm9wZG93bi5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFDQSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSw4Q0FBOEMsQ0FBQztBQUNwRixPQUFPLEVBQ0wsVUFBVSxFQUVWLHdCQUF3QixHQUd6QixNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEtBQUssRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQzFDLE9BQU8sRUFBRSxFQUFFLEVBQWMsTUFBTSxNQUFNLENBQUM7QUFHdEMsTUFBTTs7OztJQUlKLFlBQW9CLFFBQWtDO1FBQWxDLGFBQVEsR0FBUixRQUFRLENBQTBCOzBCQUZVLEVBQUU7S0FHakU7Ozs7Ozs7O0lBUUQsWUFBWSxDQUFDLGdCQUFrQyxFQUFFLFVBQWUsRUFBRSxXQUF3Qjs7UUFDeEYsSUFBSSxZQUFZLEdBQXVDLElBQUksQ0FBQyxZQUFZLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztRQUUzRixZQUFZLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUMxQyxZQUFZLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUM3QyxZQUFZLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUN4QyxZQUFZLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3ZELFlBQVksQ0FBQyxRQUFRLENBQUMsUUFBUSxHQUFHLFdBQVcsQ0FBQyxRQUFRLENBQUM7UUFFdEQsWUFBWSxDQUFDLFFBQVEsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxpQkFBaUIsRUFBRSxFQUFFO1lBQzlELEVBQUUsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDLFNBQVMsRUFBRSxFQUFFO2dCQUN2QyxNQUFNLENBQUMsaUJBQWlCLENBQUMsS0FBSyxLQUFLLFNBQVMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDO2FBQzdELENBQUMsQ0FBQztTQUNKLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBRW5DLE1BQU0sQ0FBQyxZQUFZLENBQUM7S0FDckI7Ozs7OztJQUVELFFBQVEsQ0FBQyxLQUFhLEVBQUUsUUFBa0I7UUFDeEMsRUFBRSxDQUFDLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDeEMsRUFBRSxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztnQkFDYixNQUFNLENBQUMsRUFBRSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUM7YUFDckQ7WUFBQyxJQUFJLENBQUMsQ0FBQztnQkFDTixNQUFNLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDO2FBQ2pCO1NBQ0Y7UUFBQyxJQUFJLENBQUMsQ0FBQztZQUNOLE1BQU0sQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUM7U0FDbEI7S0FDRjs7Ozs7SUFFTyxZQUFZLENBQUMsZ0JBQW1DOztRQUV0RCxNQUFNLDJCQUEyQixHQUEyQyxJQUFJLENBQUMsUUFBUSxDQUFDLHVCQUF1QixDQUFDLG9CQUFvQixDQUFDLENBQUM7UUFDeEksTUFBTSxDQUFDLGdCQUFnQixDQUFDLGVBQWUsQ0FBQywyQkFBMkIsRUFBRSxDQUFDLENBQUMsQ0FBQzs7OztZQWpEM0UsVUFBVTs7OztZQVJULHdCQUF3QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFzaURyb3BEb3duIH0gZnJvbSAnLi9hc2ktZHJvcGRvd24uY29tcG9uZW50JztcclxuaW1wb3J0IHsgQXNpRHJvcGRvd25Db250YWluZXIgfSBmcm9tICcuL2NvbnRhaW5lci9hc2ktZHJvcGRvd24tY29udGFpbmVyLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7XHJcbiAgSW5qZWN0YWJsZSxcclxuICBDb21wb25lbnRGYWN0b3J5LFxyXG4gIENvbXBvbmVudEZhY3RvcnlSZXNvbHZlcixcclxuICBDb21wb25lbnRSZWYsXHJcbiAgVmlld0NvbnRhaW5lclJlZixcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuXHJcbmltcG9ydCAqIGFzIG5oIGZyb20gJy4uLy4uL25hdGl2ZS1oZWxwZXInO1xyXG5pbXBvcnQgeyBvZiwgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xyXG5cclxuQEluamVjdGFibGUoKVxyXG5leHBvcnQgY2xhc3MgQXNpRHJvcGRvd25TZXJ2aWNlIHtcclxuXHJcbiAgcHJpdmF0ZSBjb250YWluZXJzOiBBcnJheTxDb21wb25lbnRSZWY8QXNpRHJvcGRvd25Db250YWluZXI+PiA9IFtdO1xyXG5cclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlc29sdmVyOiBDb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIpIHtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqXHJcbiAgICogQHBhcmFtIGFzaURyb3BEb3duIFRoZSB0ZW1wbGF0ZSBjb250ZW50IG9mIHRoZSBkcm9wZG93blxyXG4gICAqIEBwYXJhbSB2aWV3Q29udGFpbmVyUmVmIFRoZSBWaWV3Q29udGFpbmVyUmVmIG9mIHRoZSBwYXJlbnQgY29tcG9uZW50XHJcbiAgICogQHBhcmFtIGVsZW1lbnRSZWYgVGhlIHBhcmVudCBIVE1MRWxlbWVudCwgd2hlcmUgdGhlIGRyb3Bkb3duIHNob3VsZCBkaXNwbGF5XHJcbiAgICovXHJcbiAgc2hvd0Ryb3Bkb3duKHZpZXdDb250YWluZXJSZWY6IFZpZXdDb250YWluZXJSZWYsIGVsZW1lbnRSZWY6IGFueSwgYXNpRHJvcERvd246IEFzaURyb3BEb3duKTogQ29tcG9uZW50UmVmPEFzaURyb3Bkb3duQ29udGFpbmVyPiB7XHJcbiAgICBsZXQgY29udGFpbmVyUmVmOiBDb21wb25lbnRSZWY8QXNpRHJvcGRvd25Db250YWluZXI+ID0gdGhpcy5nZXRDb250YWluZXIodmlld0NvbnRhaW5lclJlZik7XHJcblxyXG4gICAgY29udGFpbmVyUmVmLmluc3RhbmNlLmluamVjdFNlcnZpY2UodGhpcyk7XHJcbiAgICBjb250YWluZXJSZWYuaW5zdGFuY2UuZm9yRWxlbWVudChlbGVtZW50UmVmKTtcclxuICAgIGNvbnRhaW5lclJlZi5pbnN0YW5jZS5zaG93KGFzaURyb3BEb3duKTtcclxuICAgIGNvbnRhaW5lclJlZi5pbnN0YW5jZS5zZXRJbmRleCh0aGlzLmNvbnRhaW5lcnMubGVuZ3RoKTtcclxuICAgIGNvbnRhaW5lclJlZi5pbnN0YW5jZS5jYW5DbG9zZSA9IGFzaURyb3BEb3duLmNhbkNsb3NlO1xyXG5cclxuICAgIGNvbnRhaW5lclJlZi5pbnN0YW5jZS5vbkNsb3NlKCkuc3Vic2NyaWJlKChjb250YWluZXJUb1JlbW92ZSkgPT4ge1xyXG4gICAgICBuaC5yZW1vdmUodGhpcy5jb250YWluZXJzLCAoY29udGFpbmVyKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIGNvbnRhaW5lclRvUmVtb3ZlLmluZGV4ID09PSBjb250YWluZXIuaW5zdGFuY2UuaW5kZXg7XHJcbiAgICAgIH0pO1xyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5jb250YWluZXJzLnB1c2goY29udGFpbmVyUmVmKTtcclxuXHJcbiAgICByZXR1cm4gY29udGFpbmVyUmVmO1xyXG4gIH1cclxuXHJcbiAgY2FuQ2xvc2UoaW5kZXg6IG51bWJlciwgY2FuQ2xvc2U6IEZ1bmN0aW9uKTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuICAgIGlmIChpbmRleCA+PSB0aGlzLmNvbnRhaW5lcnMubGVuZ3RoIC0gMSkge1xyXG4gICAgICBpZiAoY2FuQ2xvc2UpIHtcclxuICAgICAgICByZXR1cm4gbmgub2JzZXJ2ZShjYW5DbG9zZShkb2N1bWVudC5hY3RpdmVFbGVtZW50KSk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgcmV0dXJuIG9mKHRydWUpO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gb2YoZmFsc2UpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRDb250YWluZXIodmlld0NvbnRhaW5lclJlZiA6IFZpZXdDb250YWluZXJSZWYpOiBDb21wb25lbnRSZWY8QXNpRHJvcGRvd25Db250YWluZXI+IHtcclxuICAgIC8vIENyZWF0ZSBhbiBBc2lEcm9wZG93bkNvbnRhaW5lclxyXG4gICAgY29uc3QgYXNpRHJvcGRvd25Db250YWluZXJGYWN0b3J5OiBDb21wb25lbnRGYWN0b3J5PEFzaURyb3Bkb3duQ29udGFpbmVyPiA9IHRoaXMucmVzb2x2ZXIucmVzb2x2ZUNvbXBvbmVudEZhY3RvcnkoQXNpRHJvcGRvd25Db250YWluZXIpO1xyXG4gICAgcmV0dXJuIHZpZXdDb250YWluZXJSZWYuY3JlYXRlQ29tcG9uZW50KGFzaURyb3Bkb3duQ29udGFpbmVyRmFjdG9yeSwgMCk7XHJcbiAgfVxyXG59XHJcbiJdfQ==