diff --git a/src/lib/tracking.svelte.ts b/src/lib/tracking.svelte.ts index 3e30ca8..e5b05aa 100644 --- a/src/lib/tracking.svelte.ts +++ b/src/lib/tracking.svelte.ts @@ -42,6 +42,8 @@ export class TrackingManager { private _consent: boolean | null = $state(null); private _services: Record> = {}; private _changeCallbacks: Array<(consent: boolean | null) => void> = []; + private _loadCallbacks: Array<(consent: boolean | null) => void> = []; + private _loaded: boolean = false; private _consentQueue: Array<() => void> = []; /** @@ -80,6 +82,12 @@ export class TrackingManager { log.debug('[TrackingManager] Loaded tracking options from storage:', opts); } + // Run load callbacks + this._loadCallbacks.forEach((cb) => { + cb(this._consent); + }); + this._loaded = true; + return this; } @@ -152,6 +160,16 @@ export class TrackingManager { this.saveOpts(); } + /** + * Registers a callback to be called only once the tracking state has been + * loaded from localStorage. Will be called immediately if already loaded + * and with each subsequent load. + */ + onceLoaded(callback: (consent: boolean | null) => void) { + this._loadCallbacks.push(callback); + if (this._loaded) callback(this.consent); + } + /** * Registers a callback to be notified when the tracking permission changes. */