Skip to content

Commit 51b50d3

Browse files
committed
fix: Add event to document only when popover is open
Signed-off-by: Akshat Patel <[email protected]>
1 parent fe84141 commit 51b50d3

File tree

1 file changed

+18
-2
lines changed

1 file changed

+18
-2
lines changed

src/toggletip/toggletip.component.ts

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,8 @@ export class Toggletip extends PopoverContainer implements AfterViewInit {
3131

3232
@ContentChild(ToggletipButton, { read: ElementRef }) btn!: ElementRef;
3333

34+
documentClick = this.handleFocusOut.bind(this);
35+
3436
constructor(private hostElement: ElementRef, private renderer: Renderer2) {
3537
super();
3638
this.highContrast = true;
@@ -40,7 +42,22 @@ export class Toggletip extends PopoverContainer implements AfterViewInit {
4042
ngAfterViewInit(): void {
4143
// Listen for click events on trigger
4244
fromEvent(this.btn.nativeElement, "click")
43-
.subscribe((event: Event) => this.handleExpansion(!this.isOpen, event));
45+
.subscribe((event: Event) => {
46+
// Add/Remove event listener based on isOpen to improve performance when there
47+
// are a lot of toggletips
48+
if (this.isOpen) {
49+
document.removeEventListener("click", this.documentClick);
50+
} else {
51+
document.addEventListener("click", this.documentClick);
52+
}
53+
54+
this.handleExpansion(!this.isOpen, event);
55+
});
56+
57+
// Toggletip is open on initial render, add 'click' event listener to document so users can close
58+
if (this.isOpen) {
59+
document.addEventListener("click", this.documentClick);
60+
}
4461

4562
if (this.btn) {
4663
this.renderer.setAttribute(this.btn.nativeElement, "aria-controls", this.id);
@@ -55,7 +72,6 @@ export class Toggletip extends PopoverContainer implements AfterViewInit {
5572
}
5673
}
5774

58-
@HostListener("document:click", ["$event"])
5975
handleFocusOut(event) {
6076
if (!this.hostElement.nativeElement.contains(event.target)) {
6177
this.handleExpansion(false, event);

0 commit comments

Comments
 (0)