ngx-bootstrap
Version:
Angular Bootstrap
74 lines • 3.06 kB
JavaScript
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