import { ChangeDetectionStrategy, ChangeDetectorRef, Component, ElementRef, OnDestroy, Renderer } from '@angular/core'; import { BsDropdownState } from './bs-dropdown.state'; @Component({ selector: 'bs-dropdown-container', changeDetection: ChangeDetectionStrategy.OnPush, host: { style: 'display:block;position: absolute;' }, template: `
` }) export class BsDropdownContainerComponent implements OnDestroy { isOpen = false; get direction(): 'down' | 'up' { return this._state.direction; } private _subscription: any; constructor(private _state: BsDropdownState, private cd: ChangeDetectorRef, private _renderer: Renderer, _element: ElementRef) { this._subscription = _state.isOpenChange.subscribe((value: boolean) => { this.isOpen = value; const dropdown = _element.nativeElement.querySelector('.dropdown-menu'); if (dropdown) { this._renderer.setElementClass(dropdown, 'show', true); if (dropdown.classList.contains('dropdown-menu-right')) { this._renderer.setElementStyle(dropdown, 'left', 'auto'); this._renderer.setElementStyle(dropdown, 'right', '0'); } if (this.direction === 'up') { this._renderer.setElementStyle(dropdown, 'top', 'auto'); this._renderer.setElementStyle(dropdown, 'transform', 'translateY(-101%)'); } } this.cd.markForCheck(); this.cd.detectChanges(); }); } ngOnDestroy(): void { this._subscription.unsubscribe(); } }