11import Types , { EventType , ProductActionType , PromotionActionType } from './types' ;
22import Constants from './constants' ;
3- import { IEvents } from './events.interfaces' ;
3+ import { IEvents , TrackingCallback } from './events.interfaces' ;
44import { IMParticleWebSDKInstance } from './mp-instance' ;
55import {
66 BaseEvent ,
@@ -42,7 +42,7 @@ export default function Events(
4242 }
4343 } ;
4444
45- this . startTracking = function ( callback : ( ( position ?: GeolocationPosition | { coords : { latitude : number | string ; longitude : number | string } } ) => void ) | null ) : void {
45+ this . startTracking = function ( callback : TrackingCallback ) : void {
4646 if ( mpInstance . _Store . isTracking ) {
4747 const position = {
4848 coords : {
@@ -81,7 +81,7 @@ export default function Events(
8181 }
8282
8383 function triggerCallback (
84- callback : ( ( position ?: GeolocationPosition | { coords : { latitude : number | string ; longitude : number | string } } ) => void ) | null ,
84+ callback : TrackingCallback ,
8585 position ?: GeolocationPosition | { coords : { latitude : number | string ; longitude : number | string } }
8686 ) : void {
8787 if ( callback ) {
@@ -194,7 +194,7 @@ export default function Events(
194194 } ) ;
195195
196196 if ( event ) {
197- // TODO(SDKE-1106 ): Remove `as Function` casts when ecommerce.js is migrated to TS
197+ // TODO(https://go/j/ SDKE-1108 ): Remove `as Function` casts when ecommerce.js is migrated to TS
198198 event . EventCategory = ( mpInstance . _Ecommerce . convertProductActionToEventType as Function ) (
199199 productActionType
200200 ) ;
@@ -328,13 +328,14 @@ export default function Events(
328328 if ( event ) {
329329 event . EventName += 'Impression' ;
330330 event . EventCategory = Types . CommerceEventType . ProductImpression ;
331- const rawList = Array . isArray ( impression )
331+ // https://go/j/SDKE-1199
332+ const impressionList : ( SDKImpression | SDKProductImpression ) [ ] = Array . isArray ( impression )
332333 ? impression
333334 : [ impression ] ;
334335
335336 event . ProductImpressions = [ ] ;
336337
337- rawList . forEach ( function ( item ) {
338+ impressionList . forEach ( function ( item ) {
338339 if ( 'Name' in item ) {
339340 const imp = item as SDKImpression ;
340341 event . ProductImpressions . push ( {
@@ -412,14 +413,15 @@ export default function Events(
412413 data : ( ( element : HTMLLinkElement | HTMLFormElement ) => SDKEventAttrs ) | SDKEventAttrs ,
413414 eventType : valueof < typeof EventType >
414415 ) : void {
415- let elements : ArrayLike < Element > | Element [ ] = [ ] ,
416- handler = ( e : Event ) : void => {
417- const el = element as DOMHandlerElement ;
416+ let elements : ArrayLike < Element > | Element [ ] = [ ] ;
417+ let element : DOMHandlerElement ;
418+ let elementIndex : number ;
419+ const handler = ( e : Event ) : void => {
418420 const timeoutHandler = function ( ) : void {
419- if ( el . href ) {
420- globalThis . location . href = el . href ;
421- } else if ( el . submit ) {
422- el . submit ( ) ;
421+ if ( element . href ) {
422+ globalThis . location . href = element . href ;
423+ } else if ( element . submit ) {
424+ element . submit ( ) ;
423425 }
424426 } ;
425427
@@ -431,16 +433,16 @@ export default function Events(
431433 messageType : Types . MessageType . PageEvent ,
432434 name :
433435 typeof eventName === 'function'
434- ? eventName ( el as HTMLLinkElement )
436+ ? eventName ( element as HTMLLinkElement )
435437 : eventName ,
436- data : typeof data === 'function' ? data ( el as HTMLLinkElement ) : data ,
438+ data : typeof data === 'function' ? data ( element as HTMLLinkElement ) : data ,
437439 eventType : ( eventType || Types . EventType . Other ) as number ,
438440 } ) ;
439441
440442 // TODO: Handle middle-clicks and special keys (ctrl, alt, etc)
441443 if (
442- ( el . href && el . target !== '_blank' ) ||
443- el . submit
444+ ( element . href && element . target !== '_blank' ) ||
445+ element . submit
444446 ) {
445447 // Give xmlhttprequest enough time to execute before navigating a link or submitting form
446448
@@ -455,9 +457,7 @@ export default function Events(
455457 mpInstance . _Store . SDKConfig . timeout
456458 ) ;
457459 }
458- } ,
459- element : Element ,
460- i : number ;
460+ } ;
461461
462462 if ( ! selector ) {
463463 mpInstance . Logger . error ( "Can't bind event, selector is required" ) ;
@@ -480,16 +480,15 @@ export default function Events(
480480 ', attaching event handlers'
481481 ) ;
482482
483- for ( i = 0 ; i < elements . length ; i ++ ) {
484- element = elements [ i ] ;
485- const el = element as DOMHandlerElement ;
483+ for ( elementIndex = 0 ; elementIndex < elements . length ; elementIndex ++ ) {
484+ element = elements [ elementIndex ] as DOMHandlerElement ;
486485
487- if ( el . addEventListener ) {
488- el . addEventListener ( domEvent , handler , false ) ;
489- } else if ( el . attachEvent ) {
490- el . attachEvent ( 'on' + domEvent , handler ) ;
486+ if ( element . addEventListener ) {
487+ element . addEventListener ( domEvent , handler , false ) ;
488+ } else if ( element . attachEvent ) {
489+ element . attachEvent ( 'on' + domEvent , handler ) ;
491490 } else {
492- el [ 'on' + domEvent ] = handler ;
491+ element [ 'on' + domEvent ] = handler ;
493492 }
494493 }
495494 } else {
0 commit comments