{"version":3,"file":"WebinarFormSubmit.DAWNs8PM.mjs","names":["useRef","useState","p"],"sources":["https:/framerusercontent.com/modules/zrDTILYuEqBcBHzR8uBE/I4UxRTSsqkgZcQFkKcdo/WebinarFormSubmit.js"],"sourcesContent":["import{jsx as _jsx,jsxs as _jsxs}from\"react/jsx-runtime\";import{forwardRef}from\"react\";import{createStore}from\"https://framer.com/m/framer/store.js@^1.0.0\";import{useEffect,useRef,useState}from\"react\";// --------------------------------------------------\n// Configuration\n// --------------------------------------------------\nconst SECONDARY_WEBHOOK_URL=\"https://webhooks.planhat.com/catch/195627f7-0d65-42cd-89b9-45a5ff561bea-6940151a4769b1e020d972eb\";const HUBSPOT_PROXY_URL=\"https://europe-west1-planhat-web.cloudfunctions.net/framer-hubspot-proxy\";const useStore=createStore({success:false});// --------------------------------------------------\n// Email validation / blocking\n// --------------------------------------------------\n// TLD must be 2+ characters\nconst emailRegex=/^[^\\s@]+@[^\\s@]+\\.[a-zA-Z]{2,}$/;const getDomain=email=>email.split(\"@\")[1]?.toLowerCase().trim()||\"\";const BLOCKED_DOMAIN_PREFIXES=[\"gmail\",\"googlemail\",\"hotmail\",\"outlook\",\"live\",\"msn\",\"icloud\",\"me\",\"mac\",\"apple\",\"yahoo\",\"proton\",\"protonmail\",\"gmx\",\"mail\",\"aol\",\"yandex\"];const BLOCKED_EXACT_DOMAINS=new Set([\"pm.me\"]);const isBlockedDomain=domain=>{if(!domain)return false;if(BLOCKED_EXACT_DOMAINS.has(domain))return true;return BLOCKED_DOMAIN_PREFIXES.some(p=>domain===p||domain.startsWith(p+\".\"));};// --------------------------------------------------\n// Helpers: find consent checkbox + state\n// --------------------------------------------------\nconst normalize=s=>(s||\"\").toLowerCase().replace(/\\s+/g,\" \").trim();const CONSENT_HINT=\"Please accept the Privacy Policy to register.\";/**\n * Tries hard to find the consent checkbox in a Framer form:\n * - by name/id containing \"consent\" / \"privacy\" / \"policy\" / \"personal data\" / \"agree\"\n * - by label text containing those words\n * - fallback: if there's exactly one checkbox, treat it as consent\n */const findConsentCheckbox=form=>{if(!form)return null;const checkboxes=Array.from(form.querySelectorAll('input[type=\"checkbox\"]'));if(!checkboxes.length)return null;const KEYWORDS=[\"consent\",\"privacy\",\"policy\",\"personal data\",\"agree\",\"gdpr\"];const scoreFor=el=>{let score=0;const attrs=[el.name,el.id,el.value,el.getAttribute(\"aria-label\")||\"\",el.getAttribute(\"data-testid\")||\"\"].filter(Boolean).join(\" \");const hay=normalize(attrs);KEYWORDS.forEach(k=>{if(hay.includes(k))score+=2;});// Label text (if any)\nif(el.id){const label=form.querySelector(`label[for=\"${CSS.escape(el.id)}\"]`);const labelText=normalize(label?.textContent||\"\");KEYWORDS.forEach(k=>{if(labelText.includes(k))score+=3;});}// Parent label wrapper\nconst parentLabel=el.closest(\"label\");const parentLabelText=normalize(parentLabel?.textContent||\"\");KEYWORDS.forEach(k=>{if(parentLabelText.includes(k))score+=3;});return score;};// pick best-scoring checkbox\nconst ranked=checkboxes.map(cb=>({cb,score:scoreFor(cb)})).sort((a,b)=>b.score-a.score);if(ranked[0]?.score>0)return ranked[0].cb;// fallback: if there is exactly one checkbox, assume it's consent\nif(checkboxes.length===1)return checkboxes[0];return null;};// --------------------------------------------------\n// Helpers: date formatting (for form name)\n// --------------------------------------------------\nconst formatDate=value=>{if(!value)return\"\";const date=new Date(value);if(isNaN(date.getTime()))return value;return date.toISOString().split(\"T\")[0]// YYYY-MM-DD\n;};// --------------------------------------------------\n// HOC\n// --------------------------------------------------\nexport function withFormSubmit(Component){return /*#__PURE__*/forwardRef((props,forwardedRef)=>{const[store,setStore]=useStore();const btnRef=useRef(null);const[hovered,setHovered]=useState(false);const[emailState,setEmailState]=useState({value:\"\",valid:false,blocked:false,domain:\"\"});const[consentState,setConsentState]=useState({present:false,checked:false});const isDisabled=!consentState.checked||!emailState.value||!emailState.valid||emailState.blocked;// --------------------------------------------------\n// Tooltip logic (EXCLUSIVE) — Consent is 1st priority\n// --------------------------------------------------\nconst tooltipText=(()=>{if(!consentState.checked)return CONSENT_HINT;if(!emailState.value)return\"Please enter your email address.\";if(!emailState.valid)return\"Please enter a valid email address.\";if(emailState.blocked)return`Please use a work email address (personal emails like @${emailState.domain} aren’t accepted).`;return\"\";})();const showTooltip=isDisabled&&hovered&&!!tooltipText;// --------------------------------------------------\n// Observe Email field + consent checkbox\n// --------------------------------------------------\nuseEffect(()=>{const btn=btnRef.current;if(!btn)return;const form=btn.closest(\"form\");if(!form)return;const input=form.querySelector('input[name=\"Email\"]')||form.querySelector('input[type=\"email\"]');const consentCheckbox=findConsentCheckbox(form);const updateEmail=()=>{if(!input)return;const value=(input.value||\"\").trim();const valid=!!value&&emailRegex.test(value);const domain=getDomain(value);const blocked=valid&&isBlockedDomain(domain);setEmailState({value,valid,blocked,domain});};const updateConsent=()=>{if(!consentCheckbox){// if none exists, don't block\nsetConsentState({present:false,checked:true});return;}setConsentState({present:true,checked:!!consentCheckbox.checked});};updateEmail();updateConsent();if(input){input.addEventListener(\"input\",updateEmail);input.addEventListener(\"change\",updateEmail);}if(consentCheckbox){consentCheckbox.addEventListener(\"input\",updateConsent);consentCheckbox.addEventListener(\"change\",updateConsent);consentCheckbox.addEventListener(\"click\",updateConsent);}return()=>{if(input){input.removeEventListener(\"input\",updateEmail);input.removeEventListener(\"change\",updateEmail);}if(consentCheckbox){consentCheckbox.removeEventListener(\"input\",updateConsent);consentCheckbox.removeEventListener(\"change\",updateConsent);consentCheckbox.removeEventListener(\"click\",updateConsent);}};},[]);// --------------------------------------------------\n// Refs\n// --------------------------------------------------\nconst setRefs=node=>{btnRef.current=node;if(!forwardedRef)return;if(typeof forwardedRef===\"function\")forwardedRef(node);else forwardedRef.current=node;};// --------------------------------------------------\n// Submit handler\n// --------------------------------------------------\nconst handleClick=async event=>{// Block submit if disabled (consent/email rules)\nif(isDisabled){event.preventDefault?.();event.stopPropagation?.();return;}const button=event.currentTarget;const form=button.closest(\"form\");if(!form)return;// Re-check consent right before submit (in case state missed)\nconst consentCheckbox=findConsentCheckbox(form);if(consentCheckbox&&!consentCheckbox.checked){event.preventDefault?.();event.stopPropagation?.();return;}// Collect ALL form data\nconst data=Object.fromEntries(new FormData(form).entries());// Values from form (Hidden fields in Framer, etc.)\nconst form_name=data.form_name?.toString().trim()||\"\";const form_type=data.form_type?.toString().trim()||\"\";const name=data.Name?.toString().trim()||\"\";const email=data.Email?.toString().trim()||\"\";const lifetime_journey=data.lifetime_journey?.toString()||localStorage.getItem(\"ph_lifetime_journey_v1\")||\"[]\";const session_attribution=data.session_attribution?.toString()||localStorage.getItem(\"ph_session_attribution_v1\")||\"{}\";const lifetime_attribution=data.lifetime_attribution?.toString()||localStorage.getItem(\"ph_lifetime_attribution_v1\")||\"{}\";const session_channel=data.session_channel?.toString()||(()=>{try{return JSON.parse(session_attribution).channel||\"\";}catch{return\"\";}})();const lifetime_channel=data.lifetime_channel?.toString()||(()=>{try{return JSON.parse(lifetime_attribution).channel||\"\";}catch{return\"\";}})();// Validate email (again, just before submit)\nif(!emailRegex.test(email))return;const domain=getDomain(email);if(isBlockedDomain(domain))return;const safeProps=props??{};if(!safeProps.url)return;// --- Planhat-only: build form_type + form_name from props (kept from old logic) ---\nconst planhat_form_type=safeProps.formType?.toString().trim()||form_type;// 1. Prepare parts\nconst pTitle=safeProps.formTitle?.toString().trim();const pLoc=safeProps.formLocation?.toString().trim();const pDate=formatDate(safeProps.formDate?.toString());// 2. Build the array\nconst planhat_form_name_parts=[pTitle,pLoc,pDate].filter(Boolean);// 3. Join with comma\nlet planhat_form_name=planhat_form_name_parts.join(\", \")||form_name;// --- SAFEHOUSE FIX (kept from old logic) ---\n// If the result is ONLY a date, prefix it to force String.\nif(planhat_form_name===pDate&&pDate.length>0&&!pTitle&&!pLoc){// Fallback: If we have a hidden form_name, use that instead\nif(form_name){planhat_form_name=form_name;}else{// Last resort: Label it so it's definitely text\nplanhat_form_name=`Event: ${pDate}`;}}// --------------------------------------------------\ntry{// Request A: HubSpot Proxy (keeps current behavior)\nconst mainRequest=fetch(HUBSPOT_PROXY_URL,{method:\"POST\",headers:{\"Content-Type\":\"application/json\"},body:JSON.stringify({webhookUrl:safeProps.url,webinarid:Number(safeProps.webinarid),framer_list_name:planhat_form_name,...data})});// Request B: Planhat Webhook (now sends ALL required fields)\nlet secondaryRequest=Promise.resolve();if(SECONDARY_WEBHOOK_URL){const params=new URLSearchParams;params.append(\"name\",name);params.append(\"email\",email);params.append(\"form_name\",planhat_form_name);params.append(\"form_type\",planhat_form_type);// send tracking too\nparams.append(\"lifetime_journey\",lifetime_journey);params.append(\"session_attribution\",session_attribution);params.append(\"lifetime_attribution\",lifetime_attribution);params.append(\"session_channel\",session_channel);params.append(\"lifetime_channel\",lifetime_channel);secondaryRequest=fetch(SECONDARY_WEBHOOK_URL,{method:\"POST\",mode:\"no-cors\",headers:{\"Content-Type\":\"application/x-www-form-urlencoded\"},body:params.toString()}).catch(err=>console.error(\"Secondary webhook failed:\",err));}const[res]=await Promise.all([mainRequest,secondaryRequest]);if(!res.ok)throw new Error(\"Submission failed\");setStore({success:true});setTimeout(()=>setStore({success:false}),1e4);}catch(e){console.error(e);}};// --------------------------------------------------\n// Render\n// --------------------------------------------------\nreturn /*#__PURE__*/_jsxs(\"span\",{style:{position:\"relative\",display:\"inline-block\",width:\"100%\"},onMouseEnter:()=>setHovered(true),onMouseLeave:()=>setHovered(false),children:[isDisabled&&/*#__PURE__*/_jsx(\"span\",{style:{position:\"absolute\",left:\"50%\",bottom:\"calc(100% + 10px)\",transform:showTooltip?\"translateX(-50%)\":\"translateX(-50%) translateY(4px)\",opacity:showTooltip?1:0,transition:\"opacity 120ms ease, transform 120ms ease\",pointerEvents:\"none\",zIndex:9999},children:/*#__PURE__*/_jsx(\"span\",{style:{background:\"#fff\",color:\"#111\",fontSize:12,padding:\"10px 12px\",borderRadius:12,border:\"1px solid rgba(0,0,0,0.08)\",boxShadow:\"0 10px 30px rgba(0,0,0,0.14)\",whiteSpace:\"nowrap\"},children:tooltipText})}),/*#__PURE__*/_jsx(Component,{ref:setRefs,...props,onClick:handleClick,disabled:isDisabled,\"aria-disabled\":isDisabled,variant:isDisabled?\"Disabled\":store.success?\"Success\":\"Default\",style:{...props?.style??{},cursor:isDisabled?\"not-allowed\":undefined}})]});});}\nexport const __FramerMetadata__ = {\"exports\":{\"withFormSubmit\":{\"type\":\"reactHoc\",\"name\":\"withFormSubmit\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./WebinarFormSubmit.map"],"mappings":"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"}