import { Dispatch, SetStateAction } from 'react'; import { socialMediaVendors } from './socialMediaVendors'; export const enableCookies = ( vendorName: string, setIsSocialEmbedAllowed: Dispatch>> ) => { const onCustomConsent = (_: any, success: boolean) => { if (success) { setIsSocialEmbedAllowed(prev => ({ ...prev, [vendorName]: true })); // Force Facebook embed to render immediately after consent const FB = (window as any).FB; if (vendorName === 'facebook' && FB && FB.XFBML && FB.XFBML.parse) { setTimeout(() => FB.XFBML.parse(), 0); } return true; } setIsSocialEmbedAllowed(prev => ({ ...prev, [vendorName]: false })); return null; }; const vendorConfig = socialMediaVendors[vendorName]; const vendorId = vendorConfig ? vendorConfig.id : undefined; if (!window.__tcfapi || !vendorId) { // fallback: just update state if CMP not available setIsSocialEmbedAllowed(prev => ({ ...prev, [vendorName]: true })); const FB = (window as any).FB; if (vendorName === 'facebook' && FB && FB.XFBML && FB.XFBML.parse) { setTimeout(() => FB.XFBML.parse(), 0); } return; } if (window.__tcfapi && vendorId) { window.__tcfapi( 'getCustomVendorConsents', 2, (data: any, successful: boolean) => { // if grants exist, use existing purposes const purposeGrants = successful && data.grants[vendorId] ? Object.keys(data.grants[vendorId].purposeGrants) : undefined; // undefined = all purposes (window.__tcfapi as any)( 'postCustomConsent', 2, onCustomConsent, [vendorId], purposeGrants, [] ); } ); } };