6
6
* found in the LICENSE file at https://angular.dev/license
7
7
*/
8
8
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' ;
10
18
import { coerceCssPixelValue } from '@angular/cdk/coercion' ;
11
19
import { Directionality } from '@angular/cdk/bidi' ;
12
20
import { ESCAPE } from '@angular/cdk/keycodes' ;
13
21
import { CdkColumnDef , _CoalescedStyleScheduler } from '@angular/cdk/table' ;
14
- import { fromEvent , Subject , merge } from 'rxjs' ;
22
+ import { Subject , merge , Observable } from 'rxjs' ;
15
23
import {
16
24
distinctUntilChanged ,
17
25
filter ,
@@ -37,6 +45,7 @@ import {ResizeRef} from './resize-ref';
37
45
*/
38
46
@Directive ( )
39
47
export abstract class ResizeOverlayHandle implements AfterViewInit , OnDestroy {
48
+ private _renderer = inject ( Renderer2 ) ;
40
49
protected readonly destroyed = new Subject < void > ( ) ;
41
50
42
51
protected abstract readonly columnDef : CdkColumnDef ;
@@ -62,11 +71,11 @@ export abstract class ResizeOverlayHandle implements AfterViewInit, OnDestroy {
62
71
63
72
private _listenForMouseEvents ( ) {
64
73
this . ngZone . runOutsideAngular ( ( ) => {
65
- fromEvent < MouseEvent > ( this . elementRef . nativeElement ! , 'mouseenter' )
74
+ this . _observableFromEvent < MouseEvent > ( this . elementRef . nativeElement ! , 'mouseenter' )
66
75
. pipe ( mapTo ( this . resizeRef . origin . nativeElement ! ) , takeUntil ( this . destroyed ) )
67
76
. subscribe ( cell => this . eventDispatcher . headerCellHovered . next ( cell ) ) ;
68
77
69
- fromEvent < MouseEvent > ( this . elementRef . nativeElement ! , 'mouseleave' )
78
+ this . _observableFromEvent < MouseEvent > ( this . elementRef . nativeElement ! , 'mouseleave' )
70
79
. pipe (
71
80
map (
72
81
event =>
@@ -76,7 +85,7 @@ export abstract class ResizeOverlayHandle implements AfterViewInit, OnDestroy {
76
85
)
77
86
. subscribe ( cell => this . eventDispatcher . headerCellHovered . next ( cell ) ) ;
78
87
79
- fromEvent < MouseEvent > ( this . elementRef . nativeElement ! , 'mousedown' )
88
+ this . _observableFromEvent < MouseEvent > ( this . elementRef . nativeElement ! , 'mousedown' )
80
89
. pipe ( takeUntil ( this . destroyed ) )
81
90
. subscribe ( mousedownEvent => {
82
91
this . _dragStarted ( mousedownEvent ) ;
@@ -90,9 +99,9 @@ export abstract class ResizeOverlayHandle implements AfterViewInit, OnDestroy {
90
99
return ;
91
100
}
92
101
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 (
96
105
filter ( event => event . keyCode === ESCAPE ) ,
97
106
) ;
98
107
@@ -233,4 +242,15 @@ export abstract class ResizeOverlayHandle implements AfterViewInit, OnDestroy {
233
242
}
234
243
} ) ;
235
244
}
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
+ }
236
256
}
0 commit comments