@@ -86,68 +86,50 @@ export class DataLayer {
8686 return "" ;
8787 }
8888 onLoad ( ) {
89+ // Collect all data layer events and variables to push at once
90+ const dataLayerData = { } ;
91+ const dataLayerEvents = [ ] ;
8992 if ( ENGrid . getGiftProcess ( ) ) {
9093 this . logger . log ( "EN_SUCCESSFUL_DONATION" ) ;
91- this . dataLayer . push ( {
92- event : "EN_SUCCESSFUL_DONATION" ,
93- } ) ;
94+ dataLayerEvents . push ( "EN_SUCCESSFUL_DONATION" ) ;
9495 this . addEndOfGiftProcessEventsToDataLayer ( ) ;
9596 }
9697 else {
9798 this . logger . log ( "EN_PAGE_VIEW" ) ;
98- this . dataLayer . push ( {
99- event : "EN_PAGE_VIEW" ,
100- } ) ;
99+ dataLayerEvents . push ( "EN_PAGE_VIEW" ) ;
101100 }
102101 if ( window . pageJson ) {
103102 const pageJson = window . pageJson ;
104103 for ( const property in pageJson ) {
105104 if ( ! Number . isNaN ( pageJson [ property ] ) ) {
106- this . dataLayer . push ( {
107- event : `EN_PAGEJSON_${ property . toUpperCase ( ) } -${ pageJson [ property ] } ` ,
108- } ) ;
109- this . dataLayer . push ( {
110- [ `'EN_PAGEJSON_${ property . toUpperCase ( ) } '` ] : pageJson [ property ] ,
111- } ) ;
105+ dataLayerEvents . push ( `EN_PAGEJSON_${ property . toUpperCase ( ) } -${ pageJson [ property ] } ` ) ;
106+ dataLayerData [ `'EN_PAGEJSON_${ property . toUpperCase ( ) } '` ] =
107+ pageJson [ property ] ;
112108 }
113109 else {
114- this . dataLayer . push ( {
115- event : `EN_PAGEJSON_${ property . toUpperCase ( ) } -${ this . transformJSON ( pageJson [ property ] ) } ` ,
116- } ) ;
117- this . dataLayer . push ( {
118- [ `'EN_PAGEJSON_${ property . toUpperCase ( ) } '` ] : this . transformJSON ( pageJson [ property ] ) ,
119- } ) ;
110+ dataLayerEvents . push ( `EN_PAGEJSON_${ property . toUpperCase ( ) } -${ this . transformJSON ( pageJson [ property ] ) } ` ) ;
111+ dataLayerData [ `'EN_PAGEJSON_${ property . toUpperCase ( ) } '` ] =
112+ this . transformJSON ( pageJson [ property ] ) ;
120113 }
121- this . dataLayer . push ( {
122- event : "EN_PAGEJSON_" + property . toUpperCase ( ) ,
123- eventValue : pageJson [ property ] ,
124- } ) ;
114+ dataLayerEvents . push ( "EN_PAGEJSON_" + property . toUpperCase ( ) ) ;
115+ dataLayerData . eventValue = pageJson [ property ] ;
125116 }
126117 if ( ENGrid . getPageCount ( ) === ENGrid . getPageNumber ( ) ) {
127- this . dataLayer . push ( {
128- event : "EN_SUBMISSION_SUCCESS_" + pageJson . pageType . toUpperCase ( ) ,
129- } ) ;
130- this . dataLayer . push ( {
131- [ `'EN_SUBMISSION_SUCCESS_${ pageJson . pageType . toUpperCase ( ) } '` ] : "TRUE" ,
132- } ) ;
118+ dataLayerEvents . push ( "EN_SUBMISSION_SUCCESS_" + pageJson . pageType . toUpperCase ( ) ) ;
119+ dataLayerData [ `'EN_SUBMISSION_SUCCESS_${ pageJson . pageType . toUpperCase ( ) } '` ] = "TRUE" ;
133120 }
134121 }
135122 const urlParams = new URLSearchParams ( window . location . search ) ;
136123 urlParams . forEach ( ( value , key ) => {
137- this . dataLayer . push ( {
138- event : `EN_URLPARAM_${ key . toUpperCase ( ) } -${ this . transformJSON ( value ) } ` ,
139- } ) ;
140- this . dataLayer . push ( {
141- [ `'EN_URLPARAM_${ key . toUpperCase ( ) } '` ] : this . transformJSON ( value ) ,
142- } ) ;
124+ dataLayerEvents . push ( `EN_URLPARAM_${ key . toUpperCase ( ) } -${ this . transformJSON ( value ) } ` ) ;
125+ dataLayerData [ `'EN_URLPARAM_${ key . toUpperCase ( ) } '` ] =
126+ this . transformJSON ( value ) ;
143127 } ) ;
144128 if ( ENGrid . getPageType ( ) === "DONATION" ) {
145129 const recurrFreqEls = document . querySelectorAll ( '[name="transaction.recurrfreq"]' ) ;
146130 const recurrValues = [ ...recurrFreqEls ] . map ( ( el ) => el . value ) ;
147- this . dataLayer . push ( {
148- event : "EN_RECURRING_FREQUENCIES" ,
149- [ `'EN_RECURRING_FREQEUENCIES'` ] : recurrValues ,
150- } ) ;
131+ dataLayerEvents . push ( "EN_RECURRING_FREQUENCIES" ) ;
132+ dataLayerData [ `'EN_RECURRING_FREQEUENCIES'` ] = recurrValues ;
151133 }
152134 let fastFormFill = false ;
153135 // Fast Form Fill - Personal Details
@@ -156,20 +138,14 @@ export class DataLayer {
156138 const allPersonalMandatoryInputsAreFilled = FastFormFill . allMandatoryInputsAreFilled ( fastPersonalDetailsFormBlock ) ;
157139 const somePersonalMandatoryInputsAreFilled = FastFormFill . someMandatoryInputsAreFilled ( fastPersonalDetailsFormBlock ) ;
158140 if ( allPersonalMandatoryInputsAreFilled ) {
159- this . dataLayer . push ( {
160- event : "EN_FASTFORMFILL_PERSONALINFO_SUCCESS" ,
161- } ) ;
141+ dataLayerEvents . push ( "EN_FASTFORMFILL_PERSONALINFO_SUCCESS" ) ;
162142 fastFormFill = true ;
163143 }
164144 else if ( somePersonalMandatoryInputsAreFilled ) {
165- this . dataLayer . push ( {
166- event : "EN_FASTFORMFILL_PERSONALINFO_PARTIALSUCCESS" ,
167- } ) ;
145+ dataLayerEvents . push ( "EN_FASTFORMFILL_PERSONALINFO_PARTIALSUCCESS" ) ;
168146 }
169147 else {
170- this . dataLayer . push ( {
171- event : "EN_FASTFORMFILL_PERSONALINFO_FAILURE" ,
172- } ) ;
148+ dataLayerEvents . push ( "EN_FASTFORMFILL_PERSONALINFO_FAILURE" ) ;
173149 }
174150 }
175151 // Fast Form Fill - Address Details
@@ -178,31 +154,29 @@ export class DataLayer {
178154 const allAddressMandatoryInputsAreFilled = FastFormFill . allMandatoryInputsAreFilled ( fastAddressDetailsFormBlock ) ;
179155 const someAddressMandatoryInputsAreFilled = FastFormFill . someMandatoryInputsAreFilled ( fastAddressDetailsFormBlock ) ;
180156 if ( allAddressMandatoryInputsAreFilled ) {
181- this . dataLayer . push ( {
182- event : "EN_FASTFORMFILL_ADDRESS_SUCCESS" ,
183- } ) ;
157+ dataLayerEvents . push ( "EN_FASTFORMFILL_ADDRESS_SUCCESS" ) ;
184158 fastFormFill = fastFormFill ? true : false ; // Only set to true if it was true before
185159 }
186160 else if ( someAddressMandatoryInputsAreFilled ) {
187- this . dataLayer . push ( {
188- event : "EN_FASTFORMFILL_ADDRESS_PARTIALSUCCESS" ,
189- } ) ;
161+ dataLayerEvents . push ( "EN_FASTFORMFILL_ADDRESS_PARTIALSUCCESS" ) ;
190162 }
191163 else {
192- this . dataLayer . push ( {
193- event : "EN_FASTFORMFILL_ADDRESS_FAILURE" ,
194- } ) ;
164+ dataLayerEvents . push ( "EN_FASTFORMFILL_ADDRESS_FAILURE" ) ;
195165 }
196166 }
197167 if ( fastFormFill ) {
198- this . dataLayer . push ( {
199- event : "EN_FASTFORMFILL_ALL_SUCCESS" ,
200- } ) ;
168+ dataLayerEvents . push ( "EN_FASTFORMFILL_ALL_SUCCESS" ) ;
201169 }
202170 else {
203- this . dataLayer . push ( {
204- event : "EN_FASTFORMFILL_ALL_FAILURE" ,
205- } ) ;
171+ dataLayerEvents . push ( "EN_FASTFORMFILL_ALL_FAILURE" ) ;
172+ }
173+ // Push all collected events individually (GTM requirement)
174+ dataLayerEvents . forEach ( ( event ) => {
175+ this . dataLayer . push ( { event } ) ;
176+ } ) ;
177+ // Push all collected variables at once
178+ if ( Object . keys ( dataLayerData ) . length > 0 ) {
179+ this . dataLayer . push ( dataLayerData ) ;
206180 }
207181 this . attachEventListeners ( ) ;
208182 }
0 commit comments