2 Commits

Author SHA1 Message Date
Elijah Duffy
3561012fb9 pixel: fix $state usage, fix load ordering 2025-12-18 21:22:07 -08:00
Elijah Duffy
b26f6160f8 set log level to warn in production 2025-12-18 21:21:46 -08:00
3 changed files with 14 additions and 29 deletions

View File

@@ -13,4 +13,6 @@ export * from './conversion/index.ts';
// set log level to debug if we're in dev mode // set log level to debug if we're in dev mode
if (dev) { if (dev) {
log.setLevel('debug'); log.setLevel('debug');
} else {
log.setLevel('warn');
} }

View File

@@ -10,7 +10,7 @@ PixelControl interface.
import type { TrackingManager } from '../tracking.svelte.ts'; import type { TrackingManager } from '../tracking.svelte.ts';
import { onNavigate } from '$app/navigation'; import { onNavigate } from '$app/navigation';
import { PixelControl, type PixelControlOptions } from './pixel-control.svelte.ts'; import { PixelControl, type PixelControlOptions } from './pixel-control.ts';
import { ensureFbc, type EnsureFbcOptions } from './fbc.ts'; import { ensureFbc, type EnsureFbcOptions } from './fbc.ts';
interface Props { interface Props {
@@ -38,22 +38,20 @@ PixelControl interface.
let pixel = $state<PixelControl | null>(null); let pixel = $state<PixelControl | null>(null);
const ensureFbcOptions: EnsureFbcOptions = $derived({ const fbcOptions: EnsureFbcOptions = {
sameSite: 'Lax', sameSite: 'Lax'
pixelLoaded: PixelControl.baseLoaded && !PixelControl.baseFailed };
});
onMount(() => { onMount(() => {
if (!trackingManager) { if (!trackingManager) {
throw new Error('MetaPixel component requires a TrackingManager to manage consent.'); throw new Error('MetaPixel component requires a TrackingManager to manage consent.');
} }
PixelControl.load();
pixel = PixelControl.initialize(trackingManager, pixelID, pixelOptions); pixel = PixelControl.initialize(trackingManager, pixelID, pixelOptions);
trackingManager.runWithConsent(() => { trackingManager.runWithConsent(() => {
if (autoPageView && pixel) { if (autoPageView && pixel) {
pixel.pageView(); pixel.pageView();
ensureFbc(ensureFbcOptions); ensureFbc(fbcOptions);
} }
}); });
}); });
@@ -62,7 +60,7 @@ PixelControl interface.
trackingManager?.runWithConsent(() => { trackingManager?.runWithConsent(() => {
if (autoPageView && pixel) { if (autoPageView && pixel) {
pixel.pageView(); pixel.pageView();
ensureFbc(ensureFbcOptions); ensureFbc(fbcOptions);
} }
}); });
}); });

View File

@@ -68,8 +68,7 @@ export class PixelControl {
private _trackingManager: MaybeGetter<TrackingManager | undefined>; private _trackingManager: MaybeGetter<TrackingManager | undefined>;
private _conversionClient?: ConversionClient = undefined; private _conversionClient?: ConversionClient = undefined;
private static _baseLoaded: boolean = $state(false); private static _baseLoaded: boolean = false;
private static _baseFailed: boolean = $state(false);
private static _registeredPixels: Record<string, PixelControl> = {}; private static _registeredPixels: Record<string, PixelControl> = {};
/** Indicates whether the Meta Pixel base script has been loaded. */ /** Indicates whether the Meta Pixel base script has been loaded. */
@@ -77,11 +76,6 @@ export class PixelControl {
return this._baseLoaded; return this._baseLoaded;
} }
/** Indicates whether the Meta Pixel base script has failed to load. */
static get baseFailed(): boolean {
return this._baseFailed;
}
/** /**
* Ensures that the Meta Pixel base has been loaded before * Ensures that the Meta Pixel base has been loaded before
* allowing further operations. * allowing further operations.
@@ -116,20 +110,11 @@ export class PixelControl {
} }
/** Loads the Meta Pixel base script. */ /** Loads the Meta Pixel base script. */
static async load() { static load() {
if (this._baseLoaded && !this.baseFailed && !!window.fbq) return; if (this._baseLoaded && !!window.fbq) return;
if (!window.fbq) { loadMetaPixel(); // Load the Meta Pixel script
try { this._baseLoaded = true;
await loadMetaPixel(); // Load the Meta Pixel script log.debug('[PixelControl] Meta Pixel base script loaded.', this._baseLoaded);
} catch (e) {
log.warn('[PixelControl] Failed to load Meta Pixel script, all events will be queued.', e);
this._baseFailed = true;
return;
} finally {
this._baseLoaded = true;
}
}
log.debug('[PixelControl] Meta Pixel base script loaded.');
} }
/** Tells the Meta pixel that the user has given consent for tracking. */ /** Tells the Meta pixel that the user has given consent for tracking. */