@@ -123,7 +123,7 @@ export abstract class ViewCommon extends ViewBase implements ViewDefinition {
123
123
_setMinWidthNative : ( value : CoreTypes . LengthType ) => void ;
124
124
_setMinHeightNative : ( value : CoreTypes . LengthType ) => void ;
125
125
126
- public _gestureObservers = { } ;
126
+ public readonly _gestureObservers = { } as Record < GestureTypes , Array < GesturesObserver > > ;
127
127
128
128
_androidContentDescriptionUpdated ?: boolean ;
129
129
@@ -177,7 +177,7 @@ export abstract class ViewCommon extends ViewBase implements ViewDefinition {
177
177
178
178
onLoaded ( ) {
179
179
if ( ! this . isLoaded ) {
180
- const hasTap = this . hasListeners ( 'tap' ) || this . hasListeners ( 'tapChange' ) || this . getGestureObservers ( GestureTypes . tap ) ;
180
+ const hasTap = this . hasListeners ( 'tap' ) || this . hasListeners ( 'tapChange' ) || ! ! this . getGestureObservers ( GestureTypes . tap ) ;
181
181
const enableTapAnimations = TouchManager . enableGlobalTapAnimations && hasTap ;
182
182
if ( ! this . ignoreTouchAnimation && ( this . touchAnimation || enableTapAnimations ) ) {
183
183
TouchManager . addAnimations ( this ) ;
@@ -286,62 +286,52 @@ export abstract class ViewCommon extends ViewBase implements ViewDefinition {
286
286
this . _gestureObservers [ type ] . push ( gestureObserve ( this , type , callback , thisArg ) ) ;
287
287
}
288
288
289
- public getGestureObservers ( type : GestureTypes ) : Array < GesturesObserver > {
289
+ public getGestureObservers ( type : GestureTypes ) : Array < GesturesObserver > | undefined {
290
290
return this . _gestureObservers [ type ] ;
291
291
}
292
292
293
293
public addEventListener ( arg : string | GestureTypes , callback : ( data : EventData ) => void , thisArg ?: any ) {
294
- if ( typeof arg === 'string' ) {
295
- arg = getEventOrGestureName ( arg ) ;
294
+ if ( typeof arg === 'number' ) {
295
+ this . _observe ( arg , callback as unknown as ( data : GestureEventData ) => void , thisArg ) ;
296
+ return ;
297
+ }
296
298
297
- const gesture = gestureFromString ( arg ) ;
298
- if ( gesture && ! this . _isEvent ( arg ) ) {
299
- this . _observe ( gesture , callback as unknown as ( data : GestureEventData ) => void , thisArg ) ;
300
- } else {
301
- const events = arg . split ( ',' ) ;
302
- if ( events . length > 0 ) {
303
- for ( let i = 0 ; i < events . length ; i ++ ) {
304
- const evt = events [ i ] . trim ( ) ;
305
- const gst = gestureFromString ( evt ) ;
306
- if ( gst && ! this . _isEvent ( arg ) ) {
307
- this . _observe ( gst , callback as unknown as ( data : GestureEventData ) => void , thisArg ) ;
308
- } else {
309
- super . addEventListener ( evt , callback , thisArg ) ;
310
- }
311
- }
312
- } else {
313
- super . addEventListener ( arg , callback , thisArg ) ;
314
- }
315
- }
316
- } else if ( typeof arg === 'number' ) {
317
- this . _observe ( < GestureTypes > arg , callback as unknown as ( data : GestureEventData ) => void , thisArg ) ;
299
+ // Normalize "ontap" -> "tap"
300
+ const normalizedName = getEventOrGestureName ( arg ) ;
301
+
302
+ // Coerce "tap" -> GestureTypes.tap
303
+ // Coerce "loaded" -> undefined
304
+ const gesture : GestureTypes | undefined = gestureFromString ( normalizedName ) ;
305
+
306
+ // If it's a gesture (and this Observable declares e.g. `static tapEvent`)
307
+ if ( gesture && ! this . _isEvent ( normalizedName ) ) {
308
+ this . _observe ( gesture , callback as unknown as ( data : GestureEventData ) => void , thisArg ) ;
309
+ return ;
318
310
}
311
+
312
+ super . addEventListener ( normalizedName , callback , thisArg ) ;
319
313
}
320
314
321
315
public removeEventListener ( arg : string | GestureTypes , callback ?: ( data : EventData ) => void , thisArg ?: any ) {
322
- if ( typeof arg === 'string' ) {
323
- const gesture = gestureFromString ( arg ) ;
324
- if ( gesture && ! this . _isEvent ( arg ) ) {
325
- this . _disconnectGestureObservers ( gesture ) ;
326
- } else {
327
- const events = arg . split ( ',' ) ;
328
- if ( events . length > 0 ) {
329
- for ( let i = 0 ; i < events . length ; i ++ ) {
330
- const evt = events [ i ] . trim ( ) ;
331
- const gst = gestureFromString ( evt ) ;
332
- if ( gst && ! this . _isEvent ( arg ) ) {
333
- this . _disconnectGestureObservers ( gst ) ;
334
- } else {
335
- super . removeEventListener ( evt , callback , thisArg ) ;
336
- }
337
- }
338
- } else {
339
- super . removeEventListener ( arg , callback , thisArg ) ;
340
- }
341
- }
342
- } else if ( typeof arg === 'number' ) {
343
- this . _disconnectGestureObservers ( < GestureTypes > arg ) ;
316
+ if ( typeof arg === 'number' ) {
317
+ this . _disconnectGestureObservers ( arg ) ;
318
+ return ;
344
319
}
320
+
321
+ // Normalize "ontap" -> "tap"
322
+ const normalizedName = getEventOrGestureName ( arg ) ;
323
+
324
+ // Coerce "tap" -> GestureTypes.tap
325
+ // Coerce "loaded" -> undefined
326
+ const gesture : GestureTypes | undefined = gestureFromString ( normalizedName ) ;
327
+
328
+ // If it's a gesture (and this Observable declares e.g. `static tapEvent`)
329
+ if ( gesture && ! this . _isEvent ( normalizedName ) ) {
330
+ this . _disconnectGestureObservers ( gesture ) ;
331
+ return ;
332
+ }
333
+
334
+ super . removeEventListener ( normalizedName , callback , thisArg ) ;
345
335
}
346
336
347
337
public onBackPressed ( ) : boolean {
@@ -379,7 +369,7 @@ export abstract class ViewCommon extends ViewBase implements ViewDefinition {
379
369
const firstArgument = args [ 0 ] ;
380
370
const view = firstArgument instanceof ViewCommon ? firstArgument : < ViewCommon > Builder . createViewFromEntry ( {
381
371
moduleName : firstArgument ,
382
- } ) ;
372
+ } ) ;
383
373
384
374
return { view, options } ;
385
375
}
@@ -501,10 +491,12 @@ export abstract class ViewCommon extends ViewBase implements ViewDefinition {
501
491
502
492
private _disconnectGestureObservers ( type : GestureTypes ) : void {
503
493
const observers = this . getGestureObservers ( type ) ;
504
- if ( observers ) {
505
- for ( let i = 0 ; i < observers . length ; i ++ ) {
506
- observers [ i ] . disconnect ( ) ;
507
- }
494
+ if ( ! observers ) {
495
+ return ;
496
+ }
497
+
498
+ for ( const observer of observers ) {
499
+ observer . disconnect ( ) ;
508
500
}
509
501
}
510
502
0 commit comments