const privateContentIsLoaded = new Promise((resolve) => { window.addEventListener('private-content-loaded', event => { const dataObject = event.detail.data['rocket_datalayer'] || {}; let customerData = {}; if (dataObject['customer'] && Object.keys(dataObject['customer']).length) { customerData = dataObject['customer']; } return resolve(customerData); }); }); const datalayerIsReady = new Promise((resolve) => { window.addEventListener('datalayer-ready', () => { const pageData = {"event_id":"6872e3897eea00.55566004","event":"gtm.datalayer","page_type":"other-page"}; return resolve(pageData); }); }); const allPromises = [privateContentIsLoaded, datalayerIsReady]; try { Promise.all(allPromises).then(sendDataGTM) } catch (e) { //Promise.all is not supported browser PromiseAllPolyfill(allPromises).then(sendDataGTM); } function sendDataGTM(result) { const customerEvent = result.shift(); const pageData = result.shift(); if (!customerEvent || !pageData) { return; } const dataGTM = Object.assign(pageData); const userDataGTM = Object.assign(customerEvent) window.dispatchEvent( new CustomEvent('datalayer-event', { detail: userDataGTM } ) ); window.dispatchEvent( new CustomEvent('datalayer-event', { detail: dataGTM } ) ); } function PromiseAllPolyfill(promises) { const results = []; let completed = 0; return new Promise((resolve, reject) => { promises.forEach((value, index) => { Promise.resolve(value) .then((res) => { results[index] = res; completed++; if (completed === promises.length) { resolve(results); } }).catch((err) => reject(err)); }); }); }