Files
bot/packages/embeds/js/src/lib/pixel.ts
Baptiste Arnaud 35300eaf34 ♻️ Introduce typebot v6 with events (#1013)
Closes #885
2023-11-08 15:34:16 +01:00

45 lines
1.5 KiB
TypeScript

import { PixelBlock } from '@typebot.io/schemas'
declare const window: {
fbq?: (
arg1: string,
arg4: string,
arg2: string,
arg3: Record<string, string> | undefined
) => void
}
export const initPixel = (pixelIds: string[]) => {
const script = document.createElement('script')
script.innerHTML = `!function(f,b,e,v,n,t,s)
{if(f.fbq)return;n=f.fbq=function(){n.callMethod?
n.callMethod.apply(n,arguments):n.queue.push(arguments)};
if(!f._fbq)f._fbq=n;n.push=n;n.loaded=!0;n.version='2.0';
n.queue=[];t=b.createElement(e);t.async=!0;
t.src=v;s=b.getElementsByTagName(e)[0];
s.parentNode.insertBefore(t,s)}(window, document,'script',
'https://connect.facebook.net/en_US/fbevents.js');
${pixelIds.map((pixelId) => `fbq('init', '${pixelId}');`).join('\n')}
fbq('track', 'PageView');`
document.head.appendChild(script)
}
export const trackPixelEvent = (options: PixelBlock['options']) => {
if (!options?.eventType || !options.pixelId) return
if (!window.fbq) {
console.error('Facebook Pixel was not properly initialized')
return
}
const params = options.params?.length
? options.params.reduce<Record<string, string>>((obj, param) => {
if (!param.key || !param.value) return obj
return { ...obj, [param.key]: param.value }
}, {})
: undefined
if (options.eventType === 'Custom') {
if (!options.name) return
window.fbq('trackSingleCustom', options.pixelId, options.name, params)
}
window.fbq('trackSingle', options.pixelId, options.eventType, params)
}