diff --git a/frontend/code/components/pointerEventListener.ts b/frontend/code/components/pointerEventListener.ts index d6c044c0..3f27a464 100644 --- a/frontend/code/components/pointerEventListener.ts +++ b/frontend/code/components/pointerEventListener.ts @@ -69,7 +69,7 @@ export class PointerEventListenerComponent extends ComponentBase this._onClick.bind(this) + this._onClick ); } @@ -84,14 +84,10 @@ export class PointerEventListenerComponent extends ComponentBase 0, + reportPointerDown.length > 0, captureEvents, this._onPointerDownBound, - () => (e: PointerEvent) => { - if (eventMatchesButton(e, reportPointerDown)) { - this._sendEventToBackend("pointerDown", e, false); - } - } + this._onPointerDown ); } @@ -106,14 +102,10 @@ export class PointerEventListenerComponent extends ComponentBase 0, + reportPointerUp.length > 0, captureEvents, this._onPointerUpBound, - () => (e: PointerEvent) => { - if (eventMatchesButton(e, reportPointerUp)) { - this._sendEventToBackend("pointerUp", e, false); - } - } + this._onPointerUp ); } @@ -131,9 +123,7 @@ export class PointerEventListenerComponent extends ComponentBase (e: PointerEvent) => { - this._sendEventToBackend("pointerMove", e, true); - } + this._onPointerMove ); } @@ -151,9 +141,7 @@ export class PointerEventListenerComponent extends ComponentBase (e: PointerEvent) => { - this._sendEventToBackend("pointerEnter", e, false); - } + this._onPointerEnter ); } @@ -171,31 +159,29 @@ export class PointerEventListenerComponent extends ComponentBase (e: PointerEvent) => { - this._sendEventToBackend("pointerLeave", e, false); - } + this._onPointerLeave ); } if ( - deltaState.reportDragStart || - deltaState.reportDragMove || - deltaState.reportDragEnd || + deltaState.reportDragStart !== undefined || + deltaState.reportDragMove !== undefined || + deltaState.reportDragEnd !== undefined || deltaState.capture_events !== undefined ) { - // Remove existing drag handler if it exists + let reportDrag = + (deltaState.reportDragStart ?? this.state.reportDragStart) || + (deltaState.reportDragMove ?? this.state.reportDragMove) || + (deltaState.reportDragEnd ?? this.state.reportDragEnd); + let captureEvents = + deltaState.capture_events ?? this.state.capture_events; + if (this._dragHandler !== null) { this._dragHandler.disconnect(); + this._dragHandler = null; } - if ( - deltaState.reportDragStart || - deltaState.reportDragMove || - deltaState.reportDragEnd - ) { - // Create new drag handler with current capture setting - const captureEvents = - deltaState.capture_events ?? this.state.capture_events; + if (reportDrag) { this._dragHandler = this.addDragHandler({ element: this.element, onStart: this._onDragStart.bind(this), @@ -203,8 +189,6 @@ export class PointerEventListenerComponent extends ComponentBase void) | null, - handlerFactory: () => (e: T) => void + callbackMethod: (this: PointerEventListenerComponent, e: T) => void ): ((e: T) => void) | null { // Remove existing listener if it exists if (currentHandler !== null) { - const oldOptions = this.state.capture_events - ? { capture: true } - : {}; - this.element.removeEventListener( - eventName, - currentHandler, - oldOptions as AddEventListenerOptions - ); + this.element.removeEventListener(eventName, currentHandler, { + capture: this.state.capture_events, + }); } - if (shouldInstall) { - // Install new listener with current capture setting - const newHandler = handlerFactory(); - const options = captureEvents ? { capture: true } : {}; - this.element.addEventListener(eventName, newHandler, options); - return newHandler; - } else { + if (!shouldInstall) { return null; } + + // Install new listener with current capture setting + const newHandler = callbackMethod.bind(this); + this.element.addEventListener(eventName, newHandler, { + capture: captureEvents, + }); + return newHandler; } }