UNPKG

@piiano/forms

Version:
2 lines (1 loc) 1.58 kB
import{sendSizeEvents as p}from"../common/size.js";import{getElement as w}from"../element-selector.js";import{newSenderToTarget as b}from"../common/events.js";import{newLogger as g}from"../common/logger.js";import{FormInitOptionsValidator as u}from"../common/models.js";function S(f,{hooks:n,...o}){if(!u.parse(o))throw new Error("Invalid options provided");const a=w(f,"div"),e=document.createElement("iframe"),c="https://cdn.piiano.com/pvault-forms-iframe-v2.4.3.html",d=g("parent",o.debug);let i;e.src=c,e.style.border="none",e.style.outline="none",e.style.display="block",e.style.margin="0",e.onload=()=>{setTimeout(()=>{i=b(e.contentWindow,d),i("init",o),p(i,"container-size",a)})};let r,m;const s=h(d,e,{onSubmit(t){n?.onSubmit?.(t),m?.submit?.(t)},onError(t){n?.onError?.(t),m?.error?.(t)}});return a.appendChild(e),{async submit(){return await s,r||(r=new Promise((t,l)=>{m={submit:t,error:l},i("submit")}).finally(()=>{m=void 0,r=void 0}),r)},async destroy(){await s,a.removeChild(e)},async update({hooks:t,...l}){if(await s,!u.parse(l))throw new Error("Invalid options provided");n=t,i("update",l)}}}function h(f,n,o){return new Promise((a,e)=>{let c=!1;window.onmessage=({origin:d,data:{event:i,payload:r}})=>{if(d==="https://cdn.piiano.com")switch(f(`Received "${i}" event from iframe`),i){case"ready":c=!0,a();break;case"content-size":n.style.height=r.height+"px",n.style.width=r.width+"px";break;case"submit":o?.onSubmit?.(r);break;case"error":{const s=Object.assign(new Error(r.message),r);if(!c){e(s);return}o?.onError?.(s);break}}}})}export{S as createProtectedForm};