Skip to content

Commit 6dd2c60

Browse files
committed
fix(material/datepicker): set explicit event options (#27082)
Fixes that the date range picker might log a warning, because we aren't setting some events as explicitly active. Fixes #27072. (cherry picked from commit fc919ce)
1 parent 59174c1 commit 6dd2c60

File tree

1 file changed

+37
-15
lines changed

1 file changed

+37
-15
lines changed

src/material/datepicker/calendar-body.ts

Lines changed: 37 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
* found in the LICENSE file at https://angular.io/license
77
*/
88

9-
import {Platform} from '@angular/cdk/platform';
9+
import {Platform, normalizePassiveListenerOptions} from '@angular/cdk/platform';
1010
import {
1111
ChangeDetectionStrategy,
1212
Component,
@@ -57,6 +57,21 @@ export interface MatCalendarUserEvent<D> {
5757

5858
let calendarBodyId = 1;
5959

60+
/** Event options that can be used to bind an active, capturing event. */
61+
const activeCapturingEventOptions = normalizePassiveListenerOptions({
62+
passive: false,
63+
capture: true,
64+
});
65+
66+
/** Event options that can be used to bind a passive, capturing event. */
67+
const passiveCapturingEventOptions = normalizePassiveListenerOptions({
68+
passive: true,
69+
capture: true,
70+
});
71+
72+
/** Event options that can be used to bind a passive, non-capturing event. */
73+
const passiveEventOptions = normalizePassiveListenerOptions({passive: true});
74+
6075
/**
6176
* An internal component used to display calendar data in a table.
6277
* @docs-private
@@ -174,13 +189,17 @@ export class MatCalendarBody<D = any> implements OnChanges, OnDestroy, AfterView
174189
constructor(private _elementRef: ElementRef<HTMLElement>, private _ngZone: NgZone) {
175190
_ngZone.runOutsideAngular(() => {
176191
const element = _elementRef.nativeElement;
177-
element.addEventListener('mouseenter', this._enterHandler, true);
178-
element.addEventListener('touchmove', this._touchmoveHandler, true);
179-
element.addEventListener('focus', this._enterHandler, true);
180-
element.addEventListener('mouseleave', this._leaveHandler, true);
181-
element.addEventListener('blur', this._leaveHandler, true);
182-
element.addEventListener('mousedown', this._mousedownHandler);
183-
element.addEventListener('touchstart', this._mousedownHandler);
192+
193+
// `touchmove` is active since we need to call `preventDefault`.
194+
element.addEventListener('touchmove', this._touchmoveHandler, activeCapturingEventOptions);
195+
196+
element.addEventListener('mouseenter', this._enterHandler, passiveCapturingEventOptions);
197+
element.addEventListener('focus', this._enterHandler, passiveCapturingEventOptions);
198+
element.addEventListener('mouseleave', this._leaveHandler, passiveCapturingEventOptions);
199+
element.addEventListener('blur', this._leaveHandler, passiveCapturingEventOptions);
200+
201+
element.addEventListener('mousedown', this._mousedownHandler, passiveEventOptions);
202+
element.addEventListener('touchstart', this._mousedownHandler, passiveEventOptions);
184203

185204
if (this._platform.isBrowser) {
186205
window.addEventListener('mouseup', this._mouseupHandler);
@@ -232,13 +251,16 @@ export class MatCalendarBody<D = any> implements OnChanges, OnDestroy, AfterView
232251

233252
ngOnDestroy() {
234253
const element = this._elementRef.nativeElement;
235-
element.removeEventListener('mouseenter', this._enterHandler, true);
236-
element.removeEventListener('touchmove', this._touchmoveHandler, true);
237-
element.removeEventListener('focus', this._enterHandler, true);
238-
element.removeEventListener('mouseleave', this._leaveHandler, true);
239-
element.removeEventListener('blur', this._leaveHandler, true);
240-
element.removeEventListener('mousedown', this._mousedownHandler);
241-
element.removeEventListener('touchstart', this._mousedownHandler);
254+
255+
element.removeEventListener('touchmove', this._touchmoveHandler, activeCapturingEventOptions);
256+
257+
element.removeEventListener('mouseenter', this._enterHandler, passiveCapturingEventOptions);
258+
element.removeEventListener('focus', this._enterHandler, passiveCapturingEventOptions);
259+
element.removeEventListener('mouseleave', this._leaveHandler, passiveCapturingEventOptions);
260+
element.removeEventListener('blur', this._leaveHandler, passiveCapturingEventOptions);
261+
262+
element.removeEventListener('mousedown', this._mousedownHandler, passiveEventOptions);
263+
element.removeEventListener('touchstart', this._mousedownHandler, passiveEventOptions);
242264

243265
if (this._platform.isBrowser) {
244266
window.removeEventListener('mouseup', this._mouseupHandler);

0 commit comments

Comments
 (0)