@@ -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" ;
1516import { PopoverContainer } from "carbon-components-angular/popover" ;
1617import { 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