Browse Source

UI: Improve popover to not close when top overlay is clicked.

pull/6126/head
Igor Kulikov 5 years ago
parent
commit
8a868c1e3d
  1. 19
      ui-ngx/src/app/shared/components/popover.component.ts

19
ui-ngx/src/app/shared/components/popover.component.ts

@ -558,7 +558,9 @@ export class TbPopoverComponent implements OnDestroy, OnInit {
onClickOutside(event: MouseEvent): void {
if (this.tbHideOnClickOutside && !this.origin.elementRef.nativeElement.contains(event.target) && this.tbTrigger !== null) {
this.hide();
if (!this.isTopOverlay(event.target as Element)) {
this.hide();
}
}
}
@ -571,6 +573,21 @@ export class TbPopoverComponent implements OnDestroy, OnInit {
this.tbAnimationDone.next();
}
private isTopOverlay(targetElement: Element): boolean {
const target = $(targetElement);
if (target.parents('.cdk-overlay-container').length) {
let targetOverlayContainerChild: JQuery<Element>;
if (target.hasClass('cdk-overlay-backdrop')) {
targetOverlayContainerChild = target;
} else {
targetOverlayContainerChild = target.parents('.cdk-overlay-pane').parent();
}
const currentOverlayContainerChild = $(this.overlay.overlayRef.overlayElement).parent();
return targetOverlayContainerChild.index() > currentOverlayContainerChild.index();
}
return false;
}
private updateVisibilityByContent(): void {
if (this.isEmpty()) {
this.hide();

Loading…
Cancel
Save