Skip to content

Commit 957a6c2

Browse files
committed
fix: unsubscribe from listening once toggletip is destroyed
Signed-off-by: Akshat Patel <[email protected]>
1 parent 2cdd4c0 commit 957a6c2

File tree

1 file changed

+9
-3
lines changed

1 file changed

+9
-3
lines changed

src/toggletip/toggletip.component.ts

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,9 +9,10 @@ import {
99
HostListener,
1010
Input,
1111
NgZone,
12+
OnDestroy,
1213
Renderer2
1314
} from "@angular/core";
14-
import { fromEvent } from "rxjs";
15+
import { fromEvent, Subscription } from "rxjs";
1516
import { PopoverContainer } from "carbon-components-angular/popover";
1617
import { ToggletipButton } from "./toggletip-button.directive";
1718

@@ -34,7 +35,7 @@ import { ToggletipButton } from "./toggletip-button.directive";
3435
</cds-popover-content>
3536
`
3637
})
37-
export class Toggletip extends PopoverContainer implements AfterViewInit {
38+
export class Toggletip extends PopoverContainer implements AfterViewInit, OnDestroy {
3839
static toggletipCounter = 0;
3940

4041
@Input() id = `tooltip-${Toggletip.toggletipCounter++}`;
@@ -45,6 +46,7 @@ export class Toggletip extends PopoverContainer implements AfterViewInit {
4546
@ContentChild(ToggletipButton, { read: ElementRef }) btn!: ElementRef;
4647

4748
documentClick = this.handleFocusOut.bind(this);
49+
private subscription: Subscription;
4850

4951
constructor(
5052
protected hostElement: ElementRef,
@@ -61,7 +63,7 @@ export class Toggletip extends PopoverContainer implements AfterViewInit {
6163
this.initializeReferences();
6264

6365
// Listen for click events on trigger
64-
fromEvent(this.btn.nativeElement, "click")
66+
this.subscription = fromEvent(this.btn.nativeElement, "click")
6567
.subscribe((event: Event) => {
6668
// Add/Remove event listener based on isOpen to improve performance when there
6769
// are a lot of toggletips
@@ -98,6 +100,10 @@ export class Toggletip extends PopoverContainer implements AfterViewInit {
98100
}
99101
}
100102

103+
ngOnDestroy(): void {
104+
this.subscription.unsubscribe();
105+
}
106+
101107
private handleExpansion(state = false, event: Event) {
102108
this.handleChange(state, event);
103109
if (this.btn) {

0 commit comments

Comments
 (0)