{"version":3,"file":"CMS_Filter_Region_Gate.HCeyAxL3.mjs","names":["useRef","useState","__legacyOverrideHOC_DataObserverContext","_jsx"],"sources":["https:/framerusercontent.com/modules/ZDj3VWSQlPVg6vRPGEiX/FEJ8I4Oyxw4ECYOmWPoU/CMS_Filter_Region_Gate.js"],"sourcesContent":["import{jsx as _jsx}from\"react/jsx-runtime\";import{useEffect,useRef,useState}from\"react\";// ============================================================\n// CMS Filter Region Gate 1.0\n// by Tiger Media (tigermedia.io)\n//\n// Framer Override — attach to individual CMS items in\n// collections that do NOT use filter components.\n// e.g. product pages, distributor listings, news, etc.\n//\n// Replaces: RegionGateItem.tsx\n//\n// What it does:\n//   1. Detects user's region via Cloudflare (fresh per page load).\n//   2. Reads the \"Region\" text layer inside the CMS item.\n//   3. Shows items whose Region field includes the user's region.\n//   4. Items can be tagged with multiple regions (comma-separated).\n//\n// Region logic:\n//   Item tagged \"Oceania\"                → Oceania users only\n//   Item tagged \"Asia, Europe\"           → Asia + Europe users\n//   Item tagged \"Oceania, Asia, Europe,\n//     Americas, Middle East / Africa\"    → Everyone (ROW + Oceania)\n//   No Region layer                      → Shows for everyone\n//\n// For collections WITH filter components (dropdowns, search),\n// use CMS Filter Broadcaster instead.\n// ============================================================\n// ─── SETTINGS ───────────────────────────────────────────────\nconst REGION_LAYER_NAME=\"Region\";// ─── REGION MAPPING ─────────────────────────────────────────\n// Maps ISO country codes → CMS region values.\nconst REGION_MAP={// Oceania\nAU:\"Oceania\",NZ:\"Oceania\",FJ:\"Oceania\",PG:\"Oceania\",SB:\"Oceania\",TV:\"Oceania\",VU:\"Oceania\",WS:\"Oceania\",FM:\"Oceania\",MH:\"Oceania\",KI:\"Oceania\",NR:\"Oceania\",TO:\"Oceania\",CK:\"Oceania\",NU:\"Oceania\",PW:\"Oceania\",TK:\"Oceania\",AS:\"Oceania\",GU:\"Oceania\",NC:\"Oceania\",PF:\"Oceania\",WF:\"Oceania\",// Americas\nUS:\"Americas\",CA:\"Americas\",MX:\"Americas\",BR:\"Americas\",AR:\"Americas\",CL:\"Americas\",CO:\"Americas\",PE:\"Americas\",VE:\"Americas\",EC:\"Americas\",BO:\"Americas\",PY:\"Americas\",UY:\"Americas\",GY:\"Americas\",SR:\"Americas\",PA:\"Americas\",CR:\"Americas\",GT:\"Americas\",HN:\"Americas\",SV:\"Americas\",NI:\"Americas\",BZ:\"Americas\",JM:\"Americas\",TT:\"Americas\",BB:\"Americas\",BS:\"Americas\",HT:\"Americas\",DO:\"Americas\",CU:\"Americas\",PR:\"Americas\",// Europe\nGB:\"Europe\",DE:\"Europe\",FR:\"Europe\",IT:\"Europe\",ES:\"Europe\",PT:\"Europe\",NL:\"Europe\",BE:\"Europe\",CH:\"Europe\",AT:\"Europe\",SE:\"Europe\",NO:\"Europe\",DK:\"Europe\",FI:\"Europe\",IE:\"Europe\",PL:\"Europe\",CZ:\"Europe\",RO:\"Europe\",HU:\"Europe\",SK:\"Europe\",HR:\"Europe\",BG:\"Europe\",RS:\"Europe\",SI:\"Europe\",LT:\"Europe\",LV:\"Europe\",EE:\"Europe\",GR:\"Europe\",UA:\"Europe\",BY:\"Europe\",MD:\"Europe\",AL:\"Europe\",MK:\"Europe\",BA:\"Europe\",ME:\"Europe\",MT:\"Europe\",LU:\"Europe\",IS:\"Europe\",CY:\"Europe\",RU:\"Europe\",// Asia\nCN:\"Asia\",JP:\"Asia\",KR:\"Asia\",IN:\"Asia\",ID:\"Asia\",TH:\"Asia\",VN:\"Asia\",PH:\"Asia\",MY:\"Asia\",SG:\"Asia\",MM:\"Asia\",KH:\"Asia\",LA:\"Asia\",BD:\"Asia\",LK:\"Asia\",NP:\"Asia\",PK:\"Asia\",AF:\"Asia\",MN:\"Asia\",KZ:\"Asia\",UZ:\"Asia\",TM:\"Asia\",KG:\"Asia\",TJ:\"Asia\",TW:\"Asia\",HK:\"Asia\",MO:\"Asia\",BN:\"Asia\",TL:\"Asia\",MV:\"Asia\",BT:\"Asia\",// Middle East / Africa\nAE:\"Middle East / Africa\",SA:\"Middle East / Africa\",QA:\"Middle East / Africa\",KW:\"Middle East / Africa\",BH:\"Middle East / Africa\",OM:\"Middle East / Africa\",IL:\"Middle East / Africa\",JO:\"Middle East / Africa\",LB:\"Middle East / Africa\",IQ:\"Middle East / Africa\",IR:\"Middle East / Africa\",SY:\"Middle East / Africa\",YE:\"Middle East / Africa\",TR:\"Middle East / Africa\",EG:\"Middle East / Africa\",ZA:\"Middle East / Africa\",NG:\"Middle East / Africa\",KE:\"Middle East / Africa\",GH:\"Middle East / Africa\",TZ:\"Middle East / Africa\",ET:\"Middle East / Africa\",MA:\"Middle East / Africa\",TN:\"Middle East / Africa\",DZ:\"Middle East / Africa\",LY:\"Middle East / Africa\",SD:\"Middle East / Africa\",UG:\"Middle East / Africa\",CM:\"Middle East / Africa\",CI:\"Middle East / Africa\",SN:\"Middle East / Africa\",ZW:\"Middle East / Africa\",MZ:\"Middle East / Africa\",AO:\"Middle East / Africa\",BW:\"Middle East / Africa\",NA:\"Middle East / Africa\",RW:\"Middle East / Africa\",MG:\"Middle East / Africa\",MU:\"Middle East / Africa\"};const DEFAULT_REGION=\"Oceania\";// ─── IN-MEMORY SINGLETON ────────────────────────────────────\n// One fetch per page load, shared across all items on the page.\n// No sessionStorage — fresh detection every page load so VPN\n// changes take effect immediately on refresh.\nlet regionPromise=null;function getRegion(){if(!regionPromise){regionPromise=(async()=>{try{const res=await fetch(\"https://1.1.1.1/cdn-cgi/trace\",{cache:\"no-store\"});const text=await res.text();const countryCode=text.split(\"\\n\").find(line=>line.startsWith(\"loc=\"))?.split(\"=\")[1]?.trim();const region=REGION_MAP[countryCode??\"\"]||DEFAULT_REGION;window.cmsFilterRegion=region;window.cmsFilterCountryCode=countryCode;console.log(`[CMS Filter Region Gate] Detected: ${countryCode} → ${region}`);return region;}catch{console.warn(\"[CMS Filter Region Gate] Detection failed, using default:\",DEFAULT_REGION);return DEFAULT_REGION;}})();}return regionPromise;}// ─── CROSS-REGION ENTITLEMENT ───────────────────────────────\n// Bridges the logged-in user's identity into the region gate.\n// all-pages.html sets window.userSeeAllRegions from its auth\n// fetch (true for all_regions / \"Global Library\" users + admins).\n// We await the shared auth promise so the flag is known before\n// gating. Memoised singleton — one resolution per page load,\n// shared with the Broadcaster's own copy. Safe default false.\nlet seeAllPromise=null;function getSeeAllRegions(){if(!seeAllPromise){seeAllPromise=(async()=>{try{const w=window;if(w.authPromise)await w.authPromise;return w.userSeeAllRegions===true;}catch{return false;}})();}return seeAllPromise;}// ─── FLASH GUARD ────────────────────────────────────────────\n// Injected once. Hides all gated items via CSS before React\n// has a chance to render them visibly.\nfunction ensureFlashGuard(){if(document.getElementById(\"cms-region-gate-styles\"))return;const style=document.createElement(\"style\");style.id=\"cms-region-gate-styles\";style.textContent=`[data-region-hidden=\"true\"] { display: none !important; }`;document.head.appendChild(style);}// ─── THE OVERRIDE ───────────────────────────────────────────\n// Uses Framer's native { ref } pattern — no wrapper div,\n// no style injection, no layout conflicts.\nexport function CMSFilterRegionGate(){const ref=useRef(null);const[userRegion,setUserRegion]=useState(null);// null = entitlement not yet resolved; true/false once known.\nconst[seeAll,setSeeAll]=useState(null);// Inject flash guard + hide immediately\nuseEffect(()=>{ensureFlashGuard();if(ref.current){ref.current.setAttribute(\"data-region-hidden\",\"true\");}},[]);// Detect region (shared singleton)\nuseEffect(()=>{getRegion().then(setUserRegion);},[]);// Resolve the cross-region entitlement (shared singleton)\nuseEffect(()=>{getSeeAllRegions().then(setSeeAll);},[]);// Apply gate once region AND entitlement are known\nuseEffect(()=>{if(seeAll===null||!ref.current)return;const el=ref.current;// Entitled (all_regions / admin): show everything, never\n// gate by region. Resolves off auth alone, so it's correct\n// even if cdn-cgi/trace is blocked on a corporate network.\nif(seeAll){el.removeAttribute(\"data-region-hidden\");return;}if(!userRegion)return;const applyGate=()=>{const regionLayers=el.querySelectorAll(`[data-framer-name=\"${REGION_LAYER_NAME}\"]`);if(regionLayers.length===0){// No region layer = show for everyone\nel.removeAttribute(\"data-region-hidden\");return;}// Collect all region values (supports comma-separated)\nconst itemRegions=[];regionLayers.forEach(layer=>{const text=layer.textContent||\"\";text.split(\",\").map(v=>v.trim()).filter(Boolean).forEach(v=>{if(!itemRegions.includes(v)){itemRegions.push(v);}});});// Show if user's region is in the item's region list\nif(itemRegions.includes(userRegion)){el.removeAttribute(\"data-region-hidden\");}else{el.setAttribute(\"data-region-hidden\",\"true\");}};applyGate();// MutationObserver catches late-rendering Region text layers\nconst observer=new MutationObserver(()=>{const regionLayers=el.querySelectorAll(`[data-framer-name=\"${REGION_LAYER_NAME}\"]`);if(regionLayers.length>0){applyGate();observer.disconnect();}});observer.observe(el,{childList:true,subtree:true});return()=>observer.disconnect();},[userRegion,seeAll]);return{ref};}import{useContext as __legacyOverrideHOC_useContext}from\"react\";import{DataObserverContext as __legacyOverrideHOC_DataObserverContext}from\"framer\";export function withCMSFilterRegionGate(C){return props=>{__legacyOverrideHOC_useContext(__legacyOverrideHOC_DataObserverContext);return _jsx(C,{...props,...CMSFilterRegionGate(props)});};}withCMSFilterRegionGate.displayName=\"CMSFilterRegionGate\";\nexport const __FramerMetadata__ = {\"exports\":{\"withCMSFilterRegionGate\":{\"type\":\"reactHoc\",\"name\":\"withCMSFilterRegionGate\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"CMSFilterRegionGate\":{\"type\":\"override\",\"name\":\"CMSFilterRegionGate\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./CMS_Filter_Region_Gate.map"],"mappings":"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"}