Phase 4: extract config defaults, Google Consent Mode helper, and framework adapter internals into sibling files so every source file is under the hard cap. Public API surface preserved; all 135 tests green, tsup build + tsc typecheck clean. - core/ConsentManager 525 -> 467 LOC (extract config + google helpers) - react/index 511 LOC -> 199 LOC barrel + components/hooks/context - vue/index 511 LOC -> 32 LOC barrel + components/composables/context/plugin - angular/index 509 LOC -> 45 LOC barrel + interface/service/module/templates Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
39 lines
1.2 KiB
TypeScript
39 lines
1.2 KiB
TypeScript
/**
|
|
* Google Consent Mode v2 integration helper.
|
|
*
|
|
* Phase 4: extracted from ConsentManager.ts. Updates gtag() with the
|
|
* current consent category state whenever consent changes.
|
|
*/
|
|
|
|
import type { ConsentState } from '../types';
|
|
|
|
/**
|
|
* Update Google Consent Mode v2 based on the current consent categories.
|
|
* No-op when running outside the browser or when gtag is not loaded.
|
|
* Returns true if the gtag update was actually applied.
|
|
*/
|
|
export function updateGoogleConsentMode(consent: ConsentState | null): boolean {
|
|
if (typeof window === 'undefined' || !consent) {
|
|
return false;
|
|
}
|
|
|
|
const gtag = (window as unknown as { gtag?: (...args: unknown[]) => void }).gtag;
|
|
if (typeof gtag !== 'function') {
|
|
return false;
|
|
}
|
|
|
|
const { categories } = consent;
|
|
|
|
gtag('consent', 'update', {
|
|
ad_storage: categories.marketing ? 'granted' : 'denied',
|
|
ad_user_data: categories.marketing ? 'granted' : 'denied',
|
|
ad_personalization: categories.marketing ? 'granted' : 'denied',
|
|
analytics_storage: categories.analytics ? 'granted' : 'denied',
|
|
functionality_storage: categories.functional ? 'granted' : 'denied',
|
|
personalization_storage: categories.functional ? 'granted' : 'denied',
|
|
security_storage: 'granted',
|
|
});
|
|
|
|
return true;
|
|
}
|