Hello,
I am trying to setup click tracking in GTM for the Instagram Chat Widget.
The code below works all the way until adding the click event listener.
However, the click listener doesn’t work.
Could you advise how to correct the code to make it work?
const SEND_MESSAGE_EVENT = 'chat_on_instagram';
const waitForElem = (selector) =>
new Promise((resolve) => {
console.log(`Waiting for element with selector: "${selector}"`);
const element = document.querySelector(selector);
if (element) {
console.log(`Element found immediately: "${selector}"`);
return resolve(element);
}
const observer = new MutationObserver(() => {
const foundElem = document.querySelector(selector);
if (foundElem) {
console.log(`Element found via MutationObserver: "${selector}"`);
observer.disconnect();
resolve(foundElem);
}
});
observer.observe(document.body, {
childList: true,
subtree: true,
});
console.warn(`Element with selector "${selector}" is not currently in the DOM.`);
});
console.log('Script has been loaded successfully.');
if (typeof dataLayer !== 'undefined') {
console.log('dataLayer is defined, proceeding...');
waitForElem('[class*="ButtonContainer-sc"]')
.then((sendMessageBtn) => {
console.log('Button found, adding click listener...');
sendMessageBtn.addEventListener('click', () => {
console.log('Button clicked, pushing event to dataLayer...');
dataLayer.push({ event: SEND_MESSAGE_EVENT });
console.log(`Event "${SEND_MESSAGE_EVENT}" pushed to dataLayer`);
});
})
.catch((err) => {
console.error('Error waiting for element:', err.message);
});
} else {
console.error('dataLayer is not defined');
}