UNPKG

ngx-bootstrap

Version:
74 lines 3.06 kB
import { ChangeDetectionStrategy, ChangeDetectorRef, Component, ElementRef, Renderer2 } from '@angular/core'; import { BsDropdownState } from './bs-dropdown.state'; import { isBs3 } from 'ngx-bootstrap/utils'; import { dropdownAnimation } from './dropdown-animations'; import { AnimationBuilder } from '@angular/animations'; // todo: revert ngClass to [class] when false positive angular-cli issue is fixed // [class.dropdown]="direction === 'down'"--> export class BsDropdownContainerComponent { constructor(_state, cd, _renderer, _element, _builder) { this._state = _state; this.cd = cd; this._renderer = _renderer; this._element = _element; this.isOpen = false; this._factoryDropDownAnimation = _builder.build(dropdownAnimation); this._subscription = _state.isOpenChange.subscribe((value) => { this.isOpen = value; const dropdown = this._element.nativeElement.querySelector('.dropdown-menu'); this._renderer.addClass(this._element.nativeElement.querySelector('div'), 'open'); if (dropdown && !isBs3()) { this._renderer.addClass(dropdown, 'show'); if (dropdown.classList.contains('dropdown-menu-right')) { this._renderer.setStyle(dropdown, 'left', 'auto'); this._renderer.setStyle(dropdown, 'right', '0'); } if (this.direction === 'up') { this._renderer.setStyle(dropdown, 'top', 'auto'); this._renderer.setStyle(dropdown, 'transform', 'translateY(-101%)'); } } if (dropdown && this._state.isAnimated) { this._factoryDropDownAnimation.create(dropdown) .play(); } this.cd.markForCheck(); this.cd.detectChanges(); }); } get direction() { return this._state.direction; } /** @internal */ _contains(el) { return this._element.nativeElement.contains(el); } ngOnDestroy() { this._subscription.unsubscribe(); } } BsDropdownContainerComponent.decorators = [ { type: Component, args: [{ selector: 'bs-dropdown-container', changeDetection: ChangeDetectionStrategy.OnPush, // eslint-disable-next-line @angular-eslint/no-host-metadata-property host: { style: 'display:block;position: absolute;z-index: 1040' }, template: ` <div [class.dropup]="direction === 'up'" [ngClass]="{dropdown: direction === 'down'}" [class.show]="isOpen" [class.open]="isOpen"><ng-content></ng-content> </div> ` },] } ]; BsDropdownContainerComponent.ctorParameters = () => [ { type: BsDropdownState }, { type: ChangeDetectorRef }, { type: Renderer2 }, { type: ElementRef }, { type: AnimationBuilder } ]; //# sourceMappingURL=bs-dropdown-container.component.js.map