66 * found in the LICENSE file at https://angular.dev/license
77 */
88
9- import { AfterViewInit , Directive , ElementRef , OnDestroy , NgZone } from '@angular/core' ;
9+ import {
10+ AfterViewInit ,
11+ Directive ,
12+ ElementRef ,
13+ OnDestroy ,
14+ NgZone ,
15+ Renderer2 ,
16+ inject ,
17+ } from '@angular/core' ;
1018import { coerceCssPixelValue } from '@angular/cdk/coercion' ;
1119import { Directionality } from '@angular/cdk/bidi' ;
1220import { ESCAPE } from '@angular/cdk/keycodes' ;
1321import { CdkColumnDef , _CoalescedStyleScheduler } from '@angular/cdk/table' ;
14- import { fromEvent , Subject , merge } from 'rxjs' ;
22+ import { Subject , merge , Observable } from 'rxjs' ;
1523import {
1624 distinctUntilChanged ,
1725 filter ,
@@ -37,6 +45,7 @@ import {ResizeRef} from './resize-ref';
3745 */
3846@Directive ( )
3947export abstract class ResizeOverlayHandle implements AfterViewInit , OnDestroy {
48+ private _renderer = inject ( Renderer2 ) ;
4049 protected readonly destroyed = new Subject < void > ( ) ;
4150
4251 protected abstract readonly columnDef : CdkColumnDef ;
@@ -62,11 +71,11 @@ export abstract class ResizeOverlayHandle implements AfterViewInit, OnDestroy {
6271
6372 private _listenForMouseEvents ( ) {
6473 this . ngZone . runOutsideAngular ( ( ) => {
65- fromEvent < MouseEvent > ( this . elementRef . nativeElement ! , 'mouseenter' )
74+ this . _observableFromEvent < MouseEvent > ( this . elementRef . nativeElement ! , 'mouseenter' )
6675 . pipe ( mapTo ( this . resizeRef . origin . nativeElement ! ) , takeUntil ( this . destroyed ) )
6776 . subscribe ( cell => this . eventDispatcher . headerCellHovered . next ( cell ) ) ;
6877
69- fromEvent < MouseEvent > ( this . elementRef . nativeElement ! , 'mouseleave' )
78+ this . _observableFromEvent < MouseEvent > ( this . elementRef . nativeElement ! , 'mouseleave' )
7079 . pipe (
7180 map (
7281 event =>
@@ -76,7 +85,7 @@ export abstract class ResizeOverlayHandle implements AfterViewInit, OnDestroy {
7685 )
7786 . subscribe ( cell => this . eventDispatcher . headerCellHovered . next ( cell ) ) ;
7887
79- fromEvent < MouseEvent > ( this . elementRef . nativeElement ! , 'mousedown' )
88+ this . _observableFromEvent < MouseEvent > ( this . elementRef . nativeElement ! , 'mousedown' )
8089 . pipe ( takeUntil ( this . destroyed ) )
8190 . subscribe ( mousedownEvent => {
8291 this . _dragStarted ( mousedownEvent ) ;
@@ -90,9 +99,9 @@ export abstract class ResizeOverlayHandle implements AfterViewInit, OnDestroy {
9099 return ;
91100 }
92101
93- const mouseup = fromEvent < MouseEvent > ( this . document , 'mouseup' ) ;
94- const mousemove = fromEvent < MouseEvent > ( this . document , 'mousemove' ) ;
95- const escape = fromEvent < KeyboardEvent > ( this . document , 'keyup' ) . pipe (
102+ const mouseup = this . _observableFromEvent < MouseEvent > ( this . document , 'mouseup' ) ;
103+ const mousemove = this . _observableFromEvent < MouseEvent > ( this . document , 'mousemove' ) ;
104+ const escape = this . _observableFromEvent < KeyboardEvent > ( this . document , 'keyup' ) . pipe (
96105 filter ( event => event . keyCode === ESCAPE ) ,
97106 ) ;
98107
@@ -233,4 +242,15 @@ export abstract class ResizeOverlayHandle implements AfterViewInit, OnDestroy {
233242 }
234243 } ) ;
235244 }
245+
246+ private _observableFromEvent < T extends Event > ( element : Element | Document , name : string ) {
247+ return new Observable < T > ( subscriber => {
248+ const handler = ( event : T ) => subscriber . next ( event ) ;
249+ const cleanup = this . _renderer . listen ( element , name , handler ) ;
250+ return ( ) => {
251+ cleanup ( ) ;
252+ subscriber . complete ( ) ;
253+ } ;
254+ } ) ;
255+ }
236256}
0 commit comments