UNPKG

@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
/** * @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==