@@ -12,15 +12,7 @@ import {
12
12
} from '@angular/core' ;
13
13
import { DOCUMENT } from '@angular/common' ;
14
14
import { Observable , Subject } from 'rxjs' ;
15
- import { requestIdleCallbackObservable } from './request-idle-callback' ;
16
- import { switchMapTo , takeUntil } from 'rxjs/operators' ;
17
-
18
- const clickElements = new Set < HTMLElement > ( ) ;
19
-
20
- const eventName : string =
21
- typeof window !== 'undefined' && typeof window [ 'Hammer' ] !== 'undefined'
22
- ? 'tap'
23
- : 'click' ;
15
+ import { takeUntil } from 'rxjs/operators' ;
24
16
25
17
@Directive ( {
26
18
selector : '[mwlClick]'
@@ -35,53 +27,27 @@ export class ClickDirective implements OnInit, OnDestroy {
35
27
constructor (
36
28
private renderer : Renderer2 ,
37
29
private elm : ElementRef < HTMLElement > ,
38
- @Inject ( DOCUMENT ) private document ,
39
- private zone : NgZone
30
+ @Inject ( DOCUMENT ) private document
40
31
) { }
41
32
42
33
ngOnInit ( ) : void {
43
34
if ( ! this . clickListenerDisabled ) {
44
- this . renderer . setAttribute (
45
- this . elm . nativeElement ,
46
- 'data-calendar-clickable' ,
47
- 'true'
48
- ) ;
49
- clickElements . add ( this . elm . nativeElement ) ;
50
-
51
- // issue #942 - lazily initialise all click handlers after initial render as hammerjs is slow
52
- requestIdleCallbackObservable ( )
53
- . pipe (
54
- switchMapTo ( this . listen ( ) ) ,
55
- takeUntil ( this . destroy$ )
56
- )
35
+ this . listen ( )
36
+ . pipe ( takeUntil ( this . destroy$ ) )
57
37
. subscribe ( event => {
58
- // prevent child click events from firing on parent elements that also have click events
59
- let nearestClickableParent = event . target as HTMLElement ;
60
- while (
61
- ! clickElements . has ( nearestClickableParent ) &&
62
- nearestClickableParent !== this . document . body
63
- ) {
64
- nearestClickableParent = nearestClickableParent . parentElement ;
65
- }
66
- const isThisClickableElement =
67
- this . elm . nativeElement === nearestClickableParent ;
68
- if ( isThisClickableElement ) {
69
- this . zone . run ( ( ) => {
70
- this . click . next ( event ) ;
71
- } ) ;
72
- }
38
+ event . stopPropagation ( ) ;
39
+ this . click . emit ( event ) ;
73
40
} ) ;
74
41
}
75
42
}
76
43
77
44
ngOnDestroy ( ) : void {
78
45
this . destroy$ . next ( ) ;
79
- clickElements . delete ( this . elm . nativeElement ) ;
80
46
}
81
47
82
48
private listen ( ) {
83
49
return new Observable < MouseEvent > ( observer => {
84
- return this . renderer . listen ( this . elm . nativeElement , eventName , event => {
50
+ return this . renderer . listen ( this . elm . nativeElement , 'click' , event => {
85
51
observer . next ( event ) ;
86
52
} ) ;
87
53
} ) ;
0 commit comments